Polygon Sponsored slots available. Book your slot here!
ERC-721
Overview
Max Total Supply
0 Boys
Holders
149
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
13 BoysLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
OmniBoys
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-04-17 */ // SPDX-License-Identifier: UNLICENSED // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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); } } 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; } } pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } pragma solidity ^0.8.0; abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } 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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } 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); } 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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } 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: address zero is not a valid owner"); 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 overridden 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } 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, uint _configType, bytes calldata _config) external; // @notice set the send() LayerZero messaging library version to _version // @param _version - new messaging library version function setSendVersion(uint16 _version) external; // @notice set the lzReceive() LayerZero messaging library version to _version // @param _version - new messaging library version function setReceiveVersion(uint16 _version) external; // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload // @param _srcChainId - the chainId of the source chain // @param _srcAddress - the contract address of the source contract at the source chain function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external; } pragma solidity >=0.5.0; interface ILayerZeroReceiver { // @notice LayerZero endpoint will invoke this function to deliver the message on the destination // @param _srcChainId - the source endpoint identifier // @param _srcAddress - the source sending contract address from the source chain // @param _nonce - the ordered message nonce // @param _payload - the signed payload is the UA bytes has encoded to be sent function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external; } pragma solidity >=0.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, uint _gasLimit, bytes calldata _payload) external; // @notice get the inboundNonce of a lzApp from a source chain which could be EVM or non-EVM chain // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64); // @notice get the outboundNonce from this source chain which, consequently, is always an EVM // @param _srcAddress - the source chain contract address function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64); // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery // @param _dstChainId - the destination chain identifier // @param _userApplication - the user app address on this EVM chain // @param _payload - the custom message to send over LayerZero // @param _payInZRO - if false, user app pays the protocol fee in native token // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee); // @notice get this Endpoint's immutable source identifier function getChainId() external view returns (uint16); // @notice the interface to retry failed message on this Endpoint destination // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address // @param _payload - the payload to be retried function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external; // @notice query if any STORED payload (message blocking) at the endpoint. // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool); // @notice query if the _libraryAddress is valid for sending msgs. // @param _userApplication - the user app address on this EVM chain function getSendLibraryAddress(address _userApplication) external view returns (address); // @notice query if the _libraryAddress is valid for receiving msgs. // @param _userApplication - the user app address on this EVM chain function getReceiveLibraryAddress(address _userApplication) external view returns (address); // @notice query if the non-reentrancy guard for send() is on // @return true if the guard is on. false otherwise function isSendingPayload() external view returns (bool); // @notice query if the non-reentrancy guard for receive() is on // @return true if the guard is on. false otherwise function isReceivingPayload() external view returns (bool); // @notice get the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _userApplication - the contract address of the user application // @param _configType - type of configuration. every messaging library has its own convention. function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory); // @notice get the send() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getSendVersion(address _userApplication) external view returns (uint16); // @notice get the lzReceive() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getReceiveVersion(address _userApplication) external view returns (uint16); } 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); } } pragma solidity ^0.8.0; /* * a generic LzReceiver implementation */ abstract contract LzApp is Ownable, ILayerZeroReceiver, ILayerZeroUserApplicationConfig { ILayerZeroEndpoint internal immutable lzEndpoint; mapping(uint16 => bytes) internal trustedRemoteLookup; event SetTrustedRemote(uint16 _srcChainId, bytes _srcAddress); constructor(address _endpoint) { lzEndpoint = ILayerZeroEndpoint(_endpoint); } function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) external override { // lzReceive must be called by the endpoint for security require(_msgSender() == address(lzEndpoint)); // if will still block the message pathway from (srcChainId, srcAddress). should not receive message from untrusted remote. require(_srcAddress.length == trustedRemoteLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedRemoteLookup[_srcChainId]), "LzReceiver: invalid source sending contract"); _blockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } // abstract function - the default behaviour of LayerZero is blocking. See: NonblockingLzApp if you dont need to enforce ordered messaging function _blockingLzReceive(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 _adapterParam) internal { require(trustedRemoteLookup[_dstChainId].length != 0, "LzSend: destination chain is not a trusted source."); lzEndpoint.send{value: msg.value}(_dstChainId, trustedRemoteLookup[_dstChainId], _payload, _refundAddress, _zroPaymentAddress, _adapterParam); } //---------------------------UserApplication config---------------------------------------- function getConfig(uint16, uint16 _chainId, address, uint _configType) external view returns (bytes memory) { return lzEndpoint.getConfig(lzEndpoint.getSendVersion(address(this)), _chainId, address(this), _configType); } // generic config for LayerZero user Application function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external override onlyOwner { lzEndpoint.setConfig(_version, _chainId, _configType, _config); } function setSendVersion(uint16 _version) external override onlyOwner { lzEndpoint.setSendVersion(_version); } function setReceiveVersion(uint16 _version) external override onlyOwner { lzEndpoint.setReceiveVersion(_version); } function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external override onlyOwner { lzEndpoint.forceResumeReceive(_srcChainId, _srcAddress); } // allow owner to set it multiple times. function setTrustedRemote(uint16 _srcChainId, bytes calldata _srcAddress) external onlyOwner { trustedRemoteLookup[_srcChainId] = _srcAddress; emit SetTrustedRemote(_srcChainId, _srcAddress); } function isTrustedRemote(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool) { bytes memory trustedSource = trustedRemoteLookup[_srcChainId]; return keccak256(trustedSource) == keccak256(_srcAddress); } //--------------------------- VIEW FUNCTION ---------------------------------------- // interacting with the LayerZero Endpoint and remote contracts function getTrustedRemote(uint16 _chainId) external view returns (bytes memory) { return trustedRemoteLookup[_chainId]; } function getLzEndpoint() external view returns (address) { return address(lzEndpoint); } } pragma solidity ^0.8.0; /* * the default LayerZero messaging behaviour is blocking, i.e. any failed message will block the channel * this abstract class try-catch all fail messages and store locally for future retry. hence, non-blocking * NOTE: if the srcAddress is not configured properly, it will still block the message pathway from (srcChainId, srcAddress) */ abstract contract NonblockingLzApp is LzApp { constructor(address _endpoint) LzApp(_endpoint) {} mapping(uint16 => mapping(bytes => mapping(uint => bytes32))) public failedMessages; event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload); // overriding the virtual function in LzReceiver function _blockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual override { // try-catch all errors/exceptions try this.nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload) { // do nothing } catch { // error / exception failedMessages[_srcChainId][_srcAddress][_nonce] = keccak256(_payload); emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload); } } function nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public virtual { // only internal transaction require(_msgSender() == address(this), "LzReceiver: caller must be Bridge."); _nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } //@notice override this function function _nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual; function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes calldata _payload) external payable virtual { // assert there is message to retry bytes32 payloadHash = failedMessages[_srcChainId][_srcAddress][_nonce]; require(payloadHash != bytes32(0), "LzReceiver: no stored message"); require(keccak256(_payload) == payloadHash, "LzReceiver: invalid payload"); // clear the stored message failedMessages[_srcChainId][_srcAddress][_nonce] = bytes32(0); // execute the message. revert if it fails again this.nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } } pragma solidity ^0.8.0; /** * @dev Interface of the ONFT standard */ interface IONFT is IERC721 { /** * @dev send token `_tokenId` to (`_dstChainId`, `_toAddress`) * `_toAddress` can be any size depending on the `dstChainId`. * `_zroPaymentAddress` set to address(0x0) if not paying in ZRO (LayerZero Token) * `_adapterParam` is a flexible bytes array to indicate messaging adapter services */ function send(uint16 _dstChainId, bytes calldata _toAddress, uint _tokenId, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParam) external payable; /** * @dev send token `_tokenId` to (`_dstChainId`, `_toAddress`) from `_from` * `_toAddress` can be any size depending on the `dstChainId`. * `_zroPaymentAddress` set to address(0x0) if not paying in ZRO (LayerZero Token) * `_adapterParam` is a flexible bytes array to indicate messaging adapter services */ function sendFrom(address _from, uint16 _dstChainId, bytes calldata _toAddress, uint _tokenId, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParam) external payable; /** * @dev Emitted when `_tokenId` are moved from the `_sender` to (`_dstChainId`, `_toAddress`) * `_nonce` is the outbound nonce from */ event SendToChain(address indexed _sender, uint16 indexed _dstChainId, bytes indexed _toAddress, uint _tokenId, uint64 _nonce); /** * @dev Emitted when `_tokenId` are sent from `_srcChainId` to the `_toAddress` at this chain. `_nonce` is the inbound nonce. */ event ReceiveFromChain(uint16 _srcChainId, address _toAddress, uint _tokenId, uint64 _nonce); } pragma solidity ^0.8.0; contract ONFT is IONFT, NonblockingLzApp, ERC721 { string public baseTokenURI = "https://ipfs.io/ipfs/QmfTSAoGB8JnptHMgn9miK3nq1i8udijhmaebUwS9uY7T4/"; constructor(string memory _name, string memory _symbol, address _lzEndpoint) ERC721(_name, _symbol) NonblockingLzApp(_lzEndpoint) {} function sendFrom(address _from, uint16 _dstChainId, bytes calldata _toAddress, uint _tokenId, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParam) external payable virtual override { _send(_from, _dstChainId, _toAddress, _tokenId, _refundAddress, _zroPaymentAddress, _adapterParam); } function send(uint16 _dstChainId, bytes calldata _toAddress, uint _tokenId, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParam) external payable virtual override { _send(_msgSender(), _dstChainId, _toAddress, _tokenId, _refundAddress, _zroPaymentAddress, _adapterParam); } function _send(address _from, uint16 _dstChainId, bytes memory _toAddress, uint _tokenId, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParam) internal virtual { require(_isApprovedOrOwner(_msgSender(), _tokenId), "ERC721: transfer caller is not owner nor approved"); _beforeSend(_from, _dstChainId, _toAddress, _tokenId); bytes memory payload = abi.encode(_toAddress, _tokenId); _lzSend(_dstChainId, payload, _refundAddress, _zroPaymentAddress, _adapterParam); uint64 nonce = lzEndpoint.getOutboundNonce(_dstChainId, address(this)); emit SendToChain(_from, _dstChainId, _toAddress, _tokenId, nonce); _afterSend(_from, _dstChainId, _toAddress, _tokenId); } function withdraw() payable onlyOwner public { payable(owner()).transfer(address(this).balance); } function _nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual override { _beforeReceive(_srcChainId, _srcAddress, _payload); // decode and load the toAddress (bytes memory toAddress, uint tokenId) = abi.decode(_payload, (bytes, uint)); address localToAddress; assembly { localToAddress := mload(add(toAddress, 20)) } // if the toAddress is 0x0, burn it or it will get cached if (localToAddress == address(0x0)) localToAddress == address(0xdEaD); _afterReceive(_srcChainId, localToAddress, tokenId); emit ReceiveFromChain(_srcChainId, localToAddress, tokenId, _nonce); } function _beforeSend(address /* _from */, uint16 /* _dstChainId */, bytes memory /* _toAddress */, uint _tokenId) internal virtual { _burn(_tokenId); } function _afterSend(address /* _from */, uint16 /* _dstChainId */, bytes memory /* _toAddress */, uint /* _tokenId */) internal virtual {} function _beforeReceive(uint16 /* _srcChainId */, bytes memory /* _srcAddress */, bytes memory /* _payload */) internal virtual {} function _afterReceive(uint16 /* _srcChainId */, address _toAddress, uint _tokenId) internal virtual { _safeMint(_toAddress, _tokenId); } function setBaseURI(string memory _baseTokenURI) public onlyOwner { baseTokenURI = _baseTokenURI; } function _baseURI() internal view override returns (string memory) { return baseTokenURI; } function donate() external payable { require(msg.value > 0); } } pragma solidity ^0.8; contract UniversalONFT is ONFT { using SafeMath for uint256; uint public nextMintId; uint public maxMintId; constructor(string memory _name, string memory _symbol, address _layerZeroEndpoint, uint _startMintId, uint _endMintId) ONFT(_name, _symbol, _layerZeroEndpoint) { nextMintId = _startMintId; maxMintId = _endMintId; } function mint(uint256 numberOfTokens) external { require(nextMintId <= maxMintId, "OmniBoys: Max Mint limit reached"); require(numberOfTokens == 1 || numberOfTokens == 2, "Can mint 2 tokens at a time"); uint newId = nextMintId; nextMintId++; _safeMint(msg.sender, newId); if(numberOfTokens == 2 && nextMintId <= maxMintId) { newId = nextMintId; nextMintId++; _safeMint(msg.sender, newId); } } } pragma solidity 0.8.4; contract OmniBoys is UniversalONFT { constructor(string memory _name, string memory _symbol, address _layerZeroEndpoint, uint _startMintId, uint _endMintId) UniversalONFT(_name, _symbol, _layerZeroEndpoint, _startMintId, _endMintId) {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"},{"internalType":"uint256","name":"_startMintId","type":"uint256"},{"internalType":"uint256","name":"_endMintId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"address","name":"_toAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"}],"name":"ReceiveFromChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":true,"internalType":"bytes","name":"_toAddress","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"}],"name":"SendToChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"SetTrustedRemote","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":[{"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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"forceResumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_configType","type":"uint256"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLzEndpoint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getTrustedRemote","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"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"}],"name":"isTrustedRemote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMintId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextMintId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"nonblockingLzReceive","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":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"address","name":"_zroPaymentAddress","type":"address"},{"internalType":"bytes","name":"_adapterParam","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"address","name":"_zroPaymentAddress","type":"address"},{"internalType":"bytes","name":"_adapterParam","type":"bytes"}],"name":"sendFrom","outputs":[],"stateMutability":"payable","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":"_baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","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":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a060405260405180608001604052806044815260200162005e62604491396009908051906020019062000035929190620001ef565b503480156200004357600080fd5b5060405162005ea638038062005ea683398181016040528101906200006991906200033f565b84848484848484848282828062000095620000896200012360201b60201c565b6200012b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050508160039080519060200190620000e6929190620001ef565b508060049080519060200190620000ff929190620001ef565b50505050505081600a8190555080600b8190555050505050505050505050620005d5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001fd90620004c6565b90600052602060002090601f0160209004810192826200022157600085556200026d565b82601f106200023c57805160ff19168380011785556200026d565b828001600101855582156200026d579182015b828111156200026c5782518255916020019190600101906200024f565b5b5090506200027c919062000280565b5090565b5b808211156200029b57600081600090555060010162000281565b5090565b6000620002b6620002b0846200041c565b620003f3565b905082815260208101848484011115620002cf57600080fd5b620002dc84828562000490565b509392505050565b600081519050620002f581620005a1565b92915050565b600082601f8301126200030d57600080fd5b81516200031f8482602086016200029f565b91505092915050565b6000815190506200033981620005bb565b92915050565b600080600080600060a086880312156200035857600080fd5b600086015167ffffffffffffffff8111156200037357600080fd5b6200038188828901620002fb565b955050602086015167ffffffffffffffff8111156200039f57600080fd5b620003ad88828901620002fb565b9450506040620003c088828901620002e4565b9350506060620003d38882890162000328565b9250506080620003e68882890162000328565b9150509295509295909350565b6000620003ff62000412565b90506200040d8282620004fc565b919050565b6000604051905090565b600067ffffffffffffffff8211156200043a576200043962000561565b5b620004458262000590565b9050602081019050919050565b60006200045f8262000466565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620004b057808201518184015260208101905062000493565b83811115620004c0576000848401525b50505050565b60006002820490506001821680620004df57607f821691505b60208210811415620004f657620004f562000532565b5b50919050565b620005078262000590565b810181811067ffffffffffffffff8211171562000529576200052862000561565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620005ac8162000452565b8114620005b857600080fd5b50565b620005c68162000486565b8114620005d257600080fd5b50565b60805160601c61582f62000633600039600081816108a001528181610bac01528181610e530152818161117d015281816119d301528181611cc801528181611fdd01528181612019015281816128090152612f27015261582f6000f3fe6080604052600436106102245760003560e01c8063715018a611610123578063d1deba1f116100ab578063eb8d72b71161006f578063eb8d72b7146107e9578063ed88c68e14610812578063eed33cef1461081c578063f2fde38b14610838578063f5ecbdbc1461086157610224565b8063d1deba1f1461070f578063d547cfb71461072b578063dacbcbe214610756578063e1d4c87014610781578063e985e9c5146107ac57610224565b8063a0712d68116100f2578063a0712d681461062e578063a22cb46514610657578063b88d4fde14610680578063c87b56dd146106a9578063cbed8b9c146106e657610224565b8063715018a6146105845780638da5cb5b1461059b5780638ee74912146105c657806395d89b411461060357610224565b80633d8b38f6116101b15780636352211e116101755780636352211e1461047957806366ad5c8a146104b657806369b41f95146104df5780636aa99da31461051c57806370a082311461054757610224565b80633d8b38f6146103a557806342842e0e146103e257806342d65a8d1461040b578063519056361461043457806355f804b31461045057610224565b8063081812fc116101f8578063081812fc146102e3578063095ea7b31461032057806310ddb1371461034957806323b872dd146103725780633ccfd60b1461039b57610224565b80621d35671461022957806301ffc9a71461025257806306fdde031461028f57806307e0db17146102ba575b600080fd5b34801561023557600080fd5b50610250600480360381019061024b9190613ea5565b61089e565b005b34801561025e57600080fd5b5061027960048036038101906102749190613b11565b6109ba565b60405161028691906146f2565b60405180910390f35b34801561029b57600080fd5b506102a4610a9c565b6040516102b1919061477a565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190613c39565b610b2e565b005b3480156102ef57600080fd5b5061030a6004803603810190610305919061401b565b610c38565b604051610317919061468b565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613ad5565b610cbd565b005b34801561035557600080fd5b50610370600480360381019061036b9190613c39565b610dd5565b005b34801561037e57600080fd5b50610399600480360381019061039491906138f9565b610edf565b005b6103a3610f3f565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190613c8b565b61100b565b6040516103d991906146f2565b60405180910390f35b3480156103ee57600080fd5b50610409600480360381019061040491906138f9565b6110df565b005b34801561041757600080fd5b50610432600480360381019061042d9190613c8b565b6110ff565b005b61044e600480360381019061044991906139ff565b61120f565b005b34801561045c57600080fd5b5061047760048036038101906104729190613bf8565b61126e565b005b34801561048557600080fd5b506104a0600480360381019061049b919061401b565b611304565b6040516104ad919061468b565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190613ea5565b6113b6565b005b3480156104eb57600080fd5b5061050660048036038101906105019190613c39565b61143d565b6040516105139190614728565b60405180910390f35b34801561052857600080fd5b506105316114ea565b60405161053e9190614ce8565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613894565b6114f0565b60405161057b9190614ce8565b60405180910390f35b34801561059057600080fd5b506105996115a8565b005b3480156105a757600080fd5b506105b0611630565b6040516105bd919061468b565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190613da6565b611659565b6040516105fa919061470d565b60405180910390f35b34801561060f57600080fd5b506106186116a1565b604051610625919061477a565b60405180910390f35b34801561063a57600080fd5b506106556004803603810190610650919061401b565b611733565b005b34801561066357600080fd5b5061067e600480360381019061067991906139c3565b611836565b005b34801561068c57600080fd5b506106a760048036038101906106a29190613948565b61184c565b005b3480156106b557600080fd5b506106d060048036038101906106cb919061401b565b6118ae565b6040516106dd919061477a565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613f9b565b611955565b005b61072960048036038101906107249190613e0d565b611a6b565b005b34801561073757600080fd5b50610740611c36565b60405161074d919061477a565b60405180910390f35b34801561076257600080fd5b5061076b611cc4565b604051610778919061468b565b60405180910390f35b34801561078d57600080fd5b50610796611cec565b6040516107a39190614ce8565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce91906138bd565b611cf2565b6040516107e091906146f2565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190613c8b565b611d86565b005b61081a611e6d565b005b61083660048036038101906108319190613ce3565b611e7c565b005b34801561084457600080fd5b5061085f600480360381019061085a9190613894565b611ee1565b005b34801561086d57600080fd5b5061088860048036038101906108839190613f38565b611fd9565b6040516108959190614728565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108dd612141565b73ffffffffffffffffffffffffffffffffffffffff16146108fd57600080fd5b600160008561ffff1661ffff168152602001908152602001600020805461092390614fc5565b905083511480156109695750600160008561ffff1661ffff1681526020019081526020016000206040516109579190614650565b60405180910390208380519060200120145b6109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f9061481c565b60405180910390fd5b6109b484848484612149565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a955750610a948261225e565b5b9050919050565b606060038054610aab90614fc5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad790614fc5565b8015610b245780601f10610af957610100808354040283529160200191610b24565b820191906000526020600020905b815481529060010190602001808311610b0757829003601f168201915b5050505050905090565b610b36612141565b73ffffffffffffffffffffffffffffffffffffffff16610b54611630565b73ffffffffffffffffffffffffffffffffffffffff1614610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba1906149dc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307e0db17826040518263ffffffff1660e01b8152600401610c039190614a7c565b600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b5050505050565b6000610c43826122c8565b610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c799061499c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cc882611304565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090614a1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d58612141565b73ffffffffffffffffffffffffffffffffffffffff161480610d875750610d8681610d81612141565b611cf2565b5b610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd906148dc565b60405180910390fd5b610dd08383612334565b505050565b610ddd612141565b73ffffffffffffffffffffffffffffffffffffffff16610dfb611630565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e48906149dc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166310ddb137826040518263ffffffff1660e01b8152600401610eaa9190614a7c565b600060405180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b5050505050565b610ef0610eea612141565b826123ed565b610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690614a3c565b60405180910390fd5b610f3a8383836124cb565b505050565b610f47612141565b73ffffffffffffffffffffffffffffffffffffffff16610f65611630565b73ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb2906149dc565b60405180910390fd5b610fc3611630565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611008573d6000803e3d6000fd5b50565b600080600160008661ffff1661ffff168152602001908152602001600020805461103490614fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461106090614fc5565b80156110ad5780601f10611082576101008083540402835291602001916110ad565b820191906000526020600020905b81548152906001019060200180831161109057829003601f168201915b5050505050905083836040516110c4929190614620565b60405180910390208180519060200120149150509392505050565b6110fa8383836040518060200160405280600081525061184c565b505050565b611107612141565b73ffffffffffffffffffffffffffffffffffffffff16611125611630565b73ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611172906149dc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342d65a8d8484846040518463ffffffff1660e01b81526004016111d893929190614b05565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050505050565b611263898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508888888888612732565b505050505050505050565b611276612141565b73ffffffffffffffffffffffffffffffffffffffff16611294611630565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906149dc565b60405180910390fd5b8060099080519060200190611300929190613502565b5050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a4906148fc565b60405180910390fd5b80915050919050565b3073ffffffffffffffffffffffffffffffffffffffff166113d5612141565b73ffffffffffffffffffffffffffffffffffffffff161461142b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114229061483c565b60405180910390fd5b61143784848484612937565b50505050565b6060600160008361ffff1661ffff168152602001908152602001600020805461146590614fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461149190614fc5565b80156114de5780601f106114b3576101008083540402835291602001916114de565b820191906000526020600020905b8154815290600101906020018083116114c157829003601f168201915b50505050509050919050565b600a5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611558906148bc565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b0612141565b73ffffffffffffffffffffffffffffffffffffffff166115ce611630565b73ffffffffffffffffffffffffffffffffffffffff1614611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b906149dc565b60405180910390fd5b61162e60006129b7565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60026020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050505481565b6060600480546116b090614fc5565b80601f01602080910402602001604051908101604052809291908181526020018280546116dc90614fc5565b80156117295780601f106116fe57610100808354040283529160200191611729565b820191906000526020600020905b81548152906001019060200180831161170c57829003601f168201915b5050505050905090565b600b54600a54111561177a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117719061493c565b60405180910390fd5b60018114806117895750600281145b6117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf90614a5c565b60405180910390fd5b6000600a549050600a60008154809291906117e290615028565b91905055506117f13382612a7b565b6002821480156118055750600b54600a5411155b1561183257600a549050600a600081548092919061182290615028565b91905055506118313382612a7b565b5b5050565b611848611841612141565b8383612a99565b5050565b61185d611857612141565b836123ed565b61189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390614a3c565b60405180910390fd5b6118a884848484612c06565b50505050565b60606118b9826122c8565b6118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef906149fc565b60405180910390fd5b6000611902612c62565b90506000815111611922576040518060200160405280600081525061194d565b8061192c84612cf4565b60405160200161193d929190614667565b6040516020818303038152906040525b915050919050565b61195d612141565b73ffffffffffffffffffffffffffffffffffffffff1661197b611630565b73ffffffffffffffffffffffffffffffffffffffff16146119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906149dc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cbed8b9c86868686866040518663ffffffff1660e01b8152600401611a32959493929190614c9a565b600060405180830381600087803b158015611a4c57600080fd5b505af1158015611a60573d6000803e3d6000fd5b505050505050505050565b6000600260008761ffff1661ffff16815260200190815260200160002085604051611a969190614639565b908152602001604051809103902060008567ffffffffffffffff1681526020019081526020016000205490506000801b811415611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff906149bc565b60405180910390fd5b808383604051611b19929190614620565b604051809103902014611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b589061497c565b60405180910390fd5b6000801b600260008861ffff1661ffff16815260200190815260200160002086604051611b8e9190614639565b908152602001604051809103902060008667ffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff166366ad5c8a87878787876040518663ffffffff1660e01b8152600401611bfc959493929190614b37565b600060405180830381600087803b158015611c1657600080fd5b505af1158015611c2a573d6000803e3d6000fd5b50505050505050505050565b60098054611c4390614fc5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6f90614fc5565b8015611cbc5780601f10611c9157610100808354040283529160200191611cbc565b820191906000526020600020905b815481529060010190602001808311611c9f57829003601f168201915b505050505081565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600b5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d8e612141565b73ffffffffffffffffffffffffffffffffffffffff16611dac611630565b73ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df9906149dc565b60405180910390fd5b8181600160008661ffff1661ffff1681526020019081526020016000209190611e2c929190613588565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611e6093929190614b05565b60405180910390a1505050565b60003411611e7a57600080fd5b565b611ed7611e87612141565b8989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508888888888612732565b5050505050505050565b611ee9612141565b73ffffffffffffffffffffffffffffffffffffffff16611f07611630565b73ffffffffffffffffffffffffffffffffffffffff1614611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f54906149dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906147bc565b60405180910390fd5b611fd6816129b7565b50565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5ecbdbc7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663096568f6306040518263ffffffff1660e01b8152600401612070919061468b565b60206040518083038186803b15801561208857600080fd5b505afa15801561209c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c09190613c62565b8630866040518563ffffffff1660e01b81526004016120e29493929190614c55565b60006040518083038186803b1580156120fa57600080fd5b505afa15801561210e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906121379190613b63565b9050949350505050565b600033905090565b3073ffffffffffffffffffffffffffffffffffffffff166366ad5c8a858585856040518563ffffffff1660e01b81526004016121889493929190614b8c565b600060405180830381600087803b1580156121a257600080fd5b505af19250505080156121b3575060015b612257578080519060200120600260008661ffff1661ffff168152602001908152602001600020846040516121e89190614639565b908152602001604051809103902060008467ffffffffffffffff168152602001908152602001600020819055507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d8484848460405161224a9493929190614b8c565b60405180910390a1612258565b5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123a783611304565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123f8826122c8565b612437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242e9061489c565b60405180910390fd5b600061244283611304565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061248457506124838185611cf2565b5b806124c257508373ffffffffffffffffffffffffffffffffffffffff166124aa84610c38565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124eb82611304565b73ffffffffffffffffffffffffffffffffffffffff1614612541576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612538906147dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a89061485c565b60405180910390fd5b6125bc838383612ea1565b6125c7600082612334565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126179190614e9d565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266e9190614e16565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461272d838383612ea6565b505050565b61274361273d612141565b866123ed565b612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614a3c565b60405180910390fd5b61278e88888888612eab565b600086866040516020016127a392919061474a565b60405160208183030381529060405290506128058882878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612eba565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637a1457488a306040518363ffffffff1660e01b8152600401612862929190614a97565b60206040518083038186803b15801561287a57600080fd5b505afa15801561288e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b29190614044565b9050876040516128c29190614639565b60405180910390208961ffff168b73ffffffffffffffffffffffffffffffffffffffff167f024797cc77ce15dc717112d54fb1df125fdfd8c81344fb046c5e074427ce15438a85604051612917929190614d03565b60405180910390a461292b8a8a8a8a612fdc565b50505050505050505050565b612942848483612fe2565b600080828060200190518101906129599190613ba4565b91509150600060148301519050612971878284612fe7565b7fd4d39d20f72eabd06c301e516d54653dfc9116de62c1d54bf1cb48cf3b42a7db878284886040516129a69493929190614ac0565b60405180910390a150505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a95828260405180602001604052806000815250612ff6565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff9061487c565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bf991906146f2565b60405180910390a3505050565b612c118484846124cb565b612c1d84848484613051565b612c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c539061479c565b60405180910390fd5b50505050565b606060098054612c7190614fc5565b80601f0160208091040260200160405190810160405280929190818152602001828054612c9d90614fc5565b8015612cea5780601f10612cbf57610100808354040283529160200191612cea565b820191906000526020600020905b815481529060010190602001808311612ccd57829003601f168201915b5050505050905090565b60606000821415612d3c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e9c565b600082905060005b60008214612d6e578080612d5790615028565b915050600a82612d679190614e6c565b9150612d44565b60008167ffffffffffffffff811115612db0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612de25781602001600182028036833780820191505090505b5090505b60008514612e9557600182612dfb9190614e9d565b9150600a85612e0a9190615071565b6030612e169190614e16565b60f81b818381518110612e52577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e8e9190614e6c565b9450612de6565b8093505050505b919050565b505050565b505050565b612eb4816131e8565b50505050565b6000600160008761ffff1661ffff1681526020019081526020016000208054612ee290614fc5565b90501415612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c9061491c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c58031003487600160008a61ffff1661ffff168152602001908152602001600020888888886040518863ffffffff1660e01b8152600401612fa396959493929190614bdf565b6000604051808303818588803b158015612fbc57600080fd5b505af1158015612fd0573d6000803e3d6000fd5b50505050505050505050565b50505050565b505050565b612ff18282612a7b565b505050565b6130008383613305565b61300d6000848484613051565b61304c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130439061479c565b60405180910390fd5b505050565b60006130728473ffffffffffffffffffffffffffffffffffffffff166134df565b156131db578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261309b612141565b8786866040518563ffffffff1660e01b81526004016130bd94939291906146a6565b602060405180830381600087803b1580156130d757600080fd5b505af192505050801561310857506040513d601f19601f820116820180604052508101906131059190613b3a565b60015b61318b573d8060008114613138576040519150601f19603f3d011682016040523d82523d6000602084013e61313d565b606091505b50600081511415613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a9061479c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131e0565b600190505b949350505050565b60006131f382611304565b905061320181600084612ea1565b61320c600083612334565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461325c9190614e9d565b925050819055506005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461330181600084612ea6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336c9061495c565b60405180910390fd5b61337e816122c8565b156133be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b5906147fc565b60405180910390fd5b6133ca60008383612ea1565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461341a9190614e16565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134db60008383612ea6565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461350e90614fc5565b90600052602060002090601f0160209004810192826135305760008555613577565b82601f1061354957805160ff1916838001178555613577565b82800160010185558215613577579182015b8281111561357657825182559160200191906001019061355b565b5b509050613584919061360e565b5090565b82805461359490614fc5565b90600052602060002090601f0160209004810192826135b657600085556135fd565b82601f106135cf57803560ff19168380011785556135fd565b828001600101855582156135fd579182015b828111156135fc5782358255916020019190600101906135e1565b5b50905061360a919061360e565b5090565b5b8082111561362757600081600090555060010161360f565b5090565b600061363e61363984614d51565b614d2c565b90508281526020810184848401111561365657600080fd5b613661848285614f83565b509392505050565b600061367c61367784614d51565b614d2c565b90508281526020810184848401111561369457600080fd5b61369f848285614f92565b509392505050565b60006136ba6136b584614d82565b614d2c565b9050828152602081018484840111156136d257600080fd5b6136dd848285614f83565b509392505050565b6000813590506136f481615758565b92915050565b6000813590506137098161576f565b92915050565b60008135905061371e81615786565b92915050565b6000813590506137338161579d565b92915050565b6000815190506137488161579d565b92915050565b60008083601f84011261376057600080fd5b8235905067ffffffffffffffff81111561377957600080fd5b60208301915083600182028301111561379157600080fd5b9250929050565b600082601f8301126137a957600080fd5b81356137b984826020860161362b565b91505092915050565b600082601f8301126137d357600080fd5b81516137e3848260208601613669565b91505092915050565b600082601f8301126137fd57600080fd5b813561380d8482602086016136a7565b91505092915050565b600081359050613825816157b4565b92915050565b60008151905061383a816157b4565b92915050565b60008135905061384f816157cb565b92915050565b600081519050613864816157cb565b92915050565b600081359050613879816157e2565b92915050565b60008151905061388e816157e2565b92915050565b6000602082840312156138a657600080fd5b60006138b4848285016136e5565b91505092915050565b600080604083850312156138d057600080fd5b60006138de858286016136e5565b92505060206138ef858286016136e5565b9150509250929050565b60008060006060848603121561390e57600080fd5b600061391c868287016136e5565b935050602061392d868287016136e5565b925050604061393e86828701613840565b9150509250925092565b6000806000806080858703121561395e57600080fd5b600061396c878288016136e5565b945050602061397d878288016136e5565b935050604061398e87828801613840565b925050606085013567ffffffffffffffff8111156139ab57600080fd5b6139b787828801613798565b91505092959194509250565b600080604083850312156139d657600080fd5b60006139e4858286016136e5565b92505060206139f58582860161370f565b9150509250929050565b600080600080600080600080600060e08a8c031215613a1d57600080fd5b6000613a2b8c828d016136e5565b9950506020613a3c8c828d01613816565b98505060408a013567ffffffffffffffff811115613a5957600080fd5b613a658c828d0161374e565b97509750506060613a788c828d01613840565b9550506080613a898c828d016136fa565b94505060a0613a9a8c828d016136e5565b93505060c08a013567ffffffffffffffff811115613ab757600080fd5b613ac38c828d0161374e565b92509250509295985092959850929598565b60008060408385031215613ae857600080fd5b6000613af6858286016136e5565b9250506020613b0785828601613840565b9150509250929050565b600060208284031215613b2357600080fd5b6000613b3184828501613724565b91505092915050565b600060208284031215613b4c57600080fd5b6000613b5a84828501613739565b91505092915050565b600060208284031215613b7557600080fd5b600082015167ffffffffffffffff811115613b8f57600080fd5b613b9b848285016137c2565b91505092915050565b60008060408385031215613bb757600080fd5b600083015167ffffffffffffffff811115613bd157600080fd5b613bdd858286016137c2565b9250506020613bee85828601613855565b9150509250929050565b600060208284031215613c0a57600080fd5b600082013567ffffffffffffffff811115613c2457600080fd5b613c30848285016137ec565b91505092915050565b600060208284031215613c4b57600080fd5b6000613c5984828501613816565b91505092915050565b600060208284031215613c7457600080fd5b6000613c828482850161382b565b91505092915050565b600080600060408486031215613ca057600080fd5b6000613cae86828701613816565b935050602084013567ffffffffffffffff811115613ccb57600080fd5b613cd78682870161374e565b92509250509250925092565b60008060008060008060008060c0898b031215613cff57600080fd5b6000613d0d8b828c01613816565b985050602089013567ffffffffffffffff811115613d2a57600080fd5b613d368b828c0161374e565b97509750506040613d498b828c01613840565b9550506060613d5a8b828c016136fa565b9450506080613d6b8b828c016136e5565b93505060a089013567ffffffffffffffff811115613d8857600080fd5b613d948b828c0161374e565b92509250509295985092959890939650565b600080600060608486031215613dbb57600080fd5b6000613dc986828701613816565b935050602084013567ffffffffffffffff811115613de657600080fd5b613df286828701613798565b9250506040613e0386828701613840565b9150509250925092565b600080600080600060808688031215613e2557600080fd5b6000613e3388828901613816565b955050602086013567ffffffffffffffff811115613e5057600080fd5b613e5c88828901613798565b9450506040613e6d8882890161386a565b935050606086013567ffffffffffffffff811115613e8a57600080fd5b613e968882890161374e565b92509250509295509295909350565b60008060008060808587031215613ebb57600080fd5b6000613ec987828801613816565b945050602085013567ffffffffffffffff811115613ee657600080fd5b613ef287828801613798565b9350506040613f038782880161386a565b925050606085013567ffffffffffffffff811115613f2057600080fd5b613f2c87828801613798565b91505092959194509250565b60008060008060808587031215613f4e57600080fd5b6000613f5c87828801613816565b9450506020613f6d87828801613816565b9350506040613f7e878288016136e5565b9250506060613f8f87828801613840565b91505092959194509250565b600080600080600060808688031215613fb357600080fd5b6000613fc188828901613816565b9550506020613fd288828901613816565b9450506040613fe388828901613840565b935050606086013567ffffffffffffffff81111561400057600080fd5b61400c8882890161374e565b92509250509295509295909350565b60006020828403121561402d57600080fd5b600061403b84828501613840565b91505092915050565b60006020828403121561405657600080fd5b60006140648482850161387f565b91505092915050565b61407681614ee3565b82525050565b61408581614ed1565b82525050565b61409481614ef5565b82525050565b6140a381614f01565b82525050565b60006140b58385614dde565b93506140c2838584614f83565b6140cb8361515e565b840190509392505050565b60006140e28385614def565b93506140ef838584614f83565b82840190509392505050565b600061410682614dc8565b6141108185614dde565b9350614120818560208601614f92565b6141298161515e565b840191505092915050565b600061413f82614dc8565b6141498185614def565b9350614159818560208601614f92565b80840191505092915050565b6000815461417281614fc5565b61417c8186614dde565b9450600182166000811461419757600181146141a9576141dc565b60ff19831686526020860193506141dc565b6141b285614db3565b60005b838110156141d4578154818901526001820191506020810190506141b5565b808801955050505b50505092915050565b600081546141f281614fc5565b6141fc8186614def565b9450600182166000811461421757600181146142285761425b565b60ff1983168652818601935061425b565b61423185614db3565b60005b8381101561425357815481890152600182019150602081019050614234565b838801955050505b50505092915050565b600061426f82614dd3565b6142798185614dfa565b9350614289818560208601614f92565b6142928161515e565b840191505092915050565b60006142a882614dd3565b6142b28185614e0b565b93506142c2818560208601614f92565b80840191505092915050565b60006142db603283614dfa565b91506142e68261516f565b604082019050919050565b60006142fe602683614dfa565b9150614309826151be565b604082019050919050565b6000614321602583614dfa565b915061432c8261520d565b604082019050919050565b6000614344601c83614dfa565b915061434f8261525c565b602082019050919050565b6000614367602b83614dfa565b915061437282615285565b604082019050919050565b600061438a602283614dfa565b9150614395826152d4565b604082019050919050565b60006143ad602483614dfa565b91506143b882615323565b604082019050919050565b60006143d0601983614dfa565b91506143db82615372565b602082019050919050565b60006143f3602c83614dfa565b91506143fe8261539b565b604082019050919050565b6000614416602983614dfa565b9150614421826153ea565b604082019050919050565b6000614439603883614dfa565b915061444482615439565b604082019050919050565b600061445c602983614dfa565b915061446782615488565b604082019050919050565b600061447f603283614dfa565b915061448a826154d7565b604082019050919050565b60006144a2602083614dfa565b91506144ad82615526565b602082019050919050565b60006144c5602083614dfa565b91506144d08261554f565b602082019050919050565b60006144e8601b83614dfa565b91506144f382615578565b602082019050919050565b600061450b602c83614dfa565b9150614516826155a1565b604082019050919050565b600061452e601d83614dfa565b9150614539826155f0565b602082019050919050565b6000614551602083614dfa565b915061455c82615619565b602082019050919050565b6000614574602f83614dfa565b915061457f82615642565b604082019050919050565b6000614597602183614dfa565b91506145a282615691565b604082019050919050565b60006145ba603183614dfa565b91506145c5826156e0565b604082019050919050565b60006145dd601b83614dfa565b91506145e88261572f565b602082019050919050565b6145fc81614f37565b82525050565b61460b81614f65565b82525050565b61461a81614f6f565b82525050565b600061462d8284866140d6565b91508190509392505050565b60006146458284614134565b915081905092915050565b600061465c82846141e5565b915081905092915050565b6000614673828561429d565b915061467f828461429d565b91508190509392505050565b60006020820190506146a0600083018461407c565b92915050565b60006080820190506146bb600083018761407c565b6146c8602083018661407c565b6146d56040830185614602565b81810360608301526146e781846140fb565b905095945050505050565b6000602082019050614707600083018461408b565b92915050565b6000602082019050614722600083018461409a565b92915050565b6000602082019050818103600083015261474281846140fb565b905092915050565b6000604082019050818103600083015261476481856140fb565b90506147736020830184614602565b9392505050565b600060208201905081810360008301526147948184614264565b905092915050565b600060208201905081810360008301526147b5816142ce565b9050919050565b600060208201905081810360008301526147d5816142f1565b9050919050565b600060208201905081810360008301526147f581614314565b9050919050565b6000602082019050818103600083015261481581614337565b9050919050565b600060208201905081810360008301526148358161435a565b9050919050565b600060208201905081810360008301526148558161437d565b9050919050565b60006020820190508181036000830152614875816143a0565b9050919050565b60006020820190508181036000830152614895816143c3565b9050919050565b600060208201905081810360008301526148b5816143e6565b9050919050565b600060208201905081810360008301526148d581614409565b9050919050565b600060208201905081810360008301526148f58161442c565b9050919050565b600060208201905081810360008301526149158161444f565b9050919050565b6000602082019050818103600083015261493581614472565b9050919050565b6000602082019050818103600083015261495581614495565b9050919050565b60006020820190508181036000830152614975816144b8565b9050919050565b60006020820190508181036000830152614995816144db565b9050919050565b600060208201905081810360008301526149b5816144fe565b9050919050565b600060208201905081810360008301526149d581614521565b9050919050565b600060208201905081810360008301526149f581614544565b9050919050565b60006020820190508181036000830152614a1581614567565b9050919050565b60006020820190508181036000830152614a358161458a565b9050919050565b60006020820190508181036000830152614a55816145ad565b9050919050565b60006020820190508181036000830152614a75816145d0565b9050919050565b6000602082019050614a9160008301846145f3565b92915050565b6000604082019050614aac60008301856145f3565b614ab9602083018461407c565b9392505050565b6000608082019050614ad560008301876145f3565b614ae2602083018661407c565b614aef6040830185614602565b614afc6060830184614611565b95945050505050565b6000604082019050614b1a60008301866145f3565b8181036020830152614b2d8184866140a9565b9050949350505050565b6000608082019050614b4c60008301886145f3565b8181036020830152614b5e81876140fb565b9050614b6d6040830186614611565b8181036060830152614b808184866140a9565b90509695505050505050565b6000608082019050614ba160008301876145f3565b8181036020830152614bb381866140fb565b9050614bc26040830185614611565b8181036060830152614bd481846140fb565b905095945050505050565b600060c082019050614bf460008301896145f3565b8181036020830152614c068188614165565b90508181036040830152614c1a81876140fb565b9050614c29606083018661406d565b614c36608083018561407c565b81810360a0830152614c4881846140fb565b9050979650505050505050565b6000608082019050614c6a60008301876145f3565b614c7760208301866145f3565b614c84604083018561407c565b614c916060830184614602565b95945050505050565b6000608082019050614caf60008301886145f3565b614cbc60208301876145f3565b614cc96040830186614602565b8181036060830152614cdc8184866140a9565b90509695505050505050565b6000602082019050614cfd6000830184614602565b92915050565b6000604082019050614d186000830185614602565b614d256020830184614611565b9392505050565b6000614d36614d47565b9050614d428282614ff7565b919050565b6000604051905090565b600067ffffffffffffffff821115614d6c57614d6b61512f565b5b614d758261515e565b9050602081019050919050565b600067ffffffffffffffff821115614d9d57614d9c61512f565b5b614da68261515e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e2182614f65565b9150614e2c83614f65565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e6157614e606150a2565b5b828201905092915050565b6000614e7782614f65565b9150614e8283614f65565b925082614e9257614e916150d1565b5b828204905092915050565b6000614ea882614f65565b9150614eb383614f65565b925082821015614ec657614ec56150a2565b5b828203905092915050565b6000614edc82614f45565b9050919050565b6000614eee82614f45565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614fb0578082015181840152602081019050614f95565b83811115614fbf576000848401525b50505050565b60006002820490506001821680614fdd57607f821691505b60208210811415614ff157614ff0615100565b5b50919050565b6150008261515e565b810181811067ffffffffffffffff8211171561501f5761501e61512f565b5b80604052505050565b600061503382614f65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615066576150656150a2565b5b600182019050919050565b600061507c82614f65565b915061508783614f65565b925082615097576150966150d1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4c7a52656365697665723a20696e76616c696420736f757263652073656e646960008201527f6e6720636f6e7472616374000000000000000000000000000000000000000000602082015250565b7f4c7a52656365697665723a2063616c6c6572206d75737420626520427269646760008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4c7a53656e643a2064657374696e6174696f6e20636861696e206973206e6f7460008201527f2061207472757374656420736f757263652e0000000000000000000000000000602082015250565b7f4f6d6e69426f79733a204d6178204d696e74206c696d69742072656163686564600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4c7a52656365697665723a20696e76616c6964207061796c6f61640000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4c7a52656365697665723a206e6f2073746f726564206d657373616765000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e206d696e74203220746f6b656e7320617420612074696d650000000000600082015250565b61576181614ed1565b811461576c57600080fd5b50565b61577881614ee3565b811461578357600080fd5b50565b61578f81614ef5565b811461579a57600080fd5b50565b6157a681614f0b565b81146157b157600080fd5b50565b6157bd81614f37565b81146157c857600080fd5b50565b6157d481614f65565b81146157df57600080fd5b50565b6157eb81614f6f565b81146157f657600080fd5b5056fea2646970667358221220dde494778d79fe2a5e506655cd36ac53c2bfc2f002eb599934747e6bada8294f64736f6c6343000804003368747470733a2f2f697066732e696f2f697066732f516d665453416f4742384a6e7074484d676e396d694b336e713169387564696a686d6165625577533975593754342f00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000003c2269811836af69497e5f486a85d7316753cf62000000000000000000000000000000000000000000000000000000000000045800000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000000000000000000000000000000000000000000084f6d6e69426f79730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004426f797300000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102245760003560e01c8063715018a611610123578063d1deba1f116100ab578063eb8d72b71161006f578063eb8d72b7146107e9578063ed88c68e14610812578063eed33cef1461081c578063f2fde38b14610838578063f5ecbdbc1461086157610224565b8063d1deba1f1461070f578063d547cfb71461072b578063dacbcbe214610756578063e1d4c87014610781578063e985e9c5146107ac57610224565b8063a0712d68116100f2578063a0712d681461062e578063a22cb46514610657578063b88d4fde14610680578063c87b56dd146106a9578063cbed8b9c146106e657610224565b8063715018a6146105845780638da5cb5b1461059b5780638ee74912146105c657806395d89b411461060357610224565b80633d8b38f6116101b15780636352211e116101755780636352211e1461047957806366ad5c8a146104b657806369b41f95146104df5780636aa99da31461051c57806370a082311461054757610224565b80633d8b38f6146103a557806342842e0e146103e257806342d65a8d1461040b578063519056361461043457806355f804b31461045057610224565b8063081812fc116101f8578063081812fc146102e3578063095ea7b31461032057806310ddb1371461034957806323b872dd146103725780633ccfd60b1461039b57610224565b80621d35671461022957806301ffc9a71461025257806306fdde031461028f57806307e0db17146102ba575b600080fd5b34801561023557600080fd5b50610250600480360381019061024b9190613ea5565b61089e565b005b34801561025e57600080fd5b5061027960048036038101906102749190613b11565b6109ba565b60405161028691906146f2565b60405180910390f35b34801561029b57600080fd5b506102a4610a9c565b6040516102b1919061477a565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190613c39565b610b2e565b005b3480156102ef57600080fd5b5061030a6004803603810190610305919061401b565b610c38565b604051610317919061468b565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613ad5565b610cbd565b005b34801561035557600080fd5b50610370600480360381019061036b9190613c39565b610dd5565b005b34801561037e57600080fd5b50610399600480360381019061039491906138f9565b610edf565b005b6103a3610f3f565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190613c8b565b61100b565b6040516103d991906146f2565b60405180910390f35b3480156103ee57600080fd5b50610409600480360381019061040491906138f9565b6110df565b005b34801561041757600080fd5b50610432600480360381019061042d9190613c8b565b6110ff565b005b61044e600480360381019061044991906139ff565b61120f565b005b34801561045c57600080fd5b5061047760048036038101906104729190613bf8565b61126e565b005b34801561048557600080fd5b506104a0600480360381019061049b919061401b565b611304565b6040516104ad919061468b565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190613ea5565b6113b6565b005b3480156104eb57600080fd5b5061050660048036038101906105019190613c39565b61143d565b6040516105139190614728565b60405180910390f35b34801561052857600080fd5b506105316114ea565b60405161053e9190614ce8565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613894565b6114f0565b60405161057b9190614ce8565b60405180910390f35b34801561059057600080fd5b506105996115a8565b005b3480156105a757600080fd5b506105b0611630565b6040516105bd919061468b565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190613da6565b611659565b6040516105fa919061470d565b60405180910390f35b34801561060f57600080fd5b506106186116a1565b604051610625919061477a565b60405180910390f35b34801561063a57600080fd5b506106556004803603810190610650919061401b565b611733565b005b34801561066357600080fd5b5061067e600480360381019061067991906139c3565b611836565b005b34801561068c57600080fd5b506106a760048036038101906106a29190613948565b61184c565b005b3480156106b557600080fd5b506106d060048036038101906106cb919061401b565b6118ae565b6040516106dd919061477a565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613f9b565b611955565b005b61072960048036038101906107249190613e0d565b611a6b565b005b34801561073757600080fd5b50610740611c36565b60405161074d919061477a565b60405180910390f35b34801561076257600080fd5b5061076b611cc4565b604051610778919061468b565b60405180910390f35b34801561078d57600080fd5b50610796611cec565b6040516107a39190614ce8565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce91906138bd565b611cf2565b6040516107e091906146f2565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190613c8b565b611d86565b005b61081a611e6d565b005b61083660048036038101906108319190613ce3565b611e7c565b005b34801561084457600080fd5b5061085f600480360381019061085a9190613894565b611ee1565b005b34801561086d57600080fd5b5061088860048036038101906108839190613f38565b611fd9565b6040516108959190614728565b60405180910390f35b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff166108dd612141565b73ffffffffffffffffffffffffffffffffffffffff16146108fd57600080fd5b600160008561ffff1661ffff168152602001908152602001600020805461092390614fc5565b905083511480156109695750600160008561ffff1661ffff1681526020019081526020016000206040516109579190614650565b60405180910390208380519060200120145b6109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f9061481c565b60405180910390fd5b6109b484848484612149565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a955750610a948261225e565b5b9050919050565b606060038054610aab90614fc5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad790614fc5565b8015610b245780601f10610af957610100808354040283529160200191610b24565b820191906000526020600020905b815481529060010190602001808311610b0757829003601f168201915b5050505050905090565b610b36612141565b73ffffffffffffffffffffffffffffffffffffffff16610b54611630565b73ffffffffffffffffffffffffffffffffffffffff1614610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba1906149dc565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff166307e0db17826040518263ffffffff1660e01b8152600401610c039190614a7c565b600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b5050505050565b6000610c43826122c8565b610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c799061499c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cc882611304565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090614a1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d58612141565b73ffffffffffffffffffffffffffffffffffffffff161480610d875750610d8681610d81612141565b611cf2565b5b610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd906148dc565b60405180910390fd5b610dd08383612334565b505050565b610ddd612141565b73ffffffffffffffffffffffffffffffffffffffff16610dfb611630565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e48906149dc565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff166310ddb137826040518263ffffffff1660e01b8152600401610eaa9190614a7c565b600060405180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b5050505050565b610ef0610eea612141565b826123ed565b610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690614a3c565b60405180910390fd5b610f3a8383836124cb565b505050565b610f47612141565b73ffffffffffffffffffffffffffffffffffffffff16610f65611630565b73ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb2906149dc565b60405180910390fd5b610fc3611630565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611008573d6000803e3d6000fd5b50565b600080600160008661ffff1661ffff168152602001908152602001600020805461103490614fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461106090614fc5565b80156110ad5780601f10611082576101008083540402835291602001916110ad565b820191906000526020600020905b81548152906001019060200180831161109057829003601f168201915b5050505050905083836040516110c4929190614620565b60405180910390208180519060200120149150509392505050565b6110fa8383836040518060200160405280600081525061184c565b505050565b611107612141565b73ffffffffffffffffffffffffffffffffffffffff16611125611630565b73ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611172906149dc565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff166342d65a8d8484846040518463ffffffff1660e01b81526004016111d893929190614b05565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050505050565b611263898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508888888888612732565b505050505050505050565b611276612141565b73ffffffffffffffffffffffffffffffffffffffff16611294611630565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906149dc565b60405180910390fd5b8060099080519060200190611300929190613502565b5050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a4906148fc565b60405180910390fd5b80915050919050565b3073ffffffffffffffffffffffffffffffffffffffff166113d5612141565b73ffffffffffffffffffffffffffffffffffffffff161461142b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114229061483c565b60405180910390fd5b61143784848484612937565b50505050565b6060600160008361ffff1661ffff168152602001908152602001600020805461146590614fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461149190614fc5565b80156114de5780601f106114b3576101008083540402835291602001916114de565b820191906000526020600020905b8154815290600101906020018083116114c157829003601f168201915b50505050509050919050565b600a5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611558906148bc565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b0612141565b73ffffffffffffffffffffffffffffffffffffffff166115ce611630565b73ffffffffffffffffffffffffffffffffffffffff1614611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b906149dc565b60405180910390fd5b61162e60006129b7565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60026020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050505481565b6060600480546116b090614fc5565b80601f01602080910402602001604051908101604052809291908181526020018280546116dc90614fc5565b80156117295780601f106116fe57610100808354040283529160200191611729565b820191906000526020600020905b81548152906001019060200180831161170c57829003601f168201915b5050505050905090565b600b54600a54111561177a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117719061493c565b60405180910390fd5b60018114806117895750600281145b6117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf90614a5c565b60405180910390fd5b6000600a549050600a60008154809291906117e290615028565b91905055506117f13382612a7b565b6002821480156118055750600b54600a5411155b1561183257600a549050600a600081548092919061182290615028565b91905055506118313382612a7b565b5b5050565b611848611841612141565b8383612a99565b5050565b61185d611857612141565b836123ed565b61189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390614a3c565b60405180910390fd5b6118a884848484612c06565b50505050565b60606118b9826122c8565b6118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef906149fc565b60405180910390fd5b6000611902612c62565b90506000815111611922576040518060200160405280600081525061194d565b8061192c84612cf4565b60405160200161193d929190614667565b6040516020818303038152906040525b915050919050565b61195d612141565b73ffffffffffffffffffffffffffffffffffffffff1661197b611630565b73ffffffffffffffffffffffffffffffffffffffff16146119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906149dc565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff1663cbed8b9c86868686866040518663ffffffff1660e01b8152600401611a32959493929190614c9a565b600060405180830381600087803b158015611a4c57600080fd5b505af1158015611a60573d6000803e3d6000fd5b505050505050505050565b6000600260008761ffff1661ffff16815260200190815260200160002085604051611a969190614639565b908152602001604051809103902060008567ffffffffffffffff1681526020019081526020016000205490506000801b811415611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff906149bc565b60405180910390fd5b808383604051611b19929190614620565b604051809103902014611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b589061497c565b60405180910390fd5b6000801b600260008861ffff1661ffff16815260200190815260200160002086604051611b8e9190614639565b908152602001604051809103902060008667ffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff166366ad5c8a87878787876040518663ffffffff1660e01b8152600401611bfc959493929190614b37565b600060405180830381600087803b158015611c1657600080fd5b505af1158015611c2a573d6000803e3d6000fd5b50505050505050505050565b60098054611c4390614fc5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6f90614fc5565b8015611cbc5780601f10611c9157610100808354040283529160200191611cbc565b820191906000526020600020905b815481529060010190602001808311611c9f57829003601f168201915b505050505081565b60007f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf62905090565b600b5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d8e612141565b73ffffffffffffffffffffffffffffffffffffffff16611dac611630565b73ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df9906149dc565b60405180910390fd5b8181600160008661ffff1661ffff1681526020019081526020016000209190611e2c929190613588565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611e6093929190614b05565b60405180910390a1505050565b60003411611e7a57600080fd5b565b611ed7611e87612141565b8989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508888888888612732565b5050505050505050565b611ee9612141565b73ffffffffffffffffffffffffffffffffffffffff16611f07611630565b73ffffffffffffffffffffffffffffffffffffffff1614611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f54906149dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906147bc565b60405180910390fd5b611fd6816129b7565b50565b60607f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff1663f5ecbdbc7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff1663096568f6306040518263ffffffff1660e01b8152600401612070919061468b565b60206040518083038186803b15801561208857600080fd5b505afa15801561209c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c09190613c62565b8630866040518563ffffffff1660e01b81526004016120e29493929190614c55565b60006040518083038186803b1580156120fa57600080fd5b505afa15801561210e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906121379190613b63565b9050949350505050565b600033905090565b3073ffffffffffffffffffffffffffffffffffffffff166366ad5c8a858585856040518563ffffffff1660e01b81526004016121889493929190614b8c565b600060405180830381600087803b1580156121a257600080fd5b505af19250505080156121b3575060015b612257578080519060200120600260008661ffff1661ffff168152602001908152602001600020846040516121e89190614639565b908152602001604051809103902060008467ffffffffffffffff168152602001908152602001600020819055507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d8484848460405161224a9493929190614b8c565b60405180910390a1612258565b5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123a783611304565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123f8826122c8565b612437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242e9061489c565b60405180910390fd5b600061244283611304565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061248457506124838185611cf2565b5b806124c257508373ffffffffffffffffffffffffffffffffffffffff166124aa84610c38565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124eb82611304565b73ffffffffffffffffffffffffffffffffffffffff1614612541576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612538906147dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a89061485c565b60405180910390fd5b6125bc838383612ea1565b6125c7600082612334565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126179190614e9d565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266e9190614e16565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461272d838383612ea6565b505050565b61274361273d612141565b866123ed565b612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614a3c565b60405180910390fd5b61278e88888888612eab565b600086866040516020016127a392919061474a565b60405160208183030381529060405290506128058882878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612eba565b60007f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff16637a1457488a306040518363ffffffff1660e01b8152600401612862929190614a97565b60206040518083038186803b15801561287a57600080fd5b505afa15801561288e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b29190614044565b9050876040516128c29190614639565b60405180910390208961ffff168b73ffffffffffffffffffffffffffffffffffffffff167f024797cc77ce15dc717112d54fb1df125fdfd8c81344fb046c5e074427ce15438a85604051612917929190614d03565b60405180910390a461292b8a8a8a8a612fdc565b50505050505050505050565b612942848483612fe2565b600080828060200190518101906129599190613ba4565b91509150600060148301519050612971878284612fe7565b7fd4d39d20f72eabd06c301e516d54653dfc9116de62c1d54bf1cb48cf3b42a7db878284886040516129a69493929190614ac0565b60405180910390a150505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a95828260405180602001604052806000815250612ff6565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff9061487c565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bf991906146f2565b60405180910390a3505050565b612c118484846124cb565b612c1d84848484613051565b612c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c539061479c565b60405180910390fd5b50505050565b606060098054612c7190614fc5565b80601f0160208091040260200160405190810160405280929190818152602001828054612c9d90614fc5565b8015612cea5780601f10612cbf57610100808354040283529160200191612cea565b820191906000526020600020905b815481529060010190602001808311612ccd57829003601f168201915b5050505050905090565b60606000821415612d3c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e9c565b600082905060005b60008214612d6e578080612d5790615028565b915050600a82612d679190614e6c565b9150612d44565b60008167ffffffffffffffff811115612db0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612de25781602001600182028036833780820191505090505b5090505b60008514612e9557600182612dfb9190614e9d565b9150600a85612e0a9190615071565b6030612e169190614e16565b60f81b818381518110612e52577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e8e9190614e6c565b9450612de6565b8093505050505b919050565b505050565b505050565b612eb4816131e8565b50505050565b6000600160008761ffff1661ffff1681526020019081526020016000208054612ee290614fc5565b90501415612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c9061491c565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff1663c58031003487600160008a61ffff1661ffff168152602001908152602001600020888888886040518863ffffffff1660e01b8152600401612fa396959493929190614bdf565b6000604051808303818588803b158015612fbc57600080fd5b505af1158015612fd0573d6000803e3d6000fd5b50505050505050505050565b50505050565b505050565b612ff18282612a7b565b505050565b6130008383613305565b61300d6000848484613051565b61304c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130439061479c565b60405180910390fd5b505050565b60006130728473ffffffffffffffffffffffffffffffffffffffff166134df565b156131db578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261309b612141565b8786866040518563ffffffff1660e01b81526004016130bd94939291906146a6565b602060405180830381600087803b1580156130d757600080fd5b505af192505050801561310857506040513d601f19601f820116820180604052508101906131059190613b3a565b60015b61318b573d8060008114613138576040519150601f19603f3d011682016040523d82523d6000602084013e61313d565b606091505b50600081511415613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a9061479c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131e0565b600190505b949350505050565b60006131f382611304565b905061320181600084612ea1565b61320c600083612334565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461325c9190614e9d565b925050819055506005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461330181600084612ea6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336c9061495c565b60405180910390fd5b61337e816122c8565b156133be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b5906147fc565b60405180910390fd5b6133ca60008383612ea1565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461341a9190614e16565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134db60008383612ea6565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461350e90614fc5565b90600052602060002090601f0160209004810192826135305760008555613577565b82601f1061354957805160ff1916838001178555613577565b82800160010185558215613577579182015b8281111561357657825182559160200191906001019061355b565b5b509050613584919061360e565b5090565b82805461359490614fc5565b90600052602060002090601f0160209004810192826135b657600085556135fd565b82601f106135cf57803560ff19168380011785556135fd565b828001600101855582156135fd579182015b828111156135fc5782358255916020019190600101906135e1565b5b50905061360a919061360e565b5090565b5b8082111561362757600081600090555060010161360f565b5090565b600061363e61363984614d51565b614d2c565b90508281526020810184848401111561365657600080fd5b613661848285614f83565b509392505050565b600061367c61367784614d51565b614d2c565b90508281526020810184848401111561369457600080fd5b61369f848285614f92565b509392505050565b60006136ba6136b584614d82565b614d2c565b9050828152602081018484840111156136d257600080fd5b6136dd848285614f83565b509392505050565b6000813590506136f481615758565b92915050565b6000813590506137098161576f565b92915050565b60008135905061371e81615786565b92915050565b6000813590506137338161579d565b92915050565b6000815190506137488161579d565b92915050565b60008083601f84011261376057600080fd5b8235905067ffffffffffffffff81111561377957600080fd5b60208301915083600182028301111561379157600080fd5b9250929050565b600082601f8301126137a957600080fd5b81356137b984826020860161362b565b91505092915050565b600082601f8301126137d357600080fd5b81516137e3848260208601613669565b91505092915050565b600082601f8301126137fd57600080fd5b813561380d8482602086016136a7565b91505092915050565b600081359050613825816157b4565b92915050565b60008151905061383a816157b4565b92915050565b60008135905061384f816157cb565b92915050565b600081519050613864816157cb565b92915050565b600081359050613879816157e2565b92915050565b60008151905061388e816157e2565b92915050565b6000602082840312156138a657600080fd5b60006138b4848285016136e5565b91505092915050565b600080604083850312156138d057600080fd5b60006138de858286016136e5565b92505060206138ef858286016136e5565b9150509250929050565b60008060006060848603121561390e57600080fd5b600061391c868287016136e5565b935050602061392d868287016136e5565b925050604061393e86828701613840565b9150509250925092565b6000806000806080858703121561395e57600080fd5b600061396c878288016136e5565b945050602061397d878288016136e5565b935050604061398e87828801613840565b925050606085013567ffffffffffffffff8111156139ab57600080fd5b6139b787828801613798565b91505092959194509250565b600080604083850312156139d657600080fd5b60006139e4858286016136e5565b92505060206139f58582860161370f565b9150509250929050565b600080600080600080600080600060e08a8c031215613a1d57600080fd5b6000613a2b8c828d016136e5565b9950506020613a3c8c828d01613816565b98505060408a013567ffffffffffffffff811115613a5957600080fd5b613a658c828d0161374e565b97509750506060613a788c828d01613840565b9550506080613a898c828d016136fa565b94505060a0613a9a8c828d016136e5565b93505060c08a013567ffffffffffffffff811115613ab757600080fd5b613ac38c828d0161374e565b92509250509295985092959850929598565b60008060408385031215613ae857600080fd5b6000613af6858286016136e5565b9250506020613b0785828601613840565b9150509250929050565b600060208284031215613b2357600080fd5b6000613b3184828501613724565b91505092915050565b600060208284031215613b4c57600080fd5b6000613b5a84828501613739565b91505092915050565b600060208284031215613b7557600080fd5b600082015167ffffffffffffffff811115613b8f57600080fd5b613b9b848285016137c2565b91505092915050565b60008060408385031215613bb757600080fd5b600083015167ffffffffffffffff811115613bd157600080fd5b613bdd858286016137c2565b9250506020613bee85828601613855565b9150509250929050565b600060208284031215613c0a57600080fd5b600082013567ffffffffffffffff811115613c2457600080fd5b613c30848285016137ec565b91505092915050565b600060208284031215613c4b57600080fd5b6000613c5984828501613816565b91505092915050565b600060208284031215613c7457600080fd5b6000613c828482850161382b565b91505092915050565b600080600060408486031215613ca057600080fd5b6000613cae86828701613816565b935050602084013567ffffffffffffffff811115613ccb57600080fd5b613cd78682870161374e565b92509250509250925092565b60008060008060008060008060c0898b031215613cff57600080fd5b6000613d0d8b828c01613816565b985050602089013567ffffffffffffffff811115613d2a57600080fd5b613d368b828c0161374e565b97509750506040613d498b828c01613840565b9550506060613d5a8b828c016136fa565b9450506080613d6b8b828c016136e5565b93505060a089013567ffffffffffffffff811115613d8857600080fd5b613d948b828c0161374e565b92509250509295985092959890939650565b600080600060608486031215613dbb57600080fd5b6000613dc986828701613816565b935050602084013567ffffffffffffffff811115613de657600080fd5b613df286828701613798565b9250506040613e0386828701613840565b9150509250925092565b600080600080600060808688031215613e2557600080fd5b6000613e3388828901613816565b955050602086013567ffffffffffffffff811115613e5057600080fd5b613e5c88828901613798565b9450506040613e6d8882890161386a565b935050606086013567ffffffffffffffff811115613e8a57600080fd5b613e968882890161374e565b92509250509295509295909350565b60008060008060808587031215613ebb57600080fd5b6000613ec987828801613816565b945050602085013567ffffffffffffffff811115613ee657600080fd5b613ef287828801613798565b9350506040613f038782880161386a565b925050606085013567ffffffffffffffff811115613f2057600080fd5b613f2c87828801613798565b91505092959194509250565b60008060008060808587031215613f4e57600080fd5b6000613f5c87828801613816565b9450506020613f6d87828801613816565b9350506040613f7e878288016136e5565b9250506060613f8f87828801613840565b91505092959194509250565b600080600080600060808688031215613fb357600080fd5b6000613fc188828901613816565b9550506020613fd288828901613816565b9450506040613fe388828901613840565b935050606086013567ffffffffffffffff81111561400057600080fd5b61400c8882890161374e565b92509250509295509295909350565b60006020828403121561402d57600080fd5b600061403b84828501613840565b91505092915050565b60006020828403121561405657600080fd5b60006140648482850161387f565b91505092915050565b61407681614ee3565b82525050565b61408581614ed1565b82525050565b61409481614ef5565b82525050565b6140a381614f01565b82525050565b60006140b58385614dde565b93506140c2838584614f83565b6140cb8361515e565b840190509392505050565b60006140e28385614def565b93506140ef838584614f83565b82840190509392505050565b600061410682614dc8565b6141108185614dde565b9350614120818560208601614f92565b6141298161515e565b840191505092915050565b600061413f82614dc8565b6141498185614def565b9350614159818560208601614f92565b80840191505092915050565b6000815461417281614fc5565b61417c8186614dde565b9450600182166000811461419757600181146141a9576141dc565b60ff19831686526020860193506141dc565b6141b285614db3565b60005b838110156141d4578154818901526001820191506020810190506141b5565b808801955050505b50505092915050565b600081546141f281614fc5565b6141fc8186614def565b9450600182166000811461421757600181146142285761425b565b60ff1983168652818601935061425b565b61423185614db3565b60005b8381101561425357815481890152600182019150602081019050614234565b838801955050505b50505092915050565b600061426f82614dd3565b6142798185614dfa565b9350614289818560208601614f92565b6142928161515e565b840191505092915050565b60006142a882614dd3565b6142b28185614e0b565b93506142c2818560208601614f92565b80840191505092915050565b60006142db603283614dfa565b91506142e68261516f565b604082019050919050565b60006142fe602683614dfa565b9150614309826151be565b604082019050919050565b6000614321602583614dfa565b915061432c8261520d565b604082019050919050565b6000614344601c83614dfa565b915061434f8261525c565b602082019050919050565b6000614367602b83614dfa565b915061437282615285565b604082019050919050565b600061438a602283614dfa565b9150614395826152d4565b604082019050919050565b60006143ad602483614dfa565b91506143b882615323565b604082019050919050565b60006143d0601983614dfa565b91506143db82615372565b602082019050919050565b60006143f3602c83614dfa565b91506143fe8261539b565b604082019050919050565b6000614416602983614dfa565b9150614421826153ea565b604082019050919050565b6000614439603883614dfa565b915061444482615439565b604082019050919050565b600061445c602983614dfa565b915061446782615488565b604082019050919050565b600061447f603283614dfa565b915061448a826154d7565b604082019050919050565b60006144a2602083614dfa565b91506144ad82615526565b602082019050919050565b60006144c5602083614dfa565b91506144d08261554f565b602082019050919050565b60006144e8601b83614dfa565b91506144f382615578565b602082019050919050565b600061450b602c83614dfa565b9150614516826155a1565b604082019050919050565b600061452e601d83614dfa565b9150614539826155f0565b602082019050919050565b6000614551602083614dfa565b915061455c82615619565b602082019050919050565b6000614574602f83614dfa565b915061457f82615642565b604082019050919050565b6000614597602183614dfa565b91506145a282615691565b604082019050919050565b60006145ba603183614dfa565b91506145c5826156e0565b604082019050919050565b60006145dd601b83614dfa565b91506145e88261572f565b602082019050919050565b6145fc81614f37565b82525050565b61460b81614f65565b82525050565b61461a81614f6f565b82525050565b600061462d8284866140d6565b91508190509392505050565b60006146458284614134565b915081905092915050565b600061465c82846141e5565b915081905092915050565b6000614673828561429d565b915061467f828461429d565b91508190509392505050565b60006020820190506146a0600083018461407c565b92915050565b60006080820190506146bb600083018761407c565b6146c8602083018661407c565b6146d56040830185614602565b81810360608301526146e781846140fb565b905095945050505050565b6000602082019050614707600083018461408b565b92915050565b6000602082019050614722600083018461409a565b92915050565b6000602082019050818103600083015261474281846140fb565b905092915050565b6000604082019050818103600083015261476481856140fb565b90506147736020830184614602565b9392505050565b600060208201905081810360008301526147948184614264565b905092915050565b600060208201905081810360008301526147b5816142ce565b9050919050565b600060208201905081810360008301526147d5816142f1565b9050919050565b600060208201905081810360008301526147f581614314565b9050919050565b6000602082019050818103600083015261481581614337565b9050919050565b600060208201905081810360008301526148358161435a565b9050919050565b600060208201905081810360008301526148558161437d565b9050919050565b60006020820190508181036000830152614875816143a0565b9050919050565b60006020820190508181036000830152614895816143c3565b9050919050565b600060208201905081810360008301526148b5816143e6565b9050919050565b600060208201905081810360008301526148d581614409565b9050919050565b600060208201905081810360008301526148f58161442c565b9050919050565b600060208201905081810360008301526149158161444f565b9050919050565b6000602082019050818103600083015261493581614472565b9050919050565b6000602082019050818103600083015261495581614495565b9050919050565b60006020820190508181036000830152614975816144b8565b9050919050565b60006020820190508181036000830152614995816144db565b9050919050565b600060208201905081810360008301526149b5816144fe565b9050919050565b600060208201905081810360008301526149d581614521565b9050919050565b600060208201905081810360008301526149f581614544565b9050919050565b60006020820190508181036000830152614a1581614567565b9050919050565b60006020820190508181036000830152614a358161458a565b9050919050565b60006020820190508181036000830152614a55816145ad565b9050919050565b60006020820190508181036000830152614a75816145d0565b9050919050565b6000602082019050614a9160008301846145f3565b92915050565b6000604082019050614aac60008301856145f3565b614ab9602083018461407c565b9392505050565b6000608082019050614ad560008301876145f3565b614ae2602083018661407c565b614aef6040830185614602565b614afc6060830184614611565b95945050505050565b6000604082019050614b1a60008301866145f3565b8181036020830152614b2d8184866140a9565b9050949350505050565b6000608082019050614b4c60008301886145f3565b8181036020830152614b5e81876140fb565b9050614b6d6040830186614611565b8181036060830152614b808184866140a9565b90509695505050505050565b6000608082019050614ba160008301876145f3565b8181036020830152614bb381866140fb565b9050614bc26040830185614611565b8181036060830152614bd481846140fb565b905095945050505050565b600060c082019050614bf460008301896145f3565b8181036020830152614c068188614165565b90508181036040830152614c1a81876140fb565b9050614c29606083018661406d565b614c36608083018561407c565b81810360a0830152614c4881846140fb565b9050979650505050505050565b6000608082019050614c6a60008301876145f3565b614c7760208301866145f3565b614c84604083018561407c565b614c916060830184614602565b95945050505050565b6000608082019050614caf60008301886145f3565b614cbc60208301876145f3565b614cc96040830186614602565b8181036060830152614cdc8184866140a9565b90509695505050505050565b6000602082019050614cfd6000830184614602565b92915050565b6000604082019050614d186000830185614602565b614d256020830184614611565b9392505050565b6000614d36614d47565b9050614d428282614ff7565b919050565b6000604051905090565b600067ffffffffffffffff821115614d6c57614d6b61512f565b5b614d758261515e565b9050602081019050919050565b600067ffffffffffffffff821115614d9d57614d9c61512f565b5b614da68261515e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e2182614f65565b9150614e2c83614f65565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e6157614e606150a2565b5b828201905092915050565b6000614e7782614f65565b9150614e8283614f65565b925082614e9257614e916150d1565b5b828204905092915050565b6000614ea882614f65565b9150614eb383614f65565b925082821015614ec657614ec56150a2565b5b828203905092915050565b6000614edc82614f45565b9050919050565b6000614eee82614f45565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614fb0578082015181840152602081019050614f95565b83811115614fbf576000848401525b50505050565b60006002820490506001821680614fdd57607f821691505b60208210811415614ff157614ff0615100565b5b50919050565b6150008261515e565b810181811067ffffffffffffffff8211171561501f5761501e61512f565b5b80604052505050565b600061503382614f65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615066576150656150a2565b5b600182019050919050565b600061507c82614f65565b915061508783614f65565b925082615097576150966150d1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4c7a52656365697665723a20696e76616c696420736f757263652073656e646960008201527f6e6720636f6e7472616374000000000000000000000000000000000000000000602082015250565b7f4c7a52656365697665723a2063616c6c6572206d75737420626520427269646760008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4c7a53656e643a2064657374696e6174696f6e20636861696e206973206e6f7460008201527f2061207472757374656420736f757263652e0000000000000000000000000000602082015250565b7f4f6d6e69426f79733a204d6178204d696e74206c696d69742072656163686564600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4c7a52656365697665723a20696e76616c6964207061796c6f61640000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4c7a52656365697665723a206e6f2073746f726564206d657373616765000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e206d696e74203220746f6b656e7320617420612074696d650000000000600082015250565b61576181614ed1565b811461576c57600080fd5b50565b61577881614ee3565b811461578357600080fd5b50565b61578f81614ef5565b811461579a57600080fd5b50565b6157a681614f0b565b81146157b157600080fd5b50565b6157bd81614f37565b81146157c857600080fd5b50565b6157d481614f65565b81146157df57600080fd5b50565b6157eb81614f6f565b81146157f657600080fd5b5056fea2646970667358221220dde494778d79fe2a5e506655cd36ac53c2bfc2f002eb599934747e6bada8294f64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000003c2269811836af69497e5f486a85d7316753cf62000000000000000000000000000000000000000000000000000000000000045800000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000000000000000000000000000000000000000000084f6d6e69426f79730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004426f797300000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): OmniBoys
Arg [1] : _symbol (string): Boys
Arg [2] : _layerZeroEndpoint (address): 0x3c2269811836af69497E5F486A85D7316753cf62
Arg [3] : _startMintId (uint256): 1112
Arg [4] : _endMintId (uint256): 2222
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000003c2269811836af69497e5f486a85d7316753cf62
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000458
Arg [4] : 00000000000000000000000000000000000000000000000000000000000008ae
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [6] : 4f6d6e69426f7973000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 426f797300000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
62393:243:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50262:659;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26639:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27583:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52258:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29143:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28666:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52389:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29893:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59646:112;;;:::i;:::-;;52982:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30303:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52526:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58197:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61145:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27277:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54920:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53401:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61558:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27008:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48981:103;;;;;;;;;;;;;:::i;:::-;;48330:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54140:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27752:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61861:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29436:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30559:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27927:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52046:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55444:677;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57949:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53544:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61587:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29662:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52758:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61379:76;;;:::i;:::-;;58541:324;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49239:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51750:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50262:659;50492:10;50468:35;;:12;:10;:12::i;:::-;:35;;;50460:44;;;;;;50678:19;:32;50698:11;50678:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;50656:11;:18;:61;:134;;;;;50757:19;:32;50777:11;50757:32;;;;;;;;;;;;;;;50747:43;;;;;;:::i;:::-;;;;;;;;50731:11;50721:22;;;;;;:69;50656:134;50648:190;;;;;;;;;;;;:::i;:::-;;;;;;;;;50851:62;50870:11;50883;50896:6;50904:8;50851:18;:62::i;:::-;50262:659;;;;:::o;26639:305::-;26741:4;26793:25;26778:40;;;:11;:40;;;;:105;;;;26850:33;26835:48;;;:11;:48;;;;26778:105;:158;;;;26900:36;26924:11;26900:23;:36::i;:::-;26778:158;26758:178;;26639:305;;;:::o;27583:100::-;27637:13;27670:5;27663:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27583:100;:::o;52258:123::-;48561:12;:10;:12::i;:::-;48550:23;;:7;:5;:7::i;:::-;:23;;;48542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52338:10:::1;:25;;;52364:8;52338:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52258:123:::0;:::o;29143:221::-;29219:7;29247:16;29255:7;29247;:16::i;:::-;29239:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29332:15;:24;29348:7;29332:24;;;;;;;;;;;;;;;;;;;;;29325:31;;29143:221;;;:::o;28666:411::-;28747:13;28763:23;28778:7;28763:14;:23::i;:::-;28747:39;;28811:5;28805:11;;:2;:11;;;;28797:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28905:5;28889:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28914:37;28931:5;28938:12;:10;:12::i;:::-;28914:16;:37::i;:::-;28889:62;28867:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29048:21;29057:2;29061:7;29048:8;:21::i;:::-;28666:411;;;:::o;52389:129::-;48561:12;:10;:12::i;:::-;48550:23;;:7;:5;:7::i;:::-;:23;;;48542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52472:10:::1;:28;;;52501:8;52472:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52389:129:::0;:::o;29893:339::-;30088:41;30107:12;:10;:12::i;:::-;30121:7;30088:18;:41::i;:::-;30080:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30196:28;30206:4;30212:2;30216:7;30196:9;:28::i;:::-;29893:339;;;:::o;59646:112::-;48561:12;:10;:12::i;:::-;48550:23;;:7;:5;:7::i;:::-;:23;;;48542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59710:7:::1;:5;:7::i;:::-;59702:25;;:48;59728:21;59702:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;59646:112::o:0;52982:250::-;53078:4;53095:26;53124:19;:32;53144:11;53124:32;;;;;;;;;;;;;;;53095:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53212:11;;53202:22;;;;;;;:::i;:::-;;;;;;;;53184:13;53174:24;;;;;;:50;53167:57;;;52982:250;;;;;:::o;30303:185::-;30441:39;30458:4;30464:2;30468:7;30441:39;;;;;;;;;;;;:16;:39::i;:::-;30303:185;;;:::o;52526:178::-;48561:12;:10;:12::i;:::-;48550:23;;:7;:5;:7::i;:::-;:23;;;48542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52641:10:::1;:29;;;52671:11;52684;;52641:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52526:178:::0;;;:::o;58197:336::-;58427:98;58433:5;58440:11;58453:10;;58427:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58465:8;58475:14;58491:18;58511:13;;58427:5;:98::i;:::-;58197:336;;;;;;;;;:::o;61145:113::-;48561:12;:10;:12::i;:::-;48550:23;;:7;:5;:7::i;:::-;:23;;;48542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61237:13:::1;61222:12;:28;;;;;;;;;;;;:::i;:::-;;61145:113:::0;:::o;27277:239::-;27349:7;27369:13;27385:7;:16;27393:7;27385:16;;;;;;;;;;;;;;;;;;;;;27369:32;;27437:1;27420:19;;:5;:19;;;;27412:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27503:5;27496:12;;;27277:239;;;:::o;54920:338::-;55130:4;55106:29;;:12;:10;:12::i;:::-;:29;;;55098:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;55185:65;55207:11;55220;55233:6;55241:8;55185:21;:65::i;:::-;54920:338;;;;:::o;53401:135::-;53467:12;53499:19;:29;53519:8;53499:29;;;;;;;;;;;;;;;53492:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53401:135;;;:::o;61558:22::-;;;;:::o;27008:207::-;27080:7;27125:1;27108:19;;:5;:19;;;;27100:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27191:9;:16;27201:5;27191:16;;;;;;;;;;;;;;;;27184:23;;27008:207;;;:::o;48981:103::-;48561:12;:10;:12::i;:::-;48550:23;;:7;:5;:7::i;:::-;:23;;;48542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49046:30:::1;49073:1;49046:18;:30::i;:::-;48981:103::o:0;48330:87::-;48376:7;48403:6;;;;;;;;;;;48396:13;;48330:87;:::o;54140:83::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27752:104::-;27808:13;27841:7;27834:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27752:104;:::o;61861:499::-;61941:9;;61927:10;;:23;;61919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62024:1;62006:14;:19;:42;;;;62047:1;62029:14;:19;62006:42;61998:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;62091:10;62104;;62091:23;;62125:10;;:12;;;;;;;;;:::i;:::-;;;;;;62148:28;62158:10;62170:5;62148:9;:28::i;:::-;62208:1;62190:14;:19;:46;;;;;62227:9;;62213:10;;:23;;62190:46;62187:166;;;62261:10;;62253:18;;62286:10;;:12;;;;;;;;;:::i;:::-;;;;;;62313:28;62323:10;62335:5;62313:9;:28::i;:::-;62187:166;61861:499;;:::o;29436:155::-;29531:52;29550:12;:10;:12::i;:::-;29564:8;29574;29531:18;:52::i;:::-;29436:155;;:::o;30559:328::-;30734:41;30753:12;:10;:12::i;:::-;30767:7;30734:18;:41::i;:::-;30726:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30840:39;30854:4;30860:2;30864:7;30873:5;30840:13;:39::i;:::-;30559:328;;;;:::o;27927:334::-;28000:13;28034:16;28042:7;28034;:16::i;:::-;28026:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28115:21;28139:10;:8;:10::i;:::-;28115:34;;28191:1;28173:7;28167:21;:25;:86;;;;;;;;;;;;;;;;;28219:7;28228:18;:7;:16;:18::i;:::-;28202:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28167:86;28160:93;;;27927:334;;;:::o;52046:204::-;48561:12;:10;:12::i;:::-;48550:23;;:7;:5;:7::i;:::-;:23;;;48542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52180:10:::1;:20;;;52201:8;52211;52221:11;52234:7;;52180:62;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52046:204:::0;;;;;:::o;55444:677::-;55633:19;55655:14;:27;55670:11;55655:27;;;;;;;;;;;;;;;55683:11;55655:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;55696:6;55655:48;;;;;;;;;;;;;;55633:70;;55745:1;55737:10;;55722:11;:25;;55714:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;55823:11;55810:8;;55800:19;;;;;;;:::i;:::-;;;;;;;;:34;55792:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;55973:1;55965:10;;55914:14;:27;55929:11;55914:27;;;;;;;;;;;;;;;55942:11;55914:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;55955:6;55914:48;;;;;;;;;;;;;:61;;;;56044:4;:25;;;56070:11;56083;56096:6;56104:8;;56044:69;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55444:677;;;;;;:::o;57949:99::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53544:102::-;53592:7;53627:10;53612:26;;53544:102;:::o;61587:21::-;;;;:::o;29662:164::-;29759:4;29783:18;:25;29802:5;29783:25;;;;;;;;;;;;;;;:35;29809:8;29783:35;;;;;;;;;;;;;;;;;;;;;;;;;29776:42;;29662:164;;;;:::o;52758:216::-;48561:12;:10;:12::i;:::-;48550:23;;:7;:5;:7::i;:::-;:23;;;48542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52897:11:::1;;52862:19;:32;52882:11;52862:32;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;52924:42;52941:11;52954;;52924:42;;;;;;;;:::i;:::-;;;;;;;;52758:216:::0;;;:::o;61379:76::-;61445:1;61433:9;:13;61425:22;;;;;;61379:76::o;58541:324::-;58752:105;58758:12;:10;:12::i;:::-;58772:11;58785:10;;58752:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58797:8;58807:14;58823:18;58843:13;;58752:5;:105::i;:::-;58541:324;;;;;;;;:::o;49239:201::-;48561:12;:10;:12::i;:::-;48550:23;;:7;:5;:7::i;:::-;:23;;;48542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49348:1:::1;49328:22;;:8;:22;;;;49320:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49404:28;49423:8;49404:18;:28::i;:::-;49239:201:::0;:::o;51750:234::-;51844:12;51876:10;:20;;;51897:10;:25;;;51931:4;51897:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51939:8;51957:4;51964:11;51876:100;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51869:107;;51750:234;;;;;;:::o;9428:98::-;9481:7;9508:10;9501:17;;9428:98;:::o;54384:528::-;54581:4;:25;;;54607:11;54620;54633:6;54641:8;54581:69;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54577:328;;54807:8;54797:19;;;;;;54746:14;:27;54761:11;54746:27;;;;;;;;;;;;;;;54774:11;54746:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;54787:6;54746:48;;;;;;;;;;;;;:70;;;;54836:57;54850:11;54863;54876:6;54884:8;54836:57;;;;;;;;;:::i;:::-;;;;;;;;54577:328;;;;54384:528;;;;:::o;18939:157::-;19024:4;19063:25;19048:40;;;:11;:40;;;;19041:47;;18939:157;;;:::o;32397:127::-;32462:4;32514:1;32486:30;;:7;:16;32494:7;32486:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32479:37;;32397:127;;;:::o;36543:174::-;36645:2;36618:15;:24;36634:7;36618:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36701:7;36697:2;36663:46;;36672:23;36687:7;36672:14;:23::i;:::-;36663:46;;;;;;;;;;;;36543:174;;:::o;32691:348::-;32784:4;32809:16;32817:7;32809;:16::i;:::-;32801:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32885:13;32901:23;32916:7;32901:14;:23::i;:::-;32885:39;;32954:5;32943:16;;:7;:16;;;:52;;;;32963:32;32980:5;32987:7;32963:16;:32::i;:::-;32943:52;:87;;;;33023:7;32999:31;;:20;33011:7;32999:11;:20::i;:::-;:31;;;32943:87;32935:96;;;32691:348;;;;:::o;35800:625::-;35959:4;35932:31;;:23;35947:7;35932:14;:23::i;:::-;:31;;;35924:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36038:1;36024:16;;:2;:16;;;;36016:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36094:39;36115:4;36121:2;36125:7;36094:20;:39::i;:::-;36198:29;36215:1;36219:7;36198:8;:29::i;:::-;36259:1;36240:9;:15;36250:4;36240:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36288:1;36271:9;:13;36281:2;36271:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36319:2;36300:7;:16;36308:7;36300:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36358:7;36354:2;36339:27;;36348:4;36339:27;;;;;;;;;;;;36379:38;36399:4;36405:2;36409:7;36379:19;:38::i;:::-;35800:625;;;:::o;58873:765::-;59089:42;59108:12;:10;:12::i;:::-;59122:8;59089:18;:42::i;:::-;59081:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;59196:53;59208:5;59215:11;59228:10;59240:8;59196:11;:53::i;:::-;59262:20;59296:10;59308:8;59285:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59262:55;;59328:80;59336:11;59349:7;59358:14;59374:18;59394:13;;59328:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:80::i;:::-;59421:12;59436:10;:27;;;59464:11;59485:4;59436:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59421:70;;59539:10;59507:60;;;;;;:::i;:::-;;;;;;;;59526:11;59507:60;;59519:5;59507:60;;;59551:8;59561:5;59507:60;;;;;;;:::i;:::-;;;;;;;;59578:52;59589:5;59596:11;59609:10;59621:8;59578:10;:52::i;:::-;58873:765;;;;;;;;;;:::o;59766:755::-;59918:50;59933:11;59946;59959:8;59918:14;:50::i;:::-;60024:22;60048:12;60075:8;60064:35;;;;;;;;;;;;:::i;:::-;60023:76;;;;60110:22;60206:2;60195:9;60191:18;60185:25;60167:43;;60382:51;60396:11;60409:14;60425:7;60382:13;:51::i;:::-;60451:62;60468:11;60481:14;60497:7;60506:6;60451:62;;;;;;;;;:::i;:::-;;;;;;;;59766:755;;;;;;;:::o;49600:191::-;49674:16;49693:6;;;;;;;;;;;49674:25;;49719:8;49710:6;;:17;;;;;;;;;;;;;;;;;;49774:8;49743:40;;49764:8;49743:40;;;;;;;;;;;;49600:191;;:::o;33381:110::-;33457:26;33467:2;33471:7;33457:26;;;;;;;;;;;;:9;:26::i;:::-;33381:110;;:::o;36859:315::-;37014:8;37005:17;;:5;:17;;;;36997:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37101:8;37063:18;:25;37082:5;37063:25;;;;;;;;;;;;;;;:35;37089:8;37063:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37147:8;37125:41;;37140:5;37125:41;;;37157:8;37125:41;;;;;;:::i;:::-;;;;;;;;36859:315;;;:::o;31769:::-;31926:28;31936:4;31942:2;31946:7;31926:9;:28::i;:::-;31973:48;31996:4;32002:2;32006:7;32015:5;31973:22;:48::i;:::-;31965:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31769:315;;;;:::o;61266:105::-;61318:13;61351:12;61344:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61266:105;:::o;7102:723::-;7158:13;7388:1;7379:5;:10;7375:53;;;7406:10;;;;;;;;;;;;;;;;;;;;;7375:53;7438:12;7453:5;7438:20;;7469:14;7494:78;7509:1;7501:4;:9;7494:78;;7527:8;;;;;:::i;:::-;;;;7558:2;7550:10;;;;;:::i;:::-;;;7494:78;;;7582:19;7614:6;7604:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7582:39;;7632:154;7648:1;7639:5;:10;7632:154;;7676:1;7666:11;;;;;:::i;:::-;;;7743:2;7735:5;:10;;;;:::i;:::-;7722:2;:24;;;;:::i;:::-;7709:39;;7692:6;7699;7692:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7772:2;7763:11;;;;;:::i;:::-;;;7632:154;;;7810:6;7796:21;;;;;7102:723;;;;:::o;39110:126::-;;;;:::o;39621:125::-;;;;:::o;60529:165::-;60671:15;60677:8;60671:5;:15::i;:::-;60529:165;;;;:::o;51210:435::-;51429:1;51386:19;:32;51406:11;51386:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;:44;;51378:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;51496:10;:15;;;51519:9;51530:11;51543:19;:32;51563:11;51543:32;;;;;;;;;;;;;;;51577:8;51587:14;51603:18;51623:13;51496:141;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51210:435;;;;;:::o;60702:138::-;;;;;:::o;60848:130::-;;;;:::o;60986:151::-;61098:31;61108:10;61120:8;61098:9;:31::i;:::-;60986:151;;;:::o;33718:321::-;33848:18;33854:2;33858:7;33848:5;:18::i;:::-;33899:54;33930:1;33934:2;33938:7;33947:5;33899:22;:54::i;:::-;33877:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33718:321;;;:::o;37739:799::-;37894:4;37915:15;:2;:13;;;:15::i;:::-;37911:620;;;37967:2;37951:36;;;37988:12;:10;:12::i;:::-;38002:4;38008:7;38017:5;37951:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37947:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38210:1;38193:6;:13;:18;38189:272;;;38236:60;;;;;;;;;;:::i;:::-;;;;;;;;38189:272;38411:6;38405:13;38396:6;38392:2;38388:15;38381:38;37947:529;38084:41;;;38074:51;;;:6;:51;;;;38067:58;;;;;37911:620;38515:4;38508:11;;37739:799;;;;;;;:::o;35043:420::-;35103:13;35119:23;35134:7;35119:14;:23::i;:::-;35103:39;;35155:48;35176:5;35191:1;35195:7;35155:20;:48::i;:::-;35244:29;35261:1;35265:7;35244:8;:29::i;:::-;35306:1;35286:9;:16;35296:5;35286:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;35325:7;:16;35333:7;35325:16;;;;;;;;;;;;35318:23;;;;;;;;;;;35387:7;35383:1;35359:36;;35368:5;35359:36;;;;;;;;;;;;35408:47;35428:5;35443:1;35447:7;35408:19;:47::i;:::-;35043:420;;:::o;34375:439::-;34469:1;34455:16;;:2;:16;;;;34447:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34528:16;34536:7;34528;:16::i;:::-;34527:17;34519:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34590:45;34619:1;34623:2;34627:7;34590:20;:45::i;:::-;34665:1;34648:9;:13;34658:2;34648:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34696:2;34677:7;:16;34685:7;34677:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34741:7;34737:2;34716:33;;34733:1;34716:33;;;;;;;;;;;;34762:44;34790:1;34794:2;34798:7;34762:19;:44::i;:::-;34375:439;;:::o;10750:326::-;10810:4;11067:1;11045:7;:19;;;:23;11038:30;;10750:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:352::-;444:5;469:65;485:48;526:6;485:48;:::i;:::-;469:65;:::i;:::-;460:74;;557:6;550:5;543:21;595:4;588:5;584:16;633:3;624:6;619:3;615:16;612:25;609:2;;;650:1;647;640:12;609:2;663:39;695:6;690:3;685;663:39;:::i;:::-;450:258;;;;;;:::o;714:345::-;792:5;817:66;833:49;875:6;833:49;:::i;:::-;817:66;:::i;:::-;808:75;;906:6;899:5;892:21;944:4;937:5;933:16;982:3;973:6;968:3;964:16;961:25;958:2;;;999:1;996;989:12;958:2;1012:41;1046:6;1041:3;1036;1012:41;:::i;:::-;798:261;;;;;;:::o;1065:139::-;1111:5;1149:6;1136:20;1127:29;;1165:33;1192:5;1165:33;:::i;:::-;1117:87;;;;:::o;1210:155::-;1264:5;1302:6;1289:20;1280:29;;1318:41;1353:5;1318:41;:::i;:::-;1270:95;;;;:::o;1371:133::-;1414:5;1452:6;1439:20;1430:29;;1468:30;1492:5;1468:30;:::i;:::-;1420:84;;;;:::o;1510:137::-;1555:5;1593:6;1580:20;1571:29;;1609:32;1635:5;1609:32;:::i;:::-;1561:86;;;;:::o;1653:141::-;1709:5;1740:6;1734:13;1725:22;;1756:32;1782:5;1756:32;:::i;:::-;1715:79;;;;:::o;1813:351::-;1870:8;1880:6;1930:3;1923:4;1915:6;1911:17;1907:27;1897:2;;1948:1;1945;1938:12;1897:2;1984:6;1971:20;1961:30;;2014:18;2006:6;2003:30;2000:2;;;2046:1;2043;2036:12;2000:2;2083:4;2075:6;2071:17;2059:29;;2137:3;2129:4;2121:6;2117:17;2107:8;2103:32;2100:41;2097:2;;;2154:1;2151;2144:12;2097:2;1887:277;;;;;:::o;2183:271::-;2238:5;2287:3;2280:4;2272:6;2268:17;2264:27;2254:2;;2305:1;2302;2295:12;2254:2;2345:6;2332:20;2370:78;2444:3;2436:6;2429:4;2421:6;2417:17;2370:78;:::i;:::-;2361:87;;2244:210;;;;;:::o;2473:286::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:2;;2606:1;2603;2596:12;2555:2;2639:6;2633:13;2664:89;2749:3;2741:6;2734:4;2726:6;2722:17;2664:89;:::i;:::-;2655:98;;2545:214;;;;;:::o;2779:273::-;2835:5;2884:3;2877:4;2869:6;2865:17;2861:27;2851:2;;2902:1;2899;2892:12;2851:2;2942:6;2929:20;2967:79;3042:3;3034:6;3027:4;3019:6;3015:17;2967:79;:::i;:::-;2958:88;;2841:211;;;;;:::o;3058:137::-;3103:5;3141:6;3128:20;3119:29;;3157:32;3183:5;3157:32;:::i;:::-;3109:86;;;;:::o;3201:141::-;3257:5;3288:6;3282:13;3273:22;;3304:32;3330:5;3304:32;:::i;:::-;3263:79;;;;:::o;3348:139::-;3394:5;3432:6;3419:20;3410:29;;3448:33;3475:5;3448:33;:::i;:::-;3400:87;;;;:::o;3493:143::-;3550:5;3581:6;3575:13;3566:22;;3597:33;3624:5;3597:33;:::i;:::-;3556:80;;;;:::o;3642:137::-;3687:5;3725:6;3712:20;3703:29;;3741:32;3767:5;3741:32;:::i;:::-;3693:86;;;;:::o;3785:141::-;3841:5;3872:6;3866:13;3857:22;;3888:32;3914:5;3888:32;:::i;:::-;3847:79;;;;:::o;3932:262::-;3991:6;4040:2;4028:9;4019:7;4015:23;4011:32;4008:2;;;4056:1;4053;4046:12;4008:2;4099:1;4124:53;4169:7;4160:6;4149:9;4145:22;4124:53;:::i;:::-;4114:63;;4070:117;3998:196;;;;:::o;4200:407::-;4268:6;4276;4325:2;4313:9;4304:7;4300:23;4296:32;4293:2;;;4341:1;4338;4331:12;4293:2;4384:1;4409:53;4454:7;4445:6;4434:9;4430:22;4409:53;:::i;:::-;4399:63;;4355:117;4511:2;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4482:118;4283:324;;;;;:::o;4613:552::-;4690:6;4698;4706;4755:2;4743:9;4734:7;4730:23;4726:32;4723:2;;;4771:1;4768;4761:12;4723:2;4814:1;4839:53;4884:7;4875:6;4864:9;4860:22;4839:53;:::i;:::-;4829:63;;4785:117;4941:2;4967:53;5012:7;5003:6;4992:9;4988:22;4967:53;:::i;:::-;4957:63;;4912:118;5069:2;5095:53;5140:7;5131:6;5120:9;5116:22;5095:53;:::i;:::-;5085:63;;5040:118;4713:452;;;;;:::o;5171:809::-;5266:6;5274;5282;5290;5339:3;5327:9;5318:7;5314:23;5310:33;5307:2;;;5356:1;5353;5346:12;5307:2;5399:1;5424:53;5469:7;5460:6;5449:9;5445:22;5424:53;:::i;:::-;5414:63;;5370:117;5526:2;5552:53;5597:7;5588:6;5577:9;5573:22;5552:53;:::i;:::-;5542:63;;5497:118;5654:2;5680:53;5725:7;5716:6;5705:9;5701:22;5680:53;:::i;:::-;5670:63;;5625:118;5810:2;5799:9;5795:18;5782:32;5841:18;5833:6;5830:30;5827:2;;;5873:1;5870;5863:12;5827:2;5901:62;5955:7;5946:6;5935:9;5931:22;5901:62;:::i;:::-;5891:72;;5753:220;5297:683;;;;;;;:::o;5986:401::-;6051:6;6059;6108:2;6096:9;6087:7;6083:23;6079:32;6076:2;;;6124:1;6121;6114:12;6076:2;6167:1;6192:53;6237:7;6228:6;6217:9;6213:22;6192:53;:::i;:::-;6182:63;;6138:117;6294:2;6320:50;6362:7;6353:6;6342:9;6338:22;6320:50;:::i;:::-;6310:60;;6265:115;6066:321;;;;;:::o;6393:1412::-;6535:6;6543;6551;6559;6567;6575;6583;6591;6599;6648:3;6636:9;6627:7;6623:23;6619:33;6616:2;;;6665:1;6662;6655:12;6616:2;6708:1;6733:53;6778:7;6769:6;6758:9;6754:22;6733:53;:::i;:::-;6723:63;;6679:117;6835:2;6861:52;6905:7;6896:6;6885:9;6881:22;6861:52;:::i;:::-;6851:62;;6806:117;6990:2;6979:9;6975:18;6962:32;7021:18;7013:6;7010:30;7007:2;;;7053:1;7050;7043:12;7007:2;7089:64;7145:7;7136:6;7125:9;7121:22;7089:64;:::i;:::-;7071:82;;;;6933:230;7202:2;7228:53;7273:7;7264:6;7253:9;7249:22;7228:53;:::i;:::-;7218:63;;7173:118;7330:3;7357:61;7410:7;7401:6;7390:9;7386:22;7357:61;:::i;:::-;7347:71;;7301:127;7467:3;7494:53;7539:7;7530:6;7519:9;7515:22;7494:53;:::i;:::-;7484:63;;7438:119;7624:3;7613:9;7609:19;7596:33;7656:18;7648:6;7645:30;7642:2;;;7688:1;7685;7678:12;7642:2;7724:64;7780:7;7771:6;7760:9;7756:22;7724:64;:::i;:::-;7706:82;;;;7567:231;6606:1199;;;;;;;;;;;:::o;7811:407::-;7879:6;7887;7936:2;7924:9;7915:7;7911:23;7907:32;7904:2;;;7952:1;7949;7942:12;7904:2;7995:1;8020:53;8065:7;8056:6;8045:9;8041:22;8020:53;:::i;:::-;8010:63;;7966:117;8122:2;8148:53;8193:7;8184:6;8173:9;8169:22;8148:53;:::i;:::-;8138:63;;8093:118;7894:324;;;;;:::o;8224:260::-;8282:6;8331:2;8319:9;8310:7;8306:23;8302:32;8299:2;;;8347:1;8344;8337:12;8299:2;8390:1;8415:52;8459:7;8450:6;8439:9;8435:22;8415:52;:::i;:::-;8405:62;;8361:116;8289:195;;;;:::o;8490:282::-;8559:6;8608:2;8596:9;8587:7;8583:23;8579:32;8576:2;;;8624:1;8621;8614:12;8576:2;8667:1;8692:63;8747:7;8738:6;8727:9;8723:22;8692:63;:::i;:::-;8682:73;;8638:127;8566:206;;;;:::o;8778:388::-;8857:6;8906:2;8894:9;8885:7;8881:23;8877:32;8874:2;;;8922:1;8919;8912:12;8874:2;8986:1;8975:9;8971:17;8965:24;9016:18;9008:6;9005:30;9002:2;;;9048:1;9045;9038:12;9002:2;9076:73;9141:7;9132:6;9121:9;9117:22;9076:73;:::i;:::-;9066:83;;8936:223;8864:302;;;;:::o;9172:544::-;9260:6;9268;9317:2;9305:9;9296:7;9292:23;9288:32;9285:2;;;9333:1;9330;9323:12;9285:2;9397:1;9386:9;9382:17;9376:24;9427:18;9419:6;9416:30;9413:2;;;9459:1;9456;9449:12;9413:2;9487:73;9552:7;9543:6;9532:9;9528:22;9487:73;:::i;:::-;9477:83;;9347:223;9609:2;9635:64;9691:7;9682:6;9671:9;9667:22;9635:64;:::i;:::-;9625:74;;9580:129;9275:441;;;;;:::o;9722:375::-;9791:6;9840:2;9828:9;9819:7;9815:23;9811:32;9808:2;;;9856:1;9853;9846:12;9808:2;9927:1;9916:9;9912:17;9899:31;9957:18;9949:6;9946:30;9943:2;;;9989:1;9986;9979:12;9943:2;10017:63;10072:7;10063:6;10052:9;10048:22;10017:63;:::i;:::-;10007:73;;9870:220;9798:299;;;;:::o;10103:260::-;10161:6;10210:2;10198:9;10189:7;10185:23;10181:32;10178:2;;;10226:1;10223;10216:12;10178:2;10269:1;10294:52;10338:7;10329:6;10318:9;10314:22;10294:52;:::i;:::-;10284:62;;10240:116;10168:195;;;;:::o;10369:282::-;10438:6;10487:2;10475:9;10466:7;10462:23;10458:32;10455:2;;;10503:1;10500;10493:12;10455:2;10546:1;10571:63;10626:7;10617:6;10606:9;10602:22;10571:63;:::i;:::-;10561:73;;10517:127;10445:206;;;;:::o;10657:536::-;10735:6;10743;10751;10800:2;10788:9;10779:7;10775:23;10771:32;10768:2;;;10816:1;10813;10806:12;10768:2;10859:1;10884:52;10928:7;10919:6;10908:9;10904:22;10884:52;:::i;:::-;10874:62;;10830:116;11013:2;11002:9;10998:18;10985:32;11044:18;11036:6;11033:30;11030:2;;;11076:1;11073;11066:12;11030:2;11112:64;11168:7;11159:6;11148:9;11144:22;11112:64;:::i;:::-;11094:82;;;;10956:230;10758:435;;;;;:::o;11199:1266::-;11332:6;11340;11348;11356;11364;11372;11380;11388;11437:3;11425:9;11416:7;11412:23;11408:33;11405:2;;;11454:1;11451;11444:12;11405:2;11497:1;11522:52;11566:7;11557:6;11546:9;11542:22;11522:52;:::i;:::-;11512:62;;11468:116;11651:2;11640:9;11636:18;11623:32;11682:18;11674:6;11671:30;11668:2;;;11714:1;11711;11704:12;11668:2;11750:64;11806:7;11797:6;11786:9;11782:22;11750:64;:::i;:::-;11732:82;;;;11594:230;11863:2;11889:53;11934:7;11925:6;11914:9;11910:22;11889:53;:::i;:::-;11879:63;;11834:118;11991:2;12017:61;12070:7;12061:6;12050:9;12046:22;12017:61;:::i;:::-;12007:71;;11962:126;12127:3;12154:53;12199:7;12190:6;12179:9;12175:22;12154:53;:::i;:::-;12144:63;;12098:119;12284:3;12273:9;12269:19;12256:33;12316:18;12308:6;12305:30;12302:2;;;12348:1;12345;12338:12;12302:2;12384:64;12440:7;12431:6;12420:9;12416:22;12384:64;:::i;:::-;12366:82;;;;12227:231;11395:1070;;;;;;;;;;;:::o;12471:661::-;12556:6;12564;12572;12621:2;12609:9;12600:7;12596:23;12592:32;12589:2;;;12637:1;12634;12627:12;12589:2;12680:1;12705:52;12749:7;12740:6;12729:9;12725:22;12705:52;:::i;:::-;12695:62;;12651:116;12834:2;12823:9;12819:18;12806:32;12865:18;12857:6;12854:30;12851:2;;;12897:1;12894;12887:12;12851:2;12925:62;12979:7;12970:6;12959:9;12955:22;12925:62;:::i;:::-;12915:72;;12777:220;13036:2;13062:53;13107:7;13098:6;13087:9;13083:22;13062:53;:::i;:::-;13052:63;;13007:118;12579:553;;;;;:::o;13138:936::-;13242:6;13250;13258;13266;13274;13323:3;13311:9;13302:7;13298:23;13294:33;13291:2;;;13340:1;13337;13330:12;13291:2;13383:1;13408:52;13452:7;13443:6;13432:9;13428:22;13408:52;:::i;:::-;13398:62;;13354:116;13537:2;13526:9;13522:18;13509:32;13568:18;13560:6;13557:30;13554:2;;;13600:1;13597;13590:12;13554:2;13628:62;13682:7;13673:6;13662:9;13658:22;13628:62;:::i;:::-;13618:72;;13480:220;13739:2;13765:52;13809:7;13800:6;13789:9;13785:22;13765:52;:::i;:::-;13755:62;;13710:117;13894:2;13883:9;13879:18;13866:32;13925:18;13917:6;13914:30;13911:2;;;13957:1;13954;13947:12;13911:2;13993:64;14049:7;14040:6;14029:9;14025:22;13993:64;:::i;:::-;13975:82;;;;13837:230;13281:793;;;;;;;;:::o;14080:916::-;14182:6;14190;14198;14206;14255:3;14243:9;14234:7;14230:23;14226:33;14223:2;;;14272:1;14269;14262:12;14223:2;14315:1;14340:52;14384:7;14375:6;14364:9;14360:22;14340:52;:::i;:::-;14330:62;;14286:116;14469:2;14458:9;14454:18;14441:32;14500:18;14492:6;14489:30;14486:2;;;14532:1;14529;14522:12;14486:2;14560:62;14614:7;14605:6;14594:9;14590:22;14560:62;:::i;:::-;14550:72;;14412:220;14671:2;14697:52;14741:7;14732:6;14721:9;14717:22;14697:52;:::i;:::-;14687:62;;14642:117;14826:2;14815:9;14811:18;14798:32;14857:18;14849:6;14846:30;14843:2;;;14889:1;14886;14879:12;14843:2;14917:62;14971:7;14962:6;14951:9;14947:22;14917:62;:::i;:::-;14907:72;;14769:220;14213:783;;;;;;;:::o;15002:694::-;15086:6;15094;15102;15110;15159:3;15147:9;15138:7;15134:23;15130:33;15127:2;;;15176:1;15173;15166:12;15127:2;15219:1;15244:52;15288:7;15279:6;15268:9;15264:22;15244:52;:::i;:::-;15234:62;;15190:116;15345:2;15371:52;15415:7;15406:6;15395:9;15391:22;15371:52;:::i;:::-;15361:62;;15316:117;15472:2;15498:53;15543:7;15534:6;15523:9;15519:22;15498:53;:::i;:::-;15488:63;;15443:118;15600:2;15626:53;15671:7;15662:6;15651:9;15647:22;15626:53;:::i;:::-;15616:63;;15571:118;15117:579;;;;;;;:::o;15702:825::-;15797:6;15805;15813;15821;15829;15878:3;15866:9;15857:7;15853:23;15849:33;15846:2;;;15895:1;15892;15885:12;15846:2;15938:1;15963:52;16007:7;15998:6;15987:9;15983:22;15963:52;:::i;:::-;15953:62;;15909:116;16064:2;16090:52;16134:7;16125:6;16114:9;16110:22;16090:52;:::i;:::-;16080:62;;16035:117;16191:2;16217:53;16262:7;16253:6;16242:9;16238:22;16217:53;:::i;:::-;16207:63;;16162:118;16347:2;16336:9;16332:18;16319:32;16378:18;16370:6;16367:30;16364:2;;;16410:1;16407;16400:12;16364:2;16446:64;16502:7;16493:6;16482:9;16478:22;16446:64;:::i;:::-;16428:82;;;;16290:230;15836:691;;;;;;;;:::o;16533:262::-;16592:6;16641:2;16629:9;16620:7;16616:23;16612:32;16609:2;;;16657:1;16654;16647:12;16609:2;16700:1;16725:53;16770:7;16761:6;16750:9;16746:22;16725:53;:::i;:::-;16715:63;;16671:117;16599:196;;;;:::o;16801:282::-;16870:6;16919:2;16907:9;16898:7;16894:23;16890:32;16887:2;;;16935:1;16932;16925:12;16887:2;16978:1;17003:63;17058:7;17049:6;17038:9;17034:22;17003:63;:::i;:::-;16993:73;;16949:127;16877:206;;;;:::o;17089:142::-;17192:32;17218:5;17192:32;:::i;:::-;17187:3;17180:45;17170:61;;:::o;17237:118::-;17324:24;17342:5;17324:24;:::i;:::-;17319:3;17312:37;17302:53;;:::o;17361:109::-;17442:21;17457:5;17442:21;:::i;:::-;17437:3;17430:34;17420:50;;:::o;17476:118::-;17563:24;17581:5;17563:24;:::i;:::-;17558:3;17551:37;17541:53;;:::o;17622:301::-;17718:3;17739:70;17802:6;17797:3;17739:70;:::i;:::-;17732:77;;17819:43;17855:6;17850:3;17843:5;17819:43;:::i;:::-;17887:29;17909:6;17887:29;:::i;:::-;17882:3;17878:39;17871:46;;17722:201;;;;;:::o;17951:314::-;18065:3;18086:88;18167:6;18162:3;18086:88;:::i;:::-;18079:95;;18184:43;18220:6;18215:3;18208:5;18184:43;:::i;:::-;18252:6;18247:3;18243:16;18236:23;;18069:196;;;;;:::o;18271:360::-;18357:3;18385:38;18417:5;18385:38;:::i;:::-;18439:70;18502:6;18497:3;18439:70;:::i;:::-;18432:77;;18518:52;18563:6;18558:3;18551:4;18544:5;18540:16;18518:52;:::i;:::-;18595:29;18617:6;18595:29;:::i;:::-;18590:3;18586:39;18579:46;;18361:270;;;;;:::o;18637:373::-;18741:3;18769:38;18801:5;18769:38;:::i;:::-;18823:88;18904:6;18899:3;18823:88;:::i;:::-;18816:95;;18920:52;18965:6;18960:3;18953:4;18946:5;18942:16;18920:52;:::i;:::-;18997:6;18992:3;18988:16;18981:23;;18745:265;;;;;:::o;19038:798::-;19121:3;19158:5;19152:12;19187:36;19213:9;19187:36;:::i;:::-;19239:70;19302:6;19297:3;19239:70;:::i;:::-;19232:77;;19340:1;19329:9;19325:17;19356:1;19351:135;;;;19500:1;19495:335;;;;19318:512;;19351:135;19435:4;19431:9;19420;19416:25;19411:3;19404:38;19471:4;19466:3;19462:14;19455:21;;19351:135;;19495:335;19562:37;19593:5;19562:37;:::i;:::-;19621:1;19635:154;19649:6;19646:1;19643:13;19635:154;;;19723:7;19717:14;19713:1;19708:3;19704:11;19697:35;19773:1;19764:7;19760:15;19749:26;;19671:4;19668:1;19664:12;19659:17;;19635:154;;;19818:1;19813:3;19809:11;19802:18;;19502:328;;19318:512;;19125:711;;;;;;:::o;19864:841::-;19965:3;20002:5;19996:12;20031:36;20057:9;20031:36;:::i;:::-;20083:88;20164:6;20159:3;20083:88;:::i;:::-;20076:95;;20202:1;20191:9;20187:17;20218:1;20213:137;;;;20364:1;20359:340;;;;20180:519;;20213:137;20297:4;20293:9;20282;20278:25;20273:3;20266:38;20333:6;20328:3;20324:16;20317:23;;20213:137;;20359:340;20426:37;20457:5;20426:37;:::i;:::-;20485:1;20499:154;20513:6;20510:1;20507:13;20499:154;;;20587:7;20581:14;20577:1;20572:3;20568:11;20561:35;20637:1;20628:7;20624:15;20613:26;;20535:4;20532:1;20528:12;20523:17;;20499:154;;;20682:6;20677:3;20673:16;20666:23;;20366:333;;20180:519;;19969:736;;;;;;:::o;20711:364::-;20799:3;20827:39;20860:5;20827:39;:::i;:::-;20882:71;20946:6;20941:3;20882:71;:::i;:::-;20875:78;;20962:52;21007:6;21002:3;20995:4;20988:5;20984:16;20962:52;:::i;:::-;21039:29;21061:6;21039:29;:::i;:::-;21034:3;21030:39;21023:46;;20803:272;;;;;:::o;21081:377::-;21187:3;21215:39;21248:5;21215:39;:::i;:::-;21270:89;21352:6;21347:3;21270:89;:::i;:::-;21263:96;;21368:52;21413:6;21408:3;21401:4;21394:5;21390:16;21368:52;:::i;:::-;21445:6;21440:3;21436:16;21429:23;;21191:267;;;;;:::o;21464:366::-;21606:3;21627:67;21691:2;21686:3;21627:67;:::i;:::-;21620:74;;21703:93;21792:3;21703:93;:::i;:::-;21821:2;21816:3;21812:12;21805:19;;21610:220;;;:::o;21836:366::-;21978:3;21999:67;22063:2;22058:3;21999:67;:::i;:::-;21992:74;;22075:93;22164:3;22075:93;:::i;:::-;22193:2;22188:3;22184:12;22177:19;;21982:220;;;:::o;22208:366::-;22350:3;22371:67;22435:2;22430:3;22371:67;:::i;:::-;22364:74;;22447:93;22536:3;22447:93;:::i;:::-;22565:2;22560:3;22556:12;22549:19;;22354:220;;;:::o;22580:366::-;22722:3;22743:67;22807:2;22802:3;22743:67;:::i;:::-;22736:74;;22819:93;22908:3;22819:93;:::i;:::-;22937:2;22932:3;22928:12;22921:19;;22726:220;;;:::o;22952:366::-;23094:3;23115:67;23179:2;23174:3;23115:67;:::i;:::-;23108:74;;23191:93;23280:3;23191:93;:::i;:::-;23309:2;23304:3;23300:12;23293:19;;23098:220;;;:::o;23324:366::-;23466:3;23487:67;23551:2;23546:3;23487:67;:::i;:::-;23480:74;;23563:93;23652:3;23563:93;:::i;:::-;23681:2;23676:3;23672:12;23665:19;;23470:220;;;:::o;23696:366::-;23838:3;23859:67;23923:2;23918:3;23859:67;:::i;:::-;23852:74;;23935:93;24024:3;23935:93;:::i;:::-;24053:2;24048:3;24044:12;24037:19;;23842:220;;;:::o;24068:366::-;24210:3;24231:67;24295:2;24290:3;24231:67;:::i;:::-;24224:74;;24307:93;24396:3;24307:93;:::i;:::-;24425:2;24420:3;24416:12;24409:19;;24214:220;;;:::o;24440:366::-;24582:3;24603:67;24667:2;24662:3;24603:67;:::i;:::-;24596:74;;24679:93;24768:3;24679:93;:::i;:::-;24797:2;24792:3;24788:12;24781:19;;24586:220;;;:::o;24812:366::-;24954:3;24975:67;25039:2;25034:3;24975:67;:::i;:::-;24968:74;;25051:93;25140:3;25051:93;:::i;:::-;25169:2;25164:3;25160:12;25153:19;;24958:220;;;:::o;25184:366::-;25326:3;25347:67;25411:2;25406:3;25347:67;:::i;:::-;25340:74;;25423:93;25512:3;25423:93;:::i;:::-;25541:2;25536:3;25532:12;25525:19;;25330:220;;;:::o;25556:366::-;25698:3;25719:67;25783:2;25778:3;25719:67;:::i;:::-;25712:74;;25795:93;25884:3;25795:93;:::i;:::-;25913:2;25908:3;25904:12;25897:19;;25702:220;;;:::o;25928:366::-;26070:3;26091:67;26155:2;26150:3;26091:67;:::i;:::-;26084:74;;26167:93;26256:3;26167:93;:::i;:::-;26285:2;26280:3;26276:12;26269:19;;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;;26446:220;;;:::o;26672:366::-;26814:3;26835:67;26899:2;26894:3;26835:67;:::i;:::-;26828:74;;26911:93;27000:3;26911:93;:::i;:::-;27029:2;27024:3;27020:12;27013:19;;26818:220;;;:::o;27044:366::-;27186:3;27207:67;27271:2;27266:3;27207:67;:::i;:::-;27200:74;;27283:93;27372:3;27283:93;:::i;:::-;27401:2;27396:3;27392:12;27385:19;;27190:220;;;:::o;27416:366::-;27558:3;27579:67;27643:2;27638:3;27579:67;:::i;:::-;27572:74;;27655:93;27744:3;27655:93;:::i;:::-;27773:2;27768:3;27764:12;27757:19;;27562:220;;;:::o;27788:366::-;27930:3;27951:67;28015:2;28010:3;27951:67;:::i;:::-;27944:74;;28027:93;28116:3;28027:93;:::i;:::-;28145:2;28140:3;28136:12;28129:19;;27934:220;;;:::o;28160:366::-;28302:3;28323:67;28387:2;28382:3;28323:67;:::i;:::-;28316:74;;28399:93;28488:3;28399:93;:::i;:::-;28517:2;28512:3;28508:12;28501:19;;28306:220;;;:::o;28532:366::-;28674:3;28695:67;28759:2;28754:3;28695:67;:::i;:::-;28688:74;;28771:93;28860:3;28771:93;:::i;:::-;28889:2;28884:3;28880:12;28873:19;;28678:220;;;:::o;28904:366::-;29046:3;29067:67;29131:2;29126:3;29067:67;:::i;:::-;29060:74;;29143:93;29232:3;29143:93;:::i;:::-;29261:2;29256:3;29252:12;29245:19;;29050:220;;;:::o;29276:366::-;29418:3;29439:67;29503:2;29498:3;29439:67;:::i;:::-;29432:74;;29515:93;29604:3;29515:93;:::i;:::-;29633:2;29628:3;29624:12;29617:19;;29422:220;;;:::o;29648:366::-;29790:3;29811:67;29875:2;29870:3;29811:67;:::i;:::-;29804:74;;29887:93;29976:3;29887:93;:::i;:::-;30005:2;30000:3;29996:12;29989:19;;29794:220;;;:::o;30020:115::-;30105:23;30122:5;30105:23;:::i;:::-;30100:3;30093:36;30083:52;;:::o;30141:118::-;30228:24;30246:5;30228:24;:::i;:::-;30223:3;30216:37;30206:53;;:::o;30265:115::-;30350:23;30367:5;30350:23;:::i;:::-;30345:3;30338:36;30328:52;;:::o;30386:291::-;30526:3;30548:103;30647:3;30638:6;30630;30548:103;:::i;:::-;30541:110;;30668:3;30661:10;;30530:147;;;;;:::o;30683:271::-;30813:3;30835:93;30924:3;30915:6;30835:93;:::i;:::-;30828:100;;30945:3;30938:10;;30817:137;;;;:::o;30960:265::-;31087:3;31109:90;31195:3;31186:6;31109:90;:::i;:::-;31102:97;;31216:3;31209:10;;31091:134;;;;:::o;31231:435::-;31411:3;31433:95;31524:3;31515:6;31433:95;:::i;:::-;31426:102;;31545:95;31636:3;31627:6;31545:95;:::i;:::-;31538:102;;31657:3;31650:10;;31415:251;;;;;:::o;31672:222::-;31765:4;31803:2;31792:9;31788:18;31780:26;;31816:71;31884:1;31873:9;31869:17;31860:6;31816:71;:::i;:::-;31770:124;;;;:::o;31900:640::-;32095:4;32133:3;32122:9;32118:19;32110:27;;32147:71;32215:1;32204:9;32200:17;32191:6;32147:71;:::i;:::-;32228:72;32296:2;32285:9;32281:18;32272:6;32228:72;:::i;:::-;32310;32378:2;32367:9;32363:18;32354:6;32310:72;:::i;:::-;32429:9;32423:4;32419:20;32414:2;32403:9;32399:18;32392:48;32457:76;32528:4;32519:6;32457:76;:::i;:::-;32449:84;;32100:440;;;;;;;:::o;32546:210::-;32633:4;32671:2;32660:9;32656:18;32648:26;;32684:65;32746:1;32735:9;32731:17;32722:6;32684:65;:::i;:::-;32638:118;;;;:::o;32762:222::-;32855:4;32893:2;32882:9;32878:18;32870:26;;32906:71;32974:1;32963:9;32959:17;32950:6;32906:71;:::i;:::-;32860:124;;;;:::o;32990:309::-;33101:4;33139:2;33128:9;33124:18;33116:26;;33188:9;33182:4;33178:20;33174:1;33163:9;33159:17;33152:47;33216:76;33287:4;33278:6;33216:76;:::i;:::-;33208:84;;33106:193;;;;:::o;33305:419::-;33444:4;33482:2;33471:9;33467:18;33459:26;;33531:9;33525:4;33521:20;33517:1;33506:9;33502:17;33495:47;33559:76;33630:4;33621:6;33559:76;:::i;:::-;33551:84;;33645:72;33713:2;33702:9;33698:18;33689:6;33645:72;:::i;:::-;33449:275;;;;;:::o;33730:313::-;33843:4;33881:2;33870:9;33866:18;33858:26;;33930:9;33924:4;33920:20;33916:1;33905:9;33901:17;33894:47;33958:78;34031:4;34022:6;33958:78;:::i;:::-;33950:86;;33848:195;;;;:::o;34049:419::-;34215:4;34253:2;34242:9;34238:18;34230:26;;34302:9;34296:4;34292:20;34288:1;34277:9;34273:17;34266:47;34330:131;34456:4;34330:131;:::i;:::-;34322:139;;34220:248;;;:::o;34474:419::-;34640:4;34678:2;34667:9;34663:18;34655:26;;34727:9;34721:4;34717:20;34713:1;34702:9;34698:17;34691:47;34755:131;34881:4;34755:131;:::i;:::-;34747:139;;34645:248;;;:::o;34899:419::-;35065:4;35103:2;35092:9;35088:18;35080:26;;35152:9;35146:4;35142:20;35138:1;35127:9;35123:17;35116:47;35180:131;35306:4;35180:131;:::i;:::-;35172:139;;35070:248;;;:::o;35324:419::-;35490:4;35528:2;35517:9;35513:18;35505:26;;35577:9;35571:4;35567:20;35563:1;35552:9;35548:17;35541:47;35605:131;35731:4;35605:131;:::i;:::-;35597:139;;35495:248;;;:::o;35749:419::-;35915:4;35953:2;35942:9;35938:18;35930:26;;36002:9;35996:4;35992:20;35988:1;35977:9;35973:17;35966:47;36030:131;36156:4;36030:131;:::i;:::-;36022:139;;35920:248;;;:::o;36174:419::-;36340:4;36378:2;36367:9;36363:18;36355:26;;36427:9;36421:4;36417:20;36413:1;36402:9;36398:17;36391:47;36455:131;36581:4;36455:131;:::i;:::-;36447:139;;36345:248;;;:::o;36599:419::-;36765:4;36803:2;36792:9;36788:18;36780:26;;36852:9;36846:4;36842:20;36838:1;36827:9;36823:17;36816:47;36880:131;37006:4;36880:131;:::i;:::-;36872:139;;36770:248;;;:::o;37024:419::-;37190:4;37228:2;37217:9;37213:18;37205:26;;37277:9;37271:4;37267:20;37263:1;37252:9;37248:17;37241:47;37305:131;37431:4;37305:131;:::i;:::-;37297:139;;37195:248;;;:::o;37449:419::-;37615:4;37653:2;37642:9;37638:18;37630:26;;37702:9;37696:4;37692:20;37688:1;37677:9;37673:17;37666:47;37730:131;37856:4;37730:131;:::i;:::-;37722:139;;37620:248;;;:::o;37874:419::-;38040:4;38078:2;38067:9;38063:18;38055:26;;38127:9;38121:4;38117:20;38113:1;38102:9;38098:17;38091:47;38155:131;38281:4;38155:131;:::i;:::-;38147:139;;38045:248;;;:::o;38299:419::-;38465:4;38503:2;38492:9;38488:18;38480:26;;38552:9;38546:4;38542:20;38538:1;38527:9;38523:17;38516:47;38580:131;38706:4;38580:131;:::i;:::-;38572:139;;38470:248;;;:::o;38724:419::-;38890:4;38928:2;38917:9;38913:18;38905:26;;38977:9;38971:4;38967:20;38963:1;38952:9;38948:17;38941:47;39005:131;39131:4;39005:131;:::i;:::-;38997:139;;38895:248;;;:::o;39149:419::-;39315:4;39353:2;39342:9;39338:18;39330:26;;39402:9;39396:4;39392:20;39388:1;39377:9;39373:17;39366:47;39430:131;39556:4;39430:131;:::i;:::-;39422:139;;39320:248;;;:::o;39574:419::-;39740:4;39778:2;39767:9;39763:18;39755:26;;39827:9;39821:4;39817:20;39813:1;39802:9;39798:17;39791:47;39855:131;39981:4;39855:131;:::i;:::-;39847:139;;39745:248;;;:::o;39999:419::-;40165:4;40203:2;40192:9;40188:18;40180:26;;40252:9;40246:4;40242:20;40238:1;40227:9;40223:17;40216:47;40280:131;40406:4;40280:131;:::i;:::-;40272:139;;40170:248;;;:::o;40424:419::-;40590:4;40628:2;40617:9;40613:18;40605:26;;40677:9;40671:4;40667:20;40663:1;40652:9;40648:17;40641:47;40705:131;40831:4;40705:131;:::i;:::-;40697:139;;40595:248;;;:::o;40849:419::-;41015:4;41053:2;41042:9;41038:18;41030:26;;41102:9;41096:4;41092:20;41088:1;41077:9;41073:17;41066:47;41130:131;41256:4;41130:131;:::i;:::-;41122:139;;41020:248;;;:::o;41274:419::-;41440:4;41478:2;41467:9;41463:18;41455:26;;41527:9;41521:4;41517:20;41513:1;41502:9;41498:17;41491:47;41555:131;41681:4;41555:131;:::i;:::-;41547:139;;41445:248;;;:::o;41699:419::-;41865:4;41903:2;41892:9;41888:18;41880:26;;41952:9;41946:4;41942:20;41938:1;41927:9;41923:17;41916:47;41980:131;42106:4;41980:131;:::i;:::-;41972:139;;41870:248;;;:::o;42124:419::-;42290:4;42328:2;42317:9;42313:18;42305:26;;42377:9;42371:4;42367:20;42363:1;42352:9;42348:17;42341:47;42405:131;42531:4;42405:131;:::i;:::-;42397:139;;42295:248;;;:::o;42549:419::-;42715:4;42753:2;42742:9;42738:18;42730:26;;42802:9;42796:4;42792:20;42788:1;42777:9;42773:17;42766:47;42830:131;42956:4;42830:131;:::i;:::-;42822:139;;42720:248;;;:::o;42974:419::-;43140:4;43178:2;43167:9;43163:18;43155:26;;43227:9;43221:4;43217:20;43213:1;43202:9;43198:17;43191:47;43255:131;43381:4;43255:131;:::i;:::-;43247:139;;43145:248;;;:::o;43399:419::-;43565:4;43603:2;43592:9;43588:18;43580:26;;43652:9;43646:4;43642:20;43638:1;43627:9;43623:17;43616:47;43680:131;43806:4;43680:131;:::i;:::-;43672:139;;43570:248;;;:::o;43824:218::-;43915:4;43953:2;43942:9;43938:18;43930:26;;43966:69;44032:1;44021:9;44017:17;44008:6;43966:69;:::i;:::-;43920:122;;;;:::o;44048:328::-;44167:4;44205:2;44194:9;44190:18;44182:26;;44218:69;44284:1;44273:9;44269:17;44260:6;44218:69;:::i;:::-;44297:72;44365:2;44354:9;44350:18;44341:6;44297:72;:::i;:::-;44172:204;;;;;:::o;44382:545::-;44555:4;44593:3;44582:9;44578:19;44570:27;;44607:69;44673:1;44662:9;44658:17;44649:6;44607:69;:::i;:::-;44686:72;44754:2;44743:9;44739:18;44730:6;44686:72;:::i;:::-;44768;44836:2;44825:9;44821:18;44812:6;44768:72;:::i;:::-;44850:70;44916:2;44905:9;44901:18;44892:6;44850:70;:::i;:::-;44560:367;;;;;;;:::o;44933:435::-;45080:4;45118:2;45107:9;45103:18;45095:26;;45131:69;45197:1;45186:9;45182:17;45173:6;45131:69;:::i;:::-;45247:9;45241:4;45237:20;45232:2;45221:9;45217:18;45210:48;45275:86;45356:4;45347:6;45339;45275:86;:::i;:::-;45267:94;;45085:283;;;;;;:::o;45374:739::-;45593:4;45631:3;45620:9;45616:19;45608:27;;45645:69;45711:1;45700:9;45696:17;45687:6;45645:69;:::i;:::-;45761:9;45755:4;45751:20;45746:2;45735:9;45731:18;45724:48;45789:76;45860:4;45851:6;45789:76;:::i;:::-;45781:84;;45875:70;45941:2;45930:9;45926:18;45917:6;45875:70;:::i;:::-;45992:9;45986:4;45982:20;45977:2;45966:9;45962:18;45955:48;46020:86;46101:4;46092:6;46084;46020:86;:::i;:::-;46012:94;;45598:515;;;;;;;;:::o;46119:719::-;46328:4;46366:3;46355:9;46351:19;46343:27;;46380:69;46446:1;46435:9;46431:17;46422:6;46380:69;:::i;:::-;46496:9;46490:4;46486:20;46481:2;46470:9;46466:18;46459:48;46524:76;46595:4;46586:6;46524:76;:::i;:::-;46516:84;;46610:70;46676:2;46665:9;46661:18;46652:6;46610:70;:::i;:::-;46727:9;46721:4;46717:20;46712:2;46701:9;46697:18;46690:48;46755:76;46826:4;46817:6;46755:76;:::i;:::-;46747:84;;46333:505;;;;;;;:::o;46844:1058::-;47142:4;47180:3;47169:9;47165:19;47157:27;;47194:69;47260:1;47249:9;47245:17;47236:6;47194:69;:::i;:::-;47310:9;47304:4;47300:20;47295:2;47284:9;47280:18;47273:48;47338:73;47406:4;47397:6;47338:73;:::i;:::-;47330:81;;47458:9;47452:4;47448:20;47443:2;47432:9;47428:18;47421:48;47486:76;47557:4;47548:6;47486:76;:::i;:::-;47478:84;;47572:88;47656:2;47645:9;47641:18;47632:6;47572:88;:::i;:::-;47670:73;47738:3;47727:9;47723:19;47714:6;47670:73;:::i;:::-;47791:9;47785:4;47781:20;47775:3;47764:9;47760:19;47753:49;47819:76;47890:4;47881:6;47819:76;:::i;:::-;47811:84;;47147:755;;;;;;;;;:::o;47908:545::-;48081:4;48119:3;48108:9;48104:19;48096:27;;48133:69;48199:1;48188:9;48184:17;48175:6;48133:69;:::i;:::-;48212:70;48278:2;48267:9;48263:18;48254:6;48212:70;:::i;:::-;48292:72;48360:2;48349:9;48345:18;48336:6;48292:72;:::i;:::-;48374;48442:2;48431:9;48427:18;48418:6;48374:72;:::i;:::-;48086:367;;;;;;;:::o;48459:652::-;48660:4;48698:3;48687:9;48683:19;48675:27;;48712:69;48778:1;48767:9;48763:17;48754:6;48712:69;:::i;:::-;48791:70;48857:2;48846:9;48842:18;48833:6;48791:70;:::i;:::-;48871:72;48939:2;48928:9;48924:18;48915:6;48871:72;:::i;:::-;48990:9;48984:4;48980:20;48975:2;48964:9;48960:18;48953:48;49018:86;49099:4;49090:6;49082;49018:86;:::i;:::-;49010:94;;48665:446;;;;;;;;:::o;49117:222::-;49210:4;49248:2;49237:9;49233:18;49225:26;;49261:71;49329:1;49318:9;49314:17;49305:6;49261:71;:::i;:::-;49215:124;;;;:::o;49345:328::-;49464:4;49502:2;49491:9;49487:18;49479:26;;49515:71;49583:1;49572:9;49568:17;49559:6;49515:71;:::i;:::-;49596:70;49662:2;49651:9;49647:18;49638:6;49596:70;:::i;:::-;49469:204;;;;;:::o;49679:129::-;49713:6;49740:20;;:::i;:::-;49730:30;;49769:33;49797:4;49789:6;49769:33;:::i;:::-;49720:88;;;:::o;49814:75::-;49847:6;49880:2;49874:9;49864:19;;49854:35;:::o;49895:307::-;49956:4;50046:18;50038:6;50035:30;50032:2;;;50068:18;;:::i;:::-;50032:2;50106:29;50128:6;50106:29;:::i;:::-;50098:37;;50190:4;50184;50180:15;50172:23;;49961:241;;;:::o;50208:308::-;50270:4;50360:18;50352:6;50349:30;50346:2;;;50382:18;;:::i;:::-;50346:2;50420:29;50442:6;50420:29;:::i;:::-;50412:37;;50504:4;50498;50494:15;50486:23;;50275:241;;;:::o;50522:140::-;50570:4;50593:3;50585:11;;50616:3;50613:1;50606:14;50650:4;50647:1;50637:18;50629:26;;50575:87;;;:::o;50668:98::-;50719:6;50753:5;50747:12;50737:22;;50726:40;;;:::o;50772:99::-;50824:6;50858:5;50852:12;50842:22;;50831:40;;;:::o;50877:168::-;50960:11;50994:6;50989:3;50982:19;51034:4;51029:3;51025:14;51010:29;;50972:73;;;;:::o;51051:147::-;51152:11;51189:3;51174:18;;51164:34;;;;:::o;51204:169::-;51288:11;51322:6;51317:3;51310:19;51362:4;51357:3;51353:14;51338:29;;51300:73;;;;:::o;51379:148::-;51481:11;51518:3;51503:18;;51493:34;;;;:::o;51533:305::-;51573:3;51592:20;51610:1;51592:20;:::i;:::-;51587:25;;51626:20;51644:1;51626:20;:::i;:::-;51621:25;;51780:1;51712:66;51708:74;51705:1;51702:81;51699:2;;;51786:18;;:::i;:::-;51699:2;51830:1;51827;51823:9;51816:16;;51577:261;;;;:::o;51844:185::-;51884:1;51901:20;51919:1;51901:20;:::i;:::-;51896:25;;51935:20;51953:1;51935:20;:::i;:::-;51930:25;;51974:1;51964:2;;51979:18;;:::i;:::-;51964:2;52021:1;52018;52014:9;52009:14;;51886:143;;;;:::o;52035:191::-;52075:4;52095:20;52113:1;52095:20;:::i;:::-;52090:25;;52129:20;52147:1;52129:20;:::i;:::-;52124:25;;52168:1;52165;52162:8;52159:2;;;52173:18;;:::i;:::-;52159:2;52218:1;52215;52211:9;52203:17;;52080:146;;;;:::o;52232:96::-;52269:7;52298:24;52316:5;52298:24;:::i;:::-;52287:35;;52277:51;;;:::o;52334:104::-;52379:7;52408:24;52426:5;52408:24;:::i;:::-;52397:35;;52387:51;;;:::o;52444:90::-;52478:7;52521:5;52514:13;52507:21;52496:32;;52486:48;;;:::o;52540:77::-;52577:7;52606:5;52595:16;;52585:32;;;:::o;52623:149::-;52659:7;52699:66;52692:5;52688:78;52677:89;;52667:105;;;:::o;52778:89::-;52814:7;52854:6;52847:5;52843:18;52832:29;;52822:45;;;:::o;52873:126::-;52910:7;52950:42;52943:5;52939:54;52928:65;;52918:81;;;:::o;53005:77::-;53042:7;53071:5;53060:16;;53050:32;;;:::o;53088:101::-;53124:7;53164:18;53157:5;53153:30;53142:41;;53132:57;;;:::o;53195:154::-;53279:6;53274:3;53269;53256:30;53341:1;53332:6;53327:3;53323:16;53316:27;53246:103;;;:::o;53355:307::-;53423:1;53433:113;53447:6;53444:1;53441:13;53433:113;;;53532:1;53527:3;53523:11;53517:18;53513:1;53508:3;53504:11;53497:39;53469:2;53466:1;53462:10;53457:15;;53433:113;;;53564:6;53561:1;53558:13;53555:2;;;53644:1;53635:6;53630:3;53626:16;53619:27;53555:2;53404:258;;;;:::o;53668:320::-;53712:6;53749:1;53743:4;53739:12;53729:22;;53796:1;53790:4;53786:12;53817:18;53807:2;;53873:4;53865:6;53861:17;53851:27;;53807:2;53935;53927:6;53924:14;53904:18;53901:38;53898:2;;;53954:18;;:::i;:::-;53898:2;53719:269;;;;:::o;53994:281::-;54077:27;54099:4;54077:27;:::i;:::-;54069:6;54065:40;54207:6;54195:10;54192:22;54171:18;54159:10;54156:34;54153:62;54150:2;;;54218:18;;:::i;:::-;54150:2;54258:10;54254:2;54247:22;54037:238;;;:::o;54281:233::-;54320:3;54343:24;54361:5;54343:24;:::i;:::-;54334:33;;54389:66;54382:5;54379:77;54376:2;;;54459:18;;:::i;:::-;54376:2;54506:1;54499:5;54495:13;54488:20;;54324:190;;;:::o;54520:176::-;54552:1;54569:20;54587:1;54569:20;:::i;:::-;54564:25;;54603:20;54621:1;54603:20;:::i;:::-;54598:25;;54642:1;54632:2;;54647:18;;:::i;:::-;54632:2;54688:1;54685;54681:9;54676:14;;54554:142;;;;:::o;54702:180::-;54750:77;54747:1;54740:88;54847:4;54844:1;54837:15;54871:4;54868:1;54861:15;54888:180;54936:77;54933:1;54926:88;55033:4;55030:1;55023:15;55057:4;55054:1;55047:15;55074:180;55122:77;55119:1;55112:88;55219:4;55216:1;55209:15;55243:4;55240:1;55233:15;55260:180;55308:77;55305:1;55298:88;55405:4;55402:1;55395:15;55429:4;55426:1;55419:15;55446:102;55487:6;55538:2;55534:7;55529:2;55522:5;55518:14;55514:28;55504:38;;55494:54;;;:::o;55554:237::-;55694:34;55690:1;55682:6;55678:14;55671:58;55763:20;55758:2;55750:6;55746:15;55739:45;55660:131;:::o;55797:225::-;55937:34;55933:1;55925:6;55921:14;55914:58;56006:8;56001:2;55993:6;55989:15;55982:33;55903:119;:::o;56028:224::-;56168:34;56164:1;56156:6;56152:14;56145:58;56237:7;56232:2;56224:6;56220:15;56213:32;56134:118;:::o;56258:178::-;56398:30;56394:1;56386:6;56382:14;56375:54;56364:72;:::o;56442:230::-;56582:34;56578:1;56570:6;56566:14;56559:58;56651:13;56646:2;56638:6;56634:15;56627:38;56548:124;:::o;56678:221::-;56818:34;56814:1;56806:6;56802:14;56795:58;56887:4;56882:2;56874:6;56870:15;56863:29;56784:115;:::o;56905:223::-;57045:34;57041:1;57033:6;57029:14;57022:58;57114:6;57109:2;57101:6;57097:15;57090:31;57011:117;:::o;57134:175::-;57274:27;57270:1;57262:6;57258:14;57251:51;57240:69;:::o;57315:231::-;57455:34;57451:1;57443:6;57439:14;57432:58;57524:14;57519:2;57511:6;57507:15;57500:39;57421:125;:::o;57552:228::-;57692:34;57688:1;57680:6;57676:14;57669:58;57761:11;57756:2;57748:6;57744:15;57737:36;57658:122;:::o;57786:243::-;57926:34;57922:1;57914:6;57910:14;57903:58;57995:26;57990:2;57982:6;57978:15;57971:51;57892:137;:::o;58035:228::-;58175:34;58171:1;58163:6;58159:14;58152:58;58244:11;58239:2;58231:6;58227:15;58220:36;58141:122;:::o;58269:237::-;58409:34;58405:1;58397:6;58393:14;58386:58;58478:20;58473:2;58465:6;58461:15;58454:45;58375:131;:::o;58512:182::-;58652:34;58648:1;58640:6;58636:14;58629:58;58618:76;:::o;58700:182::-;58840:34;58836:1;58828:6;58824:14;58817:58;58806:76;:::o;58888:177::-;59028:29;59024:1;59016:6;59012:14;59005:53;58994:71;:::o;59071:231::-;59211:34;59207:1;59199:6;59195:14;59188:58;59280:14;59275:2;59267:6;59263:15;59256:39;59177:125;:::o;59308:179::-;59448:31;59444:1;59436:6;59432:14;59425:55;59414:73;:::o;59493:182::-;59633:34;59629:1;59621:6;59617:14;59610:58;59599:76;:::o;59681:234::-;59821:34;59817:1;59809:6;59805:14;59798:58;59890:17;59885:2;59877:6;59873:15;59866:42;59787:128;:::o;59921:220::-;60061:34;60057:1;60049:6;60045:14;60038:58;60130:3;60125:2;60117:6;60113:15;60106:28;60027:114;:::o;60147:236::-;60287:34;60283:1;60275:6;60271:14;60264:58;60356:19;60351:2;60343:6;60339:15;60332:44;60253:130;:::o;60389:177::-;60529:29;60525:1;60517:6;60513:14;60506:53;60495:71;:::o;60572:122::-;60645:24;60663:5;60645:24;:::i;:::-;60638:5;60635:35;60625:2;;60684:1;60681;60674:12;60625:2;60615:79;:::o;60700:138::-;60781:32;60807:5;60781:32;:::i;:::-;60774:5;60771:43;60761:2;;60828:1;60825;60818:12;60761:2;60751:87;:::o;60844:116::-;60914:21;60929:5;60914:21;:::i;:::-;60907:5;60904:32;60894:2;;60950:1;60947;60940:12;60894:2;60884:76;:::o;60966:120::-;61038:23;61055:5;61038:23;:::i;:::-;61031:5;61028:34;61018:2;;61076:1;61073;61066:12;61018:2;61008:78;:::o;61092:120::-;61164:23;61181:5;61164:23;:::i;:::-;61157:5;61154:34;61144:2;;61202:1;61199;61192:12;61144:2;61134:78;:::o;61218:122::-;61291:24;61309:5;61291:24;:::i;:::-;61284:5;61281:35;61271:2;;61330:1;61327;61320:12;61271:2;61261:79;:::o;61346:120::-;61418:23;61435:5;61418:23;:::i;:::-;61411:5;61408:34;61398:2;;61456:1;61453;61446:12;61398:2;61388:78;:::o
Swarm Source
ipfs://dde494778d79fe2a5e506655cd36ac53c2bfc2f002eb599934747e6bada8294f
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.