ERC-721
Overview
Max Total Supply
19 MVG
Holders
17
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 MVGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MetaV
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-01 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) 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); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); 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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: c3.sol /* ___ _____ / __\___ _ __ ___ _ __ __ _ _ __ _ _ |___ / | | / _ \| '_ ` _ \| '_ \ / _` | '_ \| | | | |_ \ | |__| (_) | | | | | | |_) | (_| | | | | |_| | ___) | \____/\___/|_| |_| |_| .__/ \__,_|_| |_|\__, | |____/ |_| |___/ */ pragma solidity >=0.8.0 <0.9.0; /** @title MetaV */ contract MetaV is ERC721Enumerable, Ownable { using Strings for uint256; struct Meta { uint256 affToken; } mapping (uint256 => Meta) public metas; mapping(address => uint256) public addressMintedBalance; string private baseURI; uint256 constant public maxSupply = 305; uint256 constant public maxMintPerWallet = 3; uint256 constant public maxMintAmount = 3; uint256 constant public maxGiftAmount = 25; uint256 constant public cost1 = 2 ether; uint256 constant public cost2 = 3.05 ether; uint256 constant public count2 = 101; uint256 constant public affiliatePercentage = 20; bool public paused = false; constructor(string memory _baseTokenURI) ERC721("MetaV Group", "MVG") { baseURI = _baseTokenURI; } event AffPaid(address _to, uint _amount); modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmount, "1"); require(totalSupply() + _mintAmount <= maxSupply, "2"); require(addressMintedBalance[msg.sender] + _mintAmount <= maxMintPerWallet, "3"); _; } /** @dev Mints MetaVs including affiliate payout * @param _affToken The MetaV NFT token of the referring affiliatr * @param _mintAmount The quantity to mint */ function mint(uint256 _affToken, uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "4"); uint256 amt; uint256 mintCost; mintCost = _mintTotal(_mintAmount); require(msg.value >= mintCost, "5"); _mintLoop(_mintAmount, _affToken); /// affiliate split payment amt = msg.value * affiliatePercentage / 100; if (amt > 0) { (bool hs, ) = payable(ownerOf(_affToken)).call{value: amt}(""); require(hs, "6"); emit AffPaid(ownerOf(_affToken), amt); } } function _mintLoop( uint256 _mintAmount, uint256 _affToken) internal { uint256 supply = totalSupply(); for (uint256 i = 1; i <= _mintAmount; i++) { Meta memory newMeta = Meta( _affToken ); metas[supply + i] = newMeta; addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } /** @dev Mints gas-free MetaVs and does not include affiliate payout. Only owner. * @param _receiver The address to mint to. * @param _mintAmount The quantity to mint. */ function mintGift(address _receiver, uint _mintAmount) external onlyOwner{ require(totalSupply()+_mintAmount-1 <= maxSupply, "7"); require(_mintAmount > 0 && _mintAmount <= maxGiftAmount, "8"); uint256 supply = totalSupply(); for (uint256 i = 1; i <= _mintAmount; i++) { Meta memory newMeta = Meta( 0 ); metas[supply + i] = newMeta; addressMintedBalance[_receiver]++; _safeMint(_receiver, supply + i); } } function burn(uint _tokenId) external { require(_isApprovedOrOwner(_msgSender(), _tokenId), "9"); _burn(_tokenId); } function tokenURI(uint _tokenId) public view virtual override returns (string memory) { require(_tokenId > 0 && _tokenId <= totalSupply(), "10"); require( _exists(_tokenId), "11"); return bytes(baseURI).length > 0 ? string( abi.encodePacked( baseURI, _tokenId.toString(), ".json" ) ) : ""; } function _mintTotal(uint256 _mintAmount) public view returns (uint256) { uint256 _total; uint256 _price2count; if (totalSupply() >= count2) { _total = cost2 * _mintAmount; } else if (totalSupply() + _mintAmount < count2) { _total = cost1 * _mintAmount; } else { _price2count = (totalSupply() + _mintAmount) - count2 + 1; _total = cost1 * (_mintAmount - _price2count) + cost2 * _price2count; } return _total; } function walletMintedCount(address wallet) public view returns (uint256) { return addressMintedBalance[wallet]; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"AffPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"_mintTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"affiliatePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"count2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGiftAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"metas","outputs":[{"internalType":"uint256","name":"affToken","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_affToken","type":"uint256"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintGift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"walletMintedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600e60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200502b3803806200502b83398181016040528101906200005291906200032e565b6040518060400160405280600b81526020017f4d657461562047726f75700000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d564700000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d692919062000200565b508060019080519060200190620000ef92919062000200565b50505062000112620001066200013260201b60201c565b6200013a60201b60201c565b80600d90805190602001906200012a92919062000200565b505062000503565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020e9062000414565b90600052602060002090601f0160209004810192826200023257600085556200027e565b82601f106200024d57805160ff19168380011785556200027e565b828001600101855582156200027e579182015b828111156200027d57825182559160200191906001019062000260565b5b5090506200028d919062000291565b5090565b5b80821115620002ac57600081600090555060010162000292565b5090565b6000620002c7620002c184620003a8565b6200037f565b905082815260208101848484011115620002e657620002e5620004e3565b5b620002f3848285620003de565b509392505050565b600082601f830112620003135762000312620004de565b5b815162000325848260208601620002b0565b91505092915050565b600060208284031215620003475762000346620004ed565b5b600082015167ffffffffffffffff811115620003685762000367620004e8565b5b6200037684828501620002fb565b91505092915050565b60006200038b6200039e565b90506200039982826200044a565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c657620003c5620004af565b5b620003d182620004f2565b9050602081019050919050565b60005b83811015620003fe578082015181840152602081019050620003e1565b838111156200040e576000848401525b50505050565b600060028204905060018216806200042d57607f821691505b6020821081141562000444576200044362000480565b5b50919050565b6200045582620004f2565b810181811067ffffffffffffffff82111715620004775762000476620004af565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b614b1880620005136000396000f3fe6080604052600436106102255760003560e01c8063489a0fdc1161012357806395d89b41116100ab578063b88d4fde1161006f578063b88d4fde14610815578063c87b56dd1461083e578063d5abeb011461087b578063e985e9c5146108a6578063f2fde38b146108e357610225565b806395d89b41146107405780639a1b28851461076b578063a22cb46514610796578063b228d925146107bf578063b8581083146107ea57610225565b80636352211e116100f25780636352211e1461065957806370a0823114610696578063715018a6146106d35780638da5cb5b146106ea57806391a575441461071557610225565b8063489a0fdc1461059f5780634f6ccce7146105c857806355f804b3146106055780635c975abb1461062e57610225565b8063239c70ae116101b157806333573dc21161017557806333573dc2146104db5780633b80d2b0146105065780633ccfd60b1461054357806342842e0e1461054d57806342966c681461057657610225565b8063239c70ae146103d057806323b872dd146103fb578063249f851b14610424578063277ecfbb146104615780632f745c591461049e57610225565b806316c38b3c116101f857806316c38b3c146102f857806318160ddd1461032157806318cae2691461034c5780631b2ef1ca146103895780631d63e24d146103a557610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906133fa565b61090c565b60405161025e9190613b47565b60405180910390f35b34801561027357600080fd5b5061027c610986565b6040516102899190613b62565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061349d565b610a18565b6040516102c69190613ab7565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f1919061338d565b610a9d565b005b34801561030457600080fd5b5061031f600480360381019061031a91906133cd565b610bb5565b005b34801561032d57600080fd5b50610336610c4e565b6040516103439190613f04565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e919061320a565b610c5b565b6040516103809190613f04565b60405180910390f35b6103a3600480360381019061039e91906134ca565b610c73565b005b3480156103b157600080fd5b506103ba610f76565b6040516103c79190613f04565b60405180910390f35b3480156103dc57600080fd5b506103e5610f7b565b6040516103f29190613f04565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190613277565b610f80565b005b34801561043057600080fd5b5061044b6004803603810190610446919061320a565b610fe0565b6040516104589190613f04565b60405180910390f35b34801561046d57600080fd5b506104886004803603810190610483919061349d565b611029565b6040516104959190613f04565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061338d565b611047565b6040516104d29190613f04565b60405180910390f35b3480156104e757600080fd5b506104f06110ec565b6040516104fd9190613f04565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061349d565b6110f8565b60405161053a9190613f04565b60405180910390f35b61054b6111d5565b005b34801561055957600080fd5b50610574600480360381019061056f9190613277565b6112d1565b005b34801561058257600080fd5b5061059d6004803603810190610598919061349d565b6112f1565b005b3480156105ab57600080fd5b506105c660048036038101906105c1919061338d565b61134d565b005b3480156105d457600080fd5b506105ef60048036038101906105ea919061349d565b61155a565b6040516105fc9190613f04565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613454565b6115cb565b005b34801561063a57600080fd5b50610643611661565b6040516106509190613b47565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b919061349d565b611674565b60405161068d9190613ab7565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b8919061320a565b611726565b6040516106ca9190613f04565b60405180910390f35b3480156106df57600080fd5b506106e86117de565b005b3480156106f657600080fd5b506106ff611866565b60405161070c9190613ab7565b60405180910390f35b34801561072157600080fd5b5061072a611890565b6040516107379190613f04565b60405180910390f35b34801561074c57600080fd5b50610755611895565b6040516107629190613b62565b60405180910390f35b34801561077757600080fd5b50610780611927565b60405161078d9190613f04565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b8919061334d565b611933565b005b3480156107cb57600080fd5b506107d4611949565b6040516107e19190613f04565b60405180910390f35b3480156107f657600080fd5b506107ff61194e565b60405161080c9190613f04565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906132ca565b611953565b005b34801561084a57600080fd5b506108656004803603810190610860919061349d565b6119b5565b6040516108729190613b62565b60405180910390f35b34801561088757600080fd5b50610890611ab3565b60405161089d9190613f04565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c89190613237565b611ab9565b6040516108da9190613b47565b60405180910390f35b3480156108ef57600080fd5b5061090a6004803603810190610905919061320a565b611b4d565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097f575061097e82611c45565b5b9050919050565b606060008054610995906141d4565b80601f01602080910402602001604051908101604052809291908181526020018280546109c1906141d4565b8015610a0e5780601f106109e357610100808354040283529160200191610a0e565b820191906000526020600020905b8154815290600101906020018083116109f157829003601f168201915b5050505050905090565b6000610a2382611d27565b610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613da4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa882611674565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613e04565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b38611d93565b73ffffffffffffffffffffffffffffffffffffffff161480610b675750610b6681610b61611d93565b611ab9565b5b610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90613d04565b60405180910390fd5b610bb08383611d9b565b505050565b610bbd611d93565b73ffffffffffffffffffffffffffffffffffffffff16610bdb611866565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890613dc4565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600880549050905090565b600c6020528060005260406000206000915090505481565b80600081118015610c85575060038111155b610cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbb90613e44565b60405180910390fd5b61013181610cd0610c4e565b610cda9190614009565b1115610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613de4565b60405180910390fd5b600381600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d689190614009565b1115610da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da090613c64565b60405180910390fd5b600e60009054906101000a900460ff1615610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090613b84565b60405180910390fd5b600080610e05846110f8565b905080341015610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4190613e64565b60405180910390fd5b610e548486611e54565b6064601434610e639190614090565b610e6d919061405f565b91506000821115610f6f576000610e8386611674565b73ffffffffffffffffffffffffffffffffffffffff1683604051610ea690613aa2565b60006040518083038185875af1925050503d8060008114610ee3576040519150601f19603f3d011682016040523d82523d6000602084013e610ee8565b606091505b5050905080610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390613ec4565b60405180910390fd5b7f51c498a91e3b1fe355954aef2ba87828ec8c1df14b8dfad940ddd4a9ea76b050610f5687611674565b84604051610f65929190613b1e565b60405180910390a1505b5050505050565b606581565b600381565b610f91610f8b611d93565b82611f31565b610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790613e24565b60405180910390fd5b610fdb83838361200f565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b6020528060005260406000206000915090508060000154905081565b600061105283611726565b8210611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613bc4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b671bc16d674ec8000081565b60008060006065611107610c4e565b106111275783672a53c6d724f100006111209190614090565b91506111cb565b606584611132610c4e565b61113c9190614009565b101561115d5783671bc16d674ec800006111569190614090565b91506111ca565b600160658561116a610c4e565b6111749190614009565b61117e91906140ea565b6111889190614009565b905080672a53c6d724f1000061119e9190614090565b81856111aa91906140ea565b671bc16d674ec800006111bd9190614090565b6111c79190614009565b91505b5b8192505050919050565b6111dd611d93565b73ffffffffffffffffffffffffffffffffffffffff166111fb611866565b73ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890613dc4565b60405180910390fd5b600061125b611866565b73ffffffffffffffffffffffffffffffffffffffff164760405161127e90613aa2565b60006040518083038185875af1925050503d80600081146112bb576040519150601f19603f3d011682016040523d82523d6000602084013e6112c0565b606091505b50509050806112ce57600080fd5b50565b6112ec83838360405180602001604052806000815250611953565b505050565b6113026112fc611d93565b82611f31565b611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890613ea4565b60405180910390fd5b61134a81612276565b50565b611355611d93565b73ffffffffffffffffffffffffffffffffffffffff16611373611866565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613dc4565b60405180910390fd5b6101316001826113d7610c4e565b6113e19190614009565b6113eb91906140ea565b111561142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390613cc4565b60405180910390fd5b60008111801561143d575060198111155b61147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390613ee4565b60405180910390fd5b6000611486610c4e565b90506000600190505b82811161155457600060405180602001604052806000815250905080600b600084866114bb9190614009565b815260200190815260200160002060008201518160000155905050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061152690614237565b919050555061154085838561153b9190614009565b612393565b50808061154c90614237565b91505061148f565b50505050565b6000611564610c4e565b82106115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613e84565b60405180910390fd5b600882815481106115b9576115b861436d565b5b90600052602060002001549050919050565b6115d3611d93565b73ffffffffffffffffffffffffffffffffffffffff166115f1611866565b73ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613dc4565b60405180910390fd5b80600d908051906020019061165d92919061301e565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490613d44565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90613d24565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117e6611d93565b73ffffffffffffffffffffffffffffffffffffffff16611804611866565b73ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613dc4565b60405180910390fd5b61186460006123b1565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601481565b6060600180546118a4906141d4565b80601f01602080910402602001604051908101604052809291908181526020018280546118d0906141d4565b801561191d5780601f106118f25761010080835404028352916020019161191d565b820191906000526020600020905b81548152906001019060200180831161190057829003601f168201915b5050505050905090565b672a53c6d724f1000081565b61194561193e611d93565b8383612477565b5050565b600381565b601981565b61196461195e611d93565b83611f31565b6119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613e24565b60405180910390fd5b6119af848484846125e4565b50505050565b60606000821180156119ce57506119ca610c4e565b8211155b611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490613ba4565b60405180910390fd5b611a1682611d27565b611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90613d64565b60405180910390fd5b6000600d8054611a64906141d4565b905011611a805760405180602001604052806000815250611aac565b600d611a8b83612640565b604051602001611a9c929190613a73565b6040516020818303038152906040525b9050919050565b61013181565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b55611d93565b73ffffffffffffffffffffffffffffffffffffffff16611b73611866565b73ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613dc4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3090613c04565b60405180910390fd5b611c42816123b1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d1057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d205750611d1f826127a1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e0e83611674565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e5e610c4e565b90506000600190505b838111611f2b576000604051806020016040528085815250905080600b60008486611e929190614009565b815260200190815260200160002060008201518160000155905050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611efd90614237565b9190505550611f17338385611f129190614009565b612393565b508080611f2390614237565b915050611e67565b50505050565b6000611f3c82611d27565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290613ce4565b60405180910390fd5b6000611f8683611674565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ff557508373ffffffffffffffffffffffffffffffffffffffff16611fdd84610a18565b73ffffffffffffffffffffffffffffffffffffffff16145b8061200657506120058185611ab9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661202f82611674565b73ffffffffffffffffffffffffffffffffffffffff1614612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90613c24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90613c84565b60405180910390fd5b61210083838361280b565b61210b600082611d9b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215b91906140ea565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b29190614009565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461227183838361291f565b505050565b600061228182611674565b905061228f8160008461280b565b61229a600083611d9b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122ea91906140ea565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461238f8160008461291f565b5050565b6123ad828260405180602001604052806000815250612924565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd90613ca4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125d79190613b47565b60405180910390a3505050565b6125ef84848461200f565b6125fb8484848461297f565b61263a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263190613be4565b60405180910390fd5b50505050565b60606000821415612688576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061279c565b600082905060005b600082146126ba5780806126a390614237565b915050600a826126b3919061405f565b9150612690565b60008167ffffffffffffffff8111156126d6576126d561439c565b5b6040519080825280601f01601f1916602001820160405280156127085781602001600182028036833780820191505090505b5090505b600085146127955760018261272191906140ea565b9150600a856127309190614280565b603061273c9190614009565b60f81b8183815181106127525761275161436d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561278e919061405f565b945061270c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612816838383612b16565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128595761285481612b1b565b612898565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612897576128968382612b64565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128db576128d681612cd1565b61291a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612919576129188282612da2565b5b5b505050565b505050565b61292e8383612e21565b61293b600084848461297f565b61297a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297190613be4565b60405180910390fd5b505050565b60006129a08473ffffffffffffffffffffffffffffffffffffffff16612ffb565b15612b09578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129c9611d93565b8786866040518563ffffffff1660e01b81526004016129eb9493929190613ad2565b602060405180830381600087803b158015612a0557600080fd5b505af1925050508015612a3657506040513d601f19601f82011682018060405250810190612a339190613427565b60015b612ab9573d8060008114612a66576040519150601f19603f3d011682016040523d82523d6000602084013e612a6b565b606091505b50600081511415612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa890613be4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b0e565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b7184611726565b612b7b91906140ea565b9050600060076000848152602001908152602001600020549050818114612c60576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ce591906140ea565b9050600060096000848152602001908152602001600020549050600060088381548110612d1557612d1461436d565b5b906000526020600020015490508060088381548110612d3757612d3661436d565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d8657612d8561433e565b5b6001900381819060005260206000200160009055905550505050565b6000612dad83611726565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8890613d84565b60405180910390fd5b612e9a81611d27565b15612eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed190613c44565b60405180910390fd5b612ee66000838361280b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f369190614009565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ff76000838361291f565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461302a906141d4565b90600052602060002090601f01602090048101928261304c5760008555613093565b82601f1061306557805160ff1916838001178555613093565b82800160010185558215613093579182015b82811115613092578251825591602001919060010190613077565b5b5090506130a091906130a4565b5090565b5b808211156130bd5760008160009055506001016130a5565b5090565b60006130d46130cf84613f44565b613f1f565b9050828152602081018484840111156130f0576130ef6143d0565b5b6130fb848285614192565b509392505050565b600061311661311184613f75565b613f1f565b905082815260208101848484011115613132576131316143d0565b5b61313d848285614192565b509392505050565b60008135905061315481614a86565b92915050565b60008135905061316981614a9d565b92915050565b60008135905061317e81614ab4565b92915050565b60008151905061319381614ab4565b92915050565b600082601f8301126131ae576131ad6143cb565b5b81356131be8482602086016130c1565b91505092915050565b600082601f8301126131dc576131db6143cb565b5b81356131ec848260208601613103565b91505092915050565b60008135905061320481614acb565b92915050565b6000602082840312156132205761321f6143da565b5b600061322e84828501613145565b91505092915050565b6000806040838503121561324e5761324d6143da565b5b600061325c85828601613145565b925050602061326d85828601613145565b9150509250929050565b6000806000606084860312156132905761328f6143da565b5b600061329e86828701613145565b93505060206132af86828701613145565b92505060406132c0868287016131f5565b9150509250925092565b600080600080608085870312156132e4576132e36143da565b5b60006132f287828801613145565b945050602061330387828801613145565b9350506040613314878288016131f5565b925050606085013567ffffffffffffffff811115613335576133346143d5565b5b61334187828801613199565b91505092959194509250565b60008060408385031215613364576133636143da565b5b600061337285828601613145565b92505060206133838582860161315a565b9150509250929050565b600080604083850312156133a4576133a36143da565b5b60006133b285828601613145565b92505060206133c3858286016131f5565b9150509250929050565b6000602082840312156133e3576133e26143da565b5b60006133f18482850161315a565b91505092915050565b6000602082840312156134105761340f6143da565b5b600061341e8482850161316f565b91505092915050565b60006020828403121561343d5761343c6143da565b5b600061344b84828501613184565b91505092915050565b60006020828403121561346a576134696143da565b5b600082013567ffffffffffffffff811115613488576134876143d5565b5b613494848285016131c7565b91505092915050565b6000602082840312156134b3576134b26143da565b5b60006134c1848285016131f5565b91505092915050565b600080604083850312156134e1576134e06143da565b5b60006134ef858286016131f5565b9250506020613500858286016131f5565b9150509250929050565b6135138161411e565b82525050565b61352281614130565b82525050565b600061353382613fbb565b61353d8185613fd1565b935061354d8185602086016141a1565b613556816143df565b840191505092915050565b600061356c82613fc6565b6135768185613fed565b93506135868185602086016141a1565b61358f816143df565b840191505092915050565b60006135a582613fc6565b6135af8185613ffe565b93506135bf8185602086016141a1565b80840191505092915050565b600081546135d8816141d4565b6135e28186613ffe565b945060018216600081146135fd576001811461360e57613641565b60ff19831686528186019350613641565b61361785613fa6565b60005b838110156136395781548189015260018201915060208101905061361a565b838801955050505b50505092915050565b6000613657600183613fed565b9150613662826143f0565b602082019050919050565b600061367a600283613fed565b915061368582614419565b602082019050919050565b600061369d602b83613fed565b91506136a882614442565b604082019050919050565b60006136c0603283613fed565b91506136cb82614491565b604082019050919050565b60006136e3602683613fed565b91506136ee826144e0565b604082019050919050565b6000613706602583613fed565b91506137118261452f565b604082019050919050565b6000613729601c83613fed565b91506137348261457e565b602082019050919050565b600061374c600183613fed565b9150613757826145a7565b602082019050919050565b600061376f602483613fed565b915061377a826145d0565b604082019050919050565b6000613792601983613fed565b915061379d8261461f565b602082019050919050565b60006137b5600183613fed565b91506137c082614648565b602082019050919050565b60006137d8602c83613fed565b91506137e382614671565b604082019050919050565b60006137fb603883613fed565b9150613806826146c0565b604082019050919050565b600061381e602a83613fed565b91506138298261470f565b604082019050919050565b6000613841602983613fed565b915061384c8261475e565b604082019050919050565b6000613864600283613fed565b915061386f826147ad565b602082019050919050565b6000613887602083613fed565b9150613892826147d6565b602082019050919050565b60006138aa602c83613fed565b91506138b5826147ff565b604082019050919050565b60006138cd600583613ffe565b91506138d88261484e565b600582019050919050565b60006138f0602083613fed565b91506138fb82614877565b602082019050919050565b6000613913600183613fed565b915061391e826148a0565b602082019050919050565b6000613936602183613fed565b9150613941826148c9565b604082019050919050565b6000613959600083613fe2565b915061396482614918565b600082019050919050565b600061397c603183613fed565b91506139878261491b565b604082019050919050565b600061399f600183613fed565b91506139aa8261496a565b602082019050919050565b60006139c2600183613fed565b91506139cd82614993565b602082019050919050565b60006139e5602c83613fed565b91506139f0826149bc565b604082019050919050565b6000613a08600183613fed565b9150613a1382614a0b565b602082019050919050565b6000613a2b600183613fed565b9150613a3682614a34565b602082019050919050565b6000613a4e600183613fed565b9150613a5982614a5d565b602082019050919050565b613a6d81614188565b82525050565b6000613a7f82856135cb565b9150613a8b828461359a565b9150613a96826138c0565b91508190509392505050565b6000613aad8261394c565b9150819050919050565b6000602082019050613acc600083018461350a565b92915050565b6000608082019050613ae7600083018761350a565b613af4602083018661350a565b613b016040830185613a64565b8181036060830152613b138184613528565b905095945050505050565b6000604082019050613b33600083018561350a565b613b406020830184613a64565b9392505050565b6000602082019050613b5c6000830184613519565b92915050565b60006020820190508181036000830152613b7c8184613561565b905092915050565b60006020820190508181036000830152613b9d8161364a565b9050919050565b60006020820190508181036000830152613bbd8161366d565b9050919050565b60006020820190508181036000830152613bdd81613690565b9050919050565b60006020820190508181036000830152613bfd816136b3565b9050919050565b60006020820190508181036000830152613c1d816136d6565b9050919050565b60006020820190508181036000830152613c3d816136f9565b9050919050565b60006020820190508181036000830152613c5d8161371c565b9050919050565b60006020820190508181036000830152613c7d8161373f565b9050919050565b60006020820190508181036000830152613c9d81613762565b9050919050565b60006020820190508181036000830152613cbd81613785565b9050919050565b60006020820190508181036000830152613cdd816137a8565b9050919050565b60006020820190508181036000830152613cfd816137cb565b9050919050565b60006020820190508181036000830152613d1d816137ee565b9050919050565b60006020820190508181036000830152613d3d81613811565b9050919050565b60006020820190508181036000830152613d5d81613834565b9050919050565b60006020820190508181036000830152613d7d81613857565b9050919050565b60006020820190508181036000830152613d9d8161387a565b9050919050565b60006020820190508181036000830152613dbd8161389d565b9050919050565b60006020820190508181036000830152613ddd816138e3565b9050919050565b60006020820190508181036000830152613dfd81613906565b9050919050565b60006020820190508181036000830152613e1d81613929565b9050919050565b60006020820190508181036000830152613e3d8161396f565b9050919050565b60006020820190508181036000830152613e5d81613992565b9050919050565b60006020820190508181036000830152613e7d816139b5565b9050919050565b60006020820190508181036000830152613e9d816139d8565b9050919050565b60006020820190508181036000830152613ebd816139fb565b9050919050565b60006020820190508181036000830152613edd81613a1e565b9050919050565b60006020820190508181036000830152613efd81613a41565b9050919050565b6000602082019050613f196000830184613a64565b92915050565b6000613f29613f3a565b9050613f358282614206565b919050565b6000604051905090565b600067ffffffffffffffff821115613f5f57613f5e61439c565b5b613f68826143df565b9050602081019050919050565b600067ffffffffffffffff821115613f9057613f8f61439c565b5b613f99826143df565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061401482614188565b915061401f83614188565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614054576140536142b1565b5b828201905092915050565b600061406a82614188565b915061407583614188565b925082614085576140846142e0565b5b828204905092915050565b600061409b82614188565b91506140a683614188565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140df576140de6142b1565b5b828202905092915050565b60006140f582614188565b915061410083614188565b925082821015614113576141126142b1565b5b828203905092915050565b600061412982614168565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141bf5780820151818401526020810190506141a4565b838111156141ce576000848401525b50505050565b600060028204905060018216806141ec57607f821691505b60208210811415614200576141ff61430f565b5b50919050565b61420f826143df565b810181811067ffffffffffffffff8211171561422e5761422d61439c565b5b80604052505050565b600061424282614188565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614275576142746142b1565b5b600182019050919050565b600061428b82614188565b915061429683614188565b9250826142a6576142a56142e0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f3400000000000000000000000000000000000000000000000000000000000000600082015250565b7f3130000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f3300000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f3700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f3131000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f3200000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f3100000000000000000000000000000000000000000000000000000000000000600082015250565b7f3500000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f3900000000000000000000000000000000000000000000000000000000000000600082015250565b7f3600000000000000000000000000000000000000000000000000000000000000600082015250565b7f3800000000000000000000000000000000000000000000000000000000000000600082015250565b614a8f8161411e565b8114614a9a57600080fd5b50565b614aa681614130565b8114614ab157600080fd5b50565b614abd8161413c565b8114614ac857600080fd5b50565b614ad481614188565b8114614adf57600080fd5b5056fea2646970667358221220f0383148b3edc231edb66996bcc4e70e716555c614f49cb0be6cbc0175f02b3264736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f6d657461762e6d7970696e6174612e636c6f75642f697066732f516d5474637578566e3943625637376851713470317252755938613475484c57724c5642376f47614131434c6a372f000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102255760003560e01c8063489a0fdc1161012357806395d89b41116100ab578063b88d4fde1161006f578063b88d4fde14610815578063c87b56dd1461083e578063d5abeb011461087b578063e985e9c5146108a6578063f2fde38b146108e357610225565b806395d89b41146107405780639a1b28851461076b578063a22cb46514610796578063b228d925146107bf578063b8581083146107ea57610225565b80636352211e116100f25780636352211e1461065957806370a0823114610696578063715018a6146106d35780638da5cb5b146106ea57806391a575441461071557610225565b8063489a0fdc1461059f5780634f6ccce7146105c857806355f804b3146106055780635c975abb1461062e57610225565b8063239c70ae116101b157806333573dc21161017557806333573dc2146104db5780633b80d2b0146105065780633ccfd60b1461054357806342842e0e1461054d57806342966c681461057657610225565b8063239c70ae146103d057806323b872dd146103fb578063249f851b14610424578063277ecfbb146104615780632f745c591461049e57610225565b806316c38b3c116101f857806316c38b3c146102f857806318160ddd1461032157806318cae2691461034c5780631b2ef1ca146103895780631d63e24d146103a557610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906133fa565b61090c565b60405161025e9190613b47565b60405180910390f35b34801561027357600080fd5b5061027c610986565b6040516102899190613b62565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061349d565b610a18565b6040516102c69190613ab7565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f1919061338d565b610a9d565b005b34801561030457600080fd5b5061031f600480360381019061031a91906133cd565b610bb5565b005b34801561032d57600080fd5b50610336610c4e565b6040516103439190613f04565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e919061320a565b610c5b565b6040516103809190613f04565b60405180910390f35b6103a3600480360381019061039e91906134ca565b610c73565b005b3480156103b157600080fd5b506103ba610f76565b6040516103c79190613f04565b60405180910390f35b3480156103dc57600080fd5b506103e5610f7b565b6040516103f29190613f04565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190613277565b610f80565b005b34801561043057600080fd5b5061044b6004803603810190610446919061320a565b610fe0565b6040516104589190613f04565b60405180910390f35b34801561046d57600080fd5b506104886004803603810190610483919061349d565b611029565b6040516104959190613f04565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061338d565b611047565b6040516104d29190613f04565b60405180910390f35b3480156104e757600080fd5b506104f06110ec565b6040516104fd9190613f04565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061349d565b6110f8565b60405161053a9190613f04565b60405180910390f35b61054b6111d5565b005b34801561055957600080fd5b50610574600480360381019061056f9190613277565b6112d1565b005b34801561058257600080fd5b5061059d6004803603810190610598919061349d565b6112f1565b005b3480156105ab57600080fd5b506105c660048036038101906105c1919061338d565b61134d565b005b3480156105d457600080fd5b506105ef60048036038101906105ea919061349d565b61155a565b6040516105fc9190613f04565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613454565b6115cb565b005b34801561063a57600080fd5b50610643611661565b6040516106509190613b47565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b919061349d565b611674565b60405161068d9190613ab7565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b8919061320a565b611726565b6040516106ca9190613f04565b60405180910390f35b3480156106df57600080fd5b506106e86117de565b005b3480156106f657600080fd5b506106ff611866565b60405161070c9190613ab7565b60405180910390f35b34801561072157600080fd5b5061072a611890565b6040516107379190613f04565b60405180910390f35b34801561074c57600080fd5b50610755611895565b6040516107629190613b62565b60405180910390f35b34801561077757600080fd5b50610780611927565b60405161078d9190613f04565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b8919061334d565b611933565b005b3480156107cb57600080fd5b506107d4611949565b6040516107e19190613f04565b60405180910390f35b3480156107f657600080fd5b506107ff61194e565b60405161080c9190613f04565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906132ca565b611953565b005b34801561084a57600080fd5b506108656004803603810190610860919061349d565b6119b5565b6040516108729190613b62565b60405180910390f35b34801561088757600080fd5b50610890611ab3565b60405161089d9190613f04565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c89190613237565b611ab9565b6040516108da9190613b47565b60405180910390f35b3480156108ef57600080fd5b5061090a6004803603810190610905919061320a565b611b4d565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097f575061097e82611c45565b5b9050919050565b606060008054610995906141d4565b80601f01602080910402602001604051908101604052809291908181526020018280546109c1906141d4565b8015610a0e5780601f106109e357610100808354040283529160200191610a0e565b820191906000526020600020905b8154815290600101906020018083116109f157829003601f168201915b5050505050905090565b6000610a2382611d27565b610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613da4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa882611674565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613e04565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b38611d93565b73ffffffffffffffffffffffffffffffffffffffff161480610b675750610b6681610b61611d93565b611ab9565b5b610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90613d04565b60405180910390fd5b610bb08383611d9b565b505050565b610bbd611d93565b73ffffffffffffffffffffffffffffffffffffffff16610bdb611866565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890613dc4565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600880549050905090565b600c6020528060005260406000206000915090505481565b80600081118015610c85575060038111155b610cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbb90613e44565b60405180910390fd5b61013181610cd0610c4e565b610cda9190614009565b1115610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613de4565b60405180910390fd5b600381600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d689190614009565b1115610da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da090613c64565b60405180910390fd5b600e60009054906101000a900460ff1615610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090613b84565b60405180910390fd5b600080610e05846110f8565b905080341015610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4190613e64565b60405180910390fd5b610e548486611e54565b6064601434610e639190614090565b610e6d919061405f565b91506000821115610f6f576000610e8386611674565b73ffffffffffffffffffffffffffffffffffffffff1683604051610ea690613aa2565b60006040518083038185875af1925050503d8060008114610ee3576040519150601f19603f3d011682016040523d82523d6000602084013e610ee8565b606091505b5050905080610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390613ec4565b60405180910390fd5b7f51c498a91e3b1fe355954aef2ba87828ec8c1df14b8dfad940ddd4a9ea76b050610f5687611674565b84604051610f65929190613b1e565b60405180910390a1505b5050505050565b606581565b600381565b610f91610f8b611d93565b82611f31565b610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790613e24565b60405180910390fd5b610fdb83838361200f565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b6020528060005260406000206000915090508060000154905081565b600061105283611726565b8210611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613bc4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b671bc16d674ec8000081565b60008060006065611107610c4e565b106111275783672a53c6d724f100006111209190614090565b91506111cb565b606584611132610c4e565b61113c9190614009565b101561115d5783671bc16d674ec800006111569190614090565b91506111ca565b600160658561116a610c4e565b6111749190614009565b61117e91906140ea565b6111889190614009565b905080672a53c6d724f1000061119e9190614090565b81856111aa91906140ea565b671bc16d674ec800006111bd9190614090565b6111c79190614009565b91505b5b8192505050919050565b6111dd611d93565b73ffffffffffffffffffffffffffffffffffffffff166111fb611866565b73ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890613dc4565b60405180910390fd5b600061125b611866565b73ffffffffffffffffffffffffffffffffffffffff164760405161127e90613aa2565b60006040518083038185875af1925050503d80600081146112bb576040519150601f19603f3d011682016040523d82523d6000602084013e6112c0565b606091505b50509050806112ce57600080fd5b50565b6112ec83838360405180602001604052806000815250611953565b505050565b6113026112fc611d93565b82611f31565b611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890613ea4565b60405180910390fd5b61134a81612276565b50565b611355611d93565b73ffffffffffffffffffffffffffffffffffffffff16611373611866565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613dc4565b60405180910390fd5b6101316001826113d7610c4e565b6113e19190614009565b6113eb91906140ea565b111561142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390613cc4565b60405180910390fd5b60008111801561143d575060198111155b61147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390613ee4565b60405180910390fd5b6000611486610c4e565b90506000600190505b82811161155457600060405180602001604052806000815250905080600b600084866114bb9190614009565b815260200190815260200160002060008201518160000155905050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061152690614237565b919050555061154085838561153b9190614009565b612393565b50808061154c90614237565b91505061148f565b50505050565b6000611564610c4e565b82106115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613e84565b60405180910390fd5b600882815481106115b9576115b861436d565b5b90600052602060002001549050919050565b6115d3611d93565b73ffffffffffffffffffffffffffffffffffffffff166115f1611866565b73ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613dc4565b60405180910390fd5b80600d908051906020019061165d92919061301e565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490613d44565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90613d24565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117e6611d93565b73ffffffffffffffffffffffffffffffffffffffff16611804611866565b73ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613dc4565b60405180910390fd5b61186460006123b1565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601481565b6060600180546118a4906141d4565b80601f01602080910402602001604051908101604052809291908181526020018280546118d0906141d4565b801561191d5780601f106118f25761010080835404028352916020019161191d565b820191906000526020600020905b81548152906001019060200180831161190057829003601f168201915b5050505050905090565b672a53c6d724f1000081565b61194561193e611d93565b8383612477565b5050565b600381565b601981565b61196461195e611d93565b83611f31565b6119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613e24565b60405180910390fd5b6119af848484846125e4565b50505050565b60606000821180156119ce57506119ca610c4e565b8211155b611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490613ba4565b60405180910390fd5b611a1682611d27565b611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90613d64565b60405180910390fd5b6000600d8054611a64906141d4565b905011611a805760405180602001604052806000815250611aac565b600d611a8b83612640565b604051602001611a9c929190613a73565b6040516020818303038152906040525b9050919050565b61013181565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b55611d93565b73ffffffffffffffffffffffffffffffffffffffff16611b73611866565b73ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613dc4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3090613c04565b60405180910390fd5b611c42816123b1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d1057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d205750611d1f826127a1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e0e83611674565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e5e610c4e565b90506000600190505b838111611f2b576000604051806020016040528085815250905080600b60008486611e929190614009565b815260200190815260200160002060008201518160000155905050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611efd90614237565b9190505550611f17338385611f129190614009565b612393565b508080611f2390614237565b915050611e67565b50505050565b6000611f3c82611d27565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290613ce4565b60405180910390fd5b6000611f8683611674565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ff557508373ffffffffffffffffffffffffffffffffffffffff16611fdd84610a18565b73ffffffffffffffffffffffffffffffffffffffff16145b8061200657506120058185611ab9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661202f82611674565b73ffffffffffffffffffffffffffffffffffffffff1614612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90613c24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90613c84565b60405180910390fd5b61210083838361280b565b61210b600082611d9b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215b91906140ea565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b29190614009565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461227183838361291f565b505050565b600061228182611674565b905061228f8160008461280b565b61229a600083611d9b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122ea91906140ea565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461238f8160008461291f565b5050565b6123ad828260405180602001604052806000815250612924565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd90613ca4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125d79190613b47565b60405180910390a3505050565b6125ef84848461200f565b6125fb8484848461297f565b61263a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263190613be4565b60405180910390fd5b50505050565b60606000821415612688576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061279c565b600082905060005b600082146126ba5780806126a390614237565b915050600a826126b3919061405f565b9150612690565b60008167ffffffffffffffff8111156126d6576126d561439c565b5b6040519080825280601f01601f1916602001820160405280156127085781602001600182028036833780820191505090505b5090505b600085146127955760018261272191906140ea565b9150600a856127309190614280565b603061273c9190614009565b60f81b8183815181106127525761275161436d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561278e919061405f565b945061270c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612816838383612b16565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128595761285481612b1b565b612898565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612897576128968382612b64565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128db576128d681612cd1565b61291a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612919576129188282612da2565b5b5b505050565b505050565b61292e8383612e21565b61293b600084848461297f565b61297a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297190613be4565b60405180910390fd5b505050565b60006129a08473ffffffffffffffffffffffffffffffffffffffff16612ffb565b15612b09578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129c9611d93565b8786866040518563ffffffff1660e01b81526004016129eb9493929190613ad2565b602060405180830381600087803b158015612a0557600080fd5b505af1925050508015612a3657506040513d601f19601f82011682018060405250810190612a339190613427565b60015b612ab9573d8060008114612a66576040519150601f19603f3d011682016040523d82523d6000602084013e612a6b565b606091505b50600081511415612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa890613be4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b0e565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b7184611726565b612b7b91906140ea565b9050600060076000848152602001908152602001600020549050818114612c60576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ce591906140ea565b9050600060096000848152602001908152602001600020549050600060088381548110612d1557612d1461436d565b5b906000526020600020015490508060088381548110612d3757612d3661436d565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d8657612d8561433e565b5b6001900381819060005260206000200160009055905550505050565b6000612dad83611726565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8890613d84565b60405180910390fd5b612e9a81611d27565b15612eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed190613c44565b60405180910390fd5b612ee66000838361280b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f369190614009565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ff76000838361291f565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461302a906141d4565b90600052602060002090601f01602090048101928261304c5760008555613093565b82601f1061306557805160ff1916838001178555613093565b82800160010185558215613093579182015b82811115613092578251825591602001919060010190613077565b5b5090506130a091906130a4565b5090565b5b808211156130bd5760008160009055506001016130a5565b5090565b60006130d46130cf84613f44565b613f1f565b9050828152602081018484840111156130f0576130ef6143d0565b5b6130fb848285614192565b509392505050565b600061311661311184613f75565b613f1f565b905082815260208101848484011115613132576131316143d0565b5b61313d848285614192565b509392505050565b60008135905061315481614a86565b92915050565b60008135905061316981614a9d565b92915050565b60008135905061317e81614ab4565b92915050565b60008151905061319381614ab4565b92915050565b600082601f8301126131ae576131ad6143cb565b5b81356131be8482602086016130c1565b91505092915050565b600082601f8301126131dc576131db6143cb565b5b81356131ec848260208601613103565b91505092915050565b60008135905061320481614acb565b92915050565b6000602082840312156132205761321f6143da565b5b600061322e84828501613145565b91505092915050565b6000806040838503121561324e5761324d6143da565b5b600061325c85828601613145565b925050602061326d85828601613145565b9150509250929050565b6000806000606084860312156132905761328f6143da565b5b600061329e86828701613145565b93505060206132af86828701613145565b92505060406132c0868287016131f5565b9150509250925092565b600080600080608085870312156132e4576132e36143da565b5b60006132f287828801613145565b945050602061330387828801613145565b9350506040613314878288016131f5565b925050606085013567ffffffffffffffff811115613335576133346143d5565b5b61334187828801613199565b91505092959194509250565b60008060408385031215613364576133636143da565b5b600061337285828601613145565b92505060206133838582860161315a565b9150509250929050565b600080604083850312156133a4576133a36143da565b5b60006133b285828601613145565b92505060206133c3858286016131f5565b9150509250929050565b6000602082840312156133e3576133e26143da565b5b60006133f18482850161315a565b91505092915050565b6000602082840312156134105761340f6143da565b5b600061341e8482850161316f565b91505092915050565b60006020828403121561343d5761343c6143da565b5b600061344b84828501613184565b91505092915050565b60006020828403121561346a576134696143da565b5b600082013567ffffffffffffffff811115613488576134876143d5565b5b613494848285016131c7565b91505092915050565b6000602082840312156134b3576134b26143da565b5b60006134c1848285016131f5565b91505092915050565b600080604083850312156134e1576134e06143da565b5b60006134ef858286016131f5565b9250506020613500858286016131f5565b9150509250929050565b6135138161411e565b82525050565b61352281614130565b82525050565b600061353382613fbb565b61353d8185613fd1565b935061354d8185602086016141a1565b613556816143df565b840191505092915050565b600061356c82613fc6565b6135768185613fed565b93506135868185602086016141a1565b61358f816143df565b840191505092915050565b60006135a582613fc6565b6135af8185613ffe565b93506135bf8185602086016141a1565b80840191505092915050565b600081546135d8816141d4565b6135e28186613ffe565b945060018216600081146135fd576001811461360e57613641565b60ff19831686528186019350613641565b61361785613fa6565b60005b838110156136395781548189015260018201915060208101905061361a565b838801955050505b50505092915050565b6000613657600183613fed565b9150613662826143f0565b602082019050919050565b600061367a600283613fed565b915061368582614419565b602082019050919050565b600061369d602b83613fed565b91506136a882614442565b604082019050919050565b60006136c0603283613fed565b91506136cb82614491565b604082019050919050565b60006136e3602683613fed565b91506136ee826144e0565b604082019050919050565b6000613706602583613fed565b91506137118261452f565b604082019050919050565b6000613729601c83613fed565b91506137348261457e565b602082019050919050565b600061374c600183613fed565b9150613757826145a7565b602082019050919050565b600061376f602483613fed565b915061377a826145d0565b604082019050919050565b6000613792601983613fed565b915061379d8261461f565b602082019050919050565b60006137b5600183613fed565b91506137c082614648565b602082019050919050565b60006137d8602c83613fed565b91506137e382614671565b604082019050919050565b60006137fb603883613fed565b9150613806826146c0565b604082019050919050565b600061381e602a83613fed565b91506138298261470f565b604082019050919050565b6000613841602983613fed565b915061384c8261475e565b604082019050919050565b6000613864600283613fed565b915061386f826147ad565b602082019050919050565b6000613887602083613fed565b9150613892826147d6565b602082019050919050565b60006138aa602c83613fed565b91506138b5826147ff565b604082019050919050565b60006138cd600583613ffe565b91506138d88261484e565b600582019050919050565b60006138f0602083613fed565b91506138fb82614877565b602082019050919050565b6000613913600183613fed565b915061391e826148a0565b602082019050919050565b6000613936602183613fed565b9150613941826148c9565b604082019050919050565b6000613959600083613fe2565b915061396482614918565b600082019050919050565b600061397c603183613fed565b91506139878261491b565b604082019050919050565b600061399f600183613fed565b91506139aa8261496a565b602082019050919050565b60006139c2600183613fed565b91506139cd82614993565b602082019050919050565b60006139e5602c83613fed565b91506139f0826149bc565b604082019050919050565b6000613a08600183613fed565b9150613a1382614a0b565b602082019050919050565b6000613a2b600183613fed565b9150613a3682614a34565b602082019050919050565b6000613a4e600183613fed565b9150613a5982614a5d565b602082019050919050565b613a6d81614188565b82525050565b6000613a7f82856135cb565b9150613a8b828461359a565b9150613a96826138c0565b91508190509392505050565b6000613aad8261394c565b9150819050919050565b6000602082019050613acc600083018461350a565b92915050565b6000608082019050613ae7600083018761350a565b613af4602083018661350a565b613b016040830185613a64565b8181036060830152613b138184613528565b905095945050505050565b6000604082019050613b33600083018561350a565b613b406020830184613a64565b9392505050565b6000602082019050613b5c6000830184613519565b92915050565b60006020820190508181036000830152613b7c8184613561565b905092915050565b60006020820190508181036000830152613b9d8161364a565b9050919050565b60006020820190508181036000830152613bbd8161366d565b9050919050565b60006020820190508181036000830152613bdd81613690565b9050919050565b60006020820190508181036000830152613bfd816136b3565b9050919050565b60006020820190508181036000830152613c1d816136d6565b9050919050565b60006020820190508181036000830152613c3d816136f9565b9050919050565b60006020820190508181036000830152613c5d8161371c565b9050919050565b60006020820190508181036000830152613c7d8161373f565b9050919050565b60006020820190508181036000830152613c9d81613762565b9050919050565b60006020820190508181036000830152613cbd81613785565b9050919050565b60006020820190508181036000830152613cdd816137a8565b9050919050565b60006020820190508181036000830152613cfd816137cb565b9050919050565b60006020820190508181036000830152613d1d816137ee565b9050919050565b60006020820190508181036000830152613d3d81613811565b9050919050565b60006020820190508181036000830152613d5d81613834565b9050919050565b60006020820190508181036000830152613d7d81613857565b9050919050565b60006020820190508181036000830152613d9d8161387a565b9050919050565b60006020820190508181036000830152613dbd8161389d565b9050919050565b60006020820190508181036000830152613ddd816138e3565b9050919050565b60006020820190508181036000830152613dfd81613906565b9050919050565b60006020820190508181036000830152613e1d81613929565b9050919050565b60006020820190508181036000830152613e3d8161396f565b9050919050565b60006020820190508181036000830152613e5d81613992565b9050919050565b60006020820190508181036000830152613e7d816139b5565b9050919050565b60006020820190508181036000830152613e9d816139d8565b9050919050565b60006020820190508181036000830152613ebd816139fb565b9050919050565b60006020820190508181036000830152613edd81613a1e565b9050919050565b60006020820190508181036000830152613efd81613a41565b9050919050565b6000602082019050613f196000830184613a64565b92915050565b6000613f29613f3a565b9050613f358282614206565b919050565b6000604051905090565b600067ffffffffffffffff821115613f5f57613f5e61439c565b5b613f68826143df565b9050602081019050919050565b600067ffffffffffffffff821115613f9057613f8f61439c565b5b613f99826143df565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061401482614188565b915061401f83614188565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614054576140536142b1565b5b828201905092915050565b600061406a82614188565b915061407583614188565b925082614085576140846142e0565b5b828204905092915050565b600061409b82614188565b91506140a683614188565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140df576140de6142b1565b5b828202905092915050565b60006140f582614188565b915061410083614188565b925082821015614113576141126142b1565b5b828203905092915050565b600061412982614168565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141bf5780820151818401526020810190506141a4565b838111156141ce576000848401525b50505050565b600060028204905060018216806141ec57607f821691505b60208210811415614200576141ff61430f565b5b50919050565b61420f826143df565b810181811067ffffffffffffffff8211171561422e5761422d61439c565b5b80604052505050565b600061424282614188565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614275576142746142b1565b5b600182019050919050565b600061428b82614188565b915061429683614188565b9250826142a6576142a56142e0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f3400000000000000000000000000000000000000000000000000000000000000600082015250565b7f3130000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f3300000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f3700000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f3131000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f3200000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f3100000000000000000000000000000000000000000000000000000000000000600082015250565b7f3500000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f3900000000000000000000000000000000000000000000000000000000000000600082015250565b7f3600000000000000000000000000000000000000000000000000000000000000600082015250565b7f3800000000000000000000000000000000000000000000000000000000000000600082015250565b614a8f8161411e565b8114614a9a57600080fd5b50565b614aa681614130565b8114614ab157600080fd5b50565b614abd8161413c565b8114614ac857600080fd5b50565b614ad481614188565b8114614adf57600080fd5b5056fea2646970667358221220f0383148b3edc231edb66996bcc4e70e716555c614f49cb0be6cbc0175f02b3264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f6d657461762e6d7970696e6174612e636c6f75642f697066732f516d5474637578566e3943625637376851713470317252755938613475484c57724c5642376f47614131434c6a372f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseTokenURI (string): https://metav.mypinata.cloud/ipfs/QmTtcuxVn9CbV77hQq4p1rRuY8a4uHLWrLVB7oGaA1CLj7/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [2] : 68747470733a2f2f6d657461762e6d7970696e6174612e636c6f75642f697066
Arg [3] : 732f516d5474637578566e394362563737685171347031725275593861347548
Arg [4] : 4c57724c5642376f47614131434c6a372f000000000000000000000000000000
Deployed Bytecode Sourcemap
45905:4402:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39314:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26134:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27693:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27216:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49976:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39954:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46077:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47201:552;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46443:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46259:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28443:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49851:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46034:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39622:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46352:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49362:485;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50159:145;;;:::i;:::-;;28853:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48797:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48314:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40144:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50057:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46537:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25828:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25558:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46484:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26303:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46396:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27986:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46210:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46305:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29109:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48931:427;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46164:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28212:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39314:224;39416:4;39455:35;39440:50;;;:11;:50;;;;:90;;;;39494:36;39518:11;39494:23;:36::i;:::-;39440:90;39433:97;;39314:224;;;:::o;26134:100::-;26188:13;26221:5;26214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26134:100;:::o;27693:221::-;27769:7;27797:16;27805:7;27797;:16::i;:::-;27789:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27882:15;:24;27898:7;27882:24;;;;;;;;;;;;;;;;;;;;;27875:31;;27693:221;;;:::o;27216:411::-;27297:13;27313:23;27328:7;27313:14;:23::i;:::-;27297:39;;27361:5;27355:11;;:2;:11;;;;27347:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27455:5;27439:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27464:37;27481:5;27488:12;:10;:12::i;:::-;27464:16;:37::i;:::-;27439:62;27417:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27598:21;27607:2;27611:7;27598:8;:21::i;:::-;27286:341;27216:411;;:::o;49976:77::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50041:6:::1;50032;;:15;;;;;;;;;;;;;;;;;;49976:77:::0;:::o;39954:113::-;40015:7;40042:10;:17;;;;40035:24;;39954:113;:::o;46077:55::-;;;;;;;;;;;;;;;;;:::o;47201:552::-;47285:11;46805:1;46791:11;:15;:47;;;;;46299:1;46810:11;:28;;46791:47;46783:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46200:3;46877:11;46861:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;46853:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;46253:1;46958:11;46923:20;:32;46944:10;46923:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:66;;46915:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;47314:6:::1;;;;;;;;;;;47313:7;47305:21;;;;;;;;;;;;:::i;:::-;;;;;;;;;47334:11;47352:16:::0;47386:23:::1;47397:11;47386:10;:23::i;:::-;47375:34;;47437:8;47424:9;:21;;47416:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;47459:33;47469:11;47482:9;47459;:33::i;:::-;47572:3;46530:2;47538:9;:31;;;;:::i;:::-;:37;;;;:::i;:::-;47532:43;;47592:1;47586:3;:7;47582:165;;;47605:7;47626:18;47634:9;47626:7;:18::i;:::-;47618:32;;47658:3;47618:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47604:62;;;47683:2;47675:16;;;;;;;;;;;;:::i;:::-;;;;;;;;;47707:32;47715:18;47723:9;47715:7;:18::i;:::-;47735:3;47707:32;;;;;;;:::i;:::-;;;;;;;;47595:152;47582:165;47298:455;;47201:552:::0;;;:::o;46443:36::-;46476:3;46443:36;:::o;46259:41::-;46299:1;46259:41;:::o;28443:339::-;28638:41;28657:12;:10;:12::i;:::-;28671:7;28638:18;:41::i;:::-;28630:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28746:28;28756:4;28762:2;28766:7;28746:9;:28::i;:::-;28443:339;;;:::o;49851:121::-;49915:7;49938:20;:28;49959:6;49938:28;;;;;;;;;;;;;;;;49931:35;;49851:121;;;:::o;46034:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;39622:256::-;39719:7;39755:23;39772:5;39755:16;:23::i;:::-;39747:5;:31;39739:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39844:12;:19;39857:5;39844:19;;;;;;;;;;;;;;;:26;39864:5;39844:26;;;;;;;;;;;;39837:33;;39622:256;;;;:::o;46352:39::-;46384:7;46352:39;:::o;49362:485::-;49424:7;49440:14;49461:20;46476:3;49492:13;:11;:13::i;:::-;:23;49488:332;;49543:11;46428:10;49535:19;;;;:::i;:::-;49526:28;;49488:332;;;46476:3;49591:11;49575:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:36;49571:249;;;49639:11;46384:7;49631:19;;;;:::i;:::-;49622:28;;49571:249;;;49732:1;46476:3;49708:11;49692:13;:11;:13::i;:::-;:27;;;;:::i;:::-;49691:38;;;;:::i;:::-;:42;;;;:::i;:::-;49676:57;;49799:12;46428:10;49791:20;;;;:::i;:::-;49775:12;49761:11;:26;;;;:::i;:::-;46384:7;49752:36;;;;:::i;:::-;:59;;;;:::i;:::-;49743:68;;49571:249;49488:332;49835:6;49828:13;;;;49362:485;;;:::o;50159:145::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50212:7:::1;50233;:5;:7::i;:::-;50225:21;;50254;50225:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50211:69;;;50295:2;50287:11;;;::::0;::::1;;50204:100;50159:145::o:0;28853:185::-;28991:39;29008:4;29014:2;29018:7;28991:39;;;;;;;;;;;;:16;:39::i;:::-;28853:185;;;:::o;48797:130::-;48850:42;48869:12;:10;:12::i;:::-;48883:8;48850:18;:42::i;:::-;48842:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;48906:15;48912:8;48906:5;:15::i;:::-;48797:130;:::o;48314:479::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46200:3:::1;48428:1;48416:11;48402:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:27;;;;:::i;:::-;:40;;48394:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;48478:1;48464:11;:15;:47;;;;;46345:2;48483:11;:28;;48464:47;48456:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48525:14;48542:13;:11;:13::i;:::-;48525:30;;48567:9;48579:1;48567:13;;48562:226;48587:11;48582:1;:16;48562:226;;48614:19;48636:25;;;;;;;;48651:1;48636:25;;::::0;48614:47:::1;;48690:7;48670:5;:17;48685:1;48676:6;:10;;;;:::i;:::-;48670:17;;;;;;;;;;;:27;;;;;;;;;;;48706:20;:31;48727:9;48706:31;;;;;;;;;;;;;;;;:33;;;;;;;;;:::i;:::-;;;;;;48748:32;48758:9;48778:1;48769:6;:10;;;;:::i;:::-;48748:9;:32::i;:::-;48605:183;48600:3;;;;;:::i;:::-;;;;48562:226;;;;48387:406;48314:479:::0;;:::o;40144:233::-;40219:7;40255:30;:28;:30::i;:::-;40247:5;:38;40239:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40352:10;40363:5;40352:17;;;;;;;;:::i;:::-;;;;;;;;;;40345:24;;40144:233;;;:::o;50057:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50138:11:::1;50128:7;:21;;;;;;;;;;;;:::i;:::-;;50057:98:::0;:::o;46537:26::-;;;;;;;;;;;;;:::o;25828:239::-;25900:7;25920:13;25936:7;:16;25944:7;25936:16;;;;;;;;;;;;;;;;;;;;;25920:32;;25988:1;25971:19;;:5;:19;;;;25963:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26054:5;26047:12;;;25828:239;;;:::o;25558:208::-;25630:7;25675:1;25658:19;;:5;:19;;;;25650:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25742:9;:16;25752:5;25742:16;;;;;;;;;;;;;;;;25735:23;;25558:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;46484:48::-;46530:2;46484:48;:::o;26303:104::-;26359:13;26392:7;26385:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26303:104;:::o;46396:42::-;46428:10;46396:42;:::o;27986:155::-;28081:52;28100:12;:10;:12::i;:::-;28114:8;28124;28081:18;:52::i;:::-;27986:155;;:::o;46210:44::-;46253:1;46210:44;:::o;46305:42::-;46345:2;46305:42;:::o;29109:328::-;29284:41;29303:12;:10;:12::i;:::-;29317:7;29284:18;:41::i;:::-;29276:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29390:39;29404:4;29410:2;29414:7;29423:5;29390:13;:39::i;:::-;29109:328;;;;:::o;48931:427::-;49002:13;49043:1;49032:8;:12;:41;;;;;49060:13;:11;:13::i;:::-;49048:8;:25;;49032:41;49024:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;49097:17;49105:8;49097:7;:17::i;:::-;49088:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;49172:1;49154:7;49148:21;;;;;:::i;:::-;;;:25;:204;;;;;;;;;;;;;;;;;49241:7;49265:19;:8;:17;:19::i;:::-;49208:115;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49148:204;49132:220;;48931:427;;;:::o;46164:39::-;46200:3;46164:39;:::o;28212:164::-;28309:4;28333:18;:25;28352:5;28333:25;;;;;;;;;;;;;;;:35;28359:8;28333:35;;;;;;;;;;;;;;;;;;;;;;;;;28326:42;;28212:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;25189:305::-;25291:4;25343:25;25328:40;;;:11;:40;;;;:105;;;;25400:33;25385:48;;;:11;:48;;;;25328:105;:158;;;;25450:36;25474:11;25450:23;:36::i;:::-;25328:158;25308:178;;25189:305;;;:::o;30947:127::-;31012:4;31064:1;31036:30;;:7;:16;31044:7;31036:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31029:37;;30947:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;35093:174::-;35195:2;35168:15;:24;35184:7;35168:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35251:7;35247:2;35213:46;;35222:23;35237:7;35222:14;:23::i;:::-;35213:46;;;;;;;;;;;;35093:174;;:::o;47757:354::-;47833:14;47850:13;:11;:13::i;:::-;47833:30;;47875:9;47887:1;47875:13;;47870:236;47895:11;47890:1;:16;47870:236;;47922:19;47944:33;;;;;;;;47959:9;47944:33;;;47922:55;;48006:7;47986:5;:17;48001:1;47992:6;:10;;;;:::i;:::-;47986:17;;;;;;;;;;;:27;;;;;;;;;;;48022:20;:32;48043:10;48022:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;48065:33;48075:10;48096:1;48087:6;:10;;;;:::i;:::-;48065:9;:33::i;:::-;47913:193;47908:3;;;;;:::i;:::-;;;;47870:236;;;;47826:285;47757:354;;:::o;31241:348::-;31334:4;31359:16;31367:7;31359;:16::i;:::-;31351:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31435:13;31451:23;31466:7;31451:14;:23::i;:::-;31435:39;;31504:5;31493:16;;:7;:16;;;:51;;;;31537:7;31513:31;;:20;31525:7;31513:11;:20::i;:::-;:31;;;31493:51;:87;;;;31548:32;31565:5;31572:7;31548:16;:32::i;:::-;31493:87;31485:96;;;31241:348;;;;:::o;34350:625::-;34509:4;34482:31;;:23;34497:7;34482:14;:23::i;:::-;:31;;;34474:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34588:1;34574:16;;:2;:16;;;;34566:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34644:39;34665:4;34671:2;34675:7;34644:20;:39::i;:::-;34748:29;34765:1;34769:7;34748:8;:29::i;:::-;34809:1;34790:9;:15;34800:4;34790:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34838:1;34821:9;:13;34831:2;34821:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34869:2;34850:7;:16;34858:7;34850:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34908:7;34904:2;34889:27;;34898:4;34889:27;;;;;;;;;;;;34929:38;34949:4;34955:2;34959:7;34929:19;:38::i;:::-;34350:625;;;:::o;33593:420::-;33653:13;33669:23;33684:7;33669:14;:23::i;:::-;33653:39;;33705:48;33726:5;33741:1;33745:7;33705:20;:48::i;:::-;33794:29;33811:1;33815:7;33794:8;:29::i;:::-;33856:1;33836:9;:16;33846:5;33836:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;33875:7;:16;33883:7;33875:16;;;;;;;;;;;;33868:23;;;;;;;;;;;33937:7;33933:1;33909:36;;33918:5;33909:36;;;;;;;;;;;;33958:47;33978:5;33993:1;33997:7;33958:19;:47::i;:::-;33642:371;33593:420;:::o;31931:110::-;32007:26;32017:2;32021:7;32007:26;;;;;;;;;;;;:9;:26::i;:::-;31931:110;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;35409:315::-;35564:8;35555:17;;:5;:17;;;;35547:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35651:8;35613:18;:25;35632:5;35613:25;;;;;;;;;;;;;;;:35;35639:8;35613:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35697:8;35675:41;;35690:5;35675:41;;;35707:8;35675:41;;;;;;:::i;:::-;;;;;;;;35409:315;;;:::o;30319:::-;30476:28;30486:4;30492:2;30496:7;30476:9;:28::i;:::-;30523:48;30546:4;30552:2;30556:7;30565:5;30523:22;:48::i;:::-;30515:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30319:315;;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;16863:157::-;16948:4;16987:25;16972:40;;;:11;:40;;;;16965:47;;16863:157;;;:::o;40990:589::-;41134:45;41161:4;41167:2;41171:7;41134:26;:45::i;:::-;41212:1;41196:18;;:4;:18;;;41192:187;;;41231:40;41263:7;41231:31;:40::i;:::-;41192:187;;;41301:2;41293:10;;:4;:10;;;41289:90;;41320:47;41353:4;41359:7;41320:32;:47::i;:::-;41289:90;41192:187;41407:1;41393:16;;:2;:16;;;41389:183;;;41426:45;41463:7;41426:36;:45::i;:::-;41389:183;;;41499:4;41493:10;;:2;:10;;;41489:83;;41520:40;41548:2;41552:7;41520:27;:40::i;:::-;41489:83;41389:183;40990:589;;;:::o;38171:125::-;;;;:::o;32268:321::-;32398:18;32404:2;32408:7;32398:5;:18::i;:::-;32449:54;32480:1;32484:2;32488:7;32497:5;32449:22;:54::i;:::-;32427:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32268:321;;;:::o;36289:799::-;36444:4;36465:15;:2;:13;;;:15::i;:::-;36461:620;;;36517:2;36501:36;;;36538:12;:10;:12::i;:::-;36552:4;36558:7;36567:5;36501:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36497:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36760:1;36743:6;:13;:18;36739:272;;;36786:60;;;;;;;;;;:::i;:::-;;;;;;;;36739:272;36961:6;36955:13;36946:6;36942:2;36938:15;36931:38;36497:529;36634:41;;;36624:51;;;:6;:51;;;;36617:58;;;;;36461:620;37065:4;37058:11;;36289:799;;;;;;;:::o;37660:126::-;;;;:::o;42302:164::-;42406:10;:17;;;;42379:15;:24;42395:7;42379:24;;;;;;;;;;;:44;;;;42434:10;42450:7;42434:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42302:164;:::o;43093:988::-;43359:22;43409:1;43384:22;43401:4;43384:16;:22::i;:::-;:26;;;;:::i;:::-;43359:51;;43421:18;43442:17;:26;43460:7;43442:26;;;;;;;;;;;;43421:47;;43589:14;43575:10;:28;43571:328;;43620:19;43642:12;:18;43655:4;43642:18;;;;;;;;;;;;;;;:34;43661:14;43642:34;;;;;;;;;;;;43620:56;;43726:11;43693:12;:18;43706:4;43693:18;;;;;;;;;;;;;;;:30;43712:10;43693:30;;;;;;;;;;;:44;;;;43843:10;43810:17;:30;43828:11;43810:30;;;;;;;;;;;:43;;;;43605:294;43571:328;43995:17;:26;44013:7;43995:26;;;;;;;;;;;43988:33;;;44039:12;:18;44052:4;44039:18;;;;;;;;;;;;;;;:34;44058:14;44039:34;;;;;;;;;;;44032:41;;;43174:907;;43093:988;;:::o;44376:1079::-;44629:22;44674:1;44654:10;:17;;;;:21;;;;:::i;:::-;44629:46;;44686:18;44707:15;:24;44723:7;44707:24;;;;;;;;;;;;44686:45;;45058:19;45080:10;45091:14;45080:26;;;;;;;;:::i;:::-;;;;;;;;;;45058:48;;45144:11;45119:10;45130;45119:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45255:10;45224:15;:28;45240:11;45224:28;;;;;;;;;;;:41;;;;45396:15;:24;45412:7;45396:24;;;;;;;;;;;45389:31;;;45431:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44447:1008;;;44376:1079;:::o;41880:221::-;41965:14;41982:20;41999:2;41982:16;:20::i;:::-;41965:37;;42040:7;42013:12;:16;42026:2;42013:16;;;;;;;;;;;;;;;:24;42030:6;42013:24;;;;;;;;;;;:34;;;;42087:6;42058:17;:26;42076:7;42058:26;;;;;;;;;;;:35;;;;41954:147;41880:221;;:::o;32925:439::-;33019:1;33005:16;;:2;:16;;;;32997:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33078:16;33086:7;33078;:16::i;:::-;33077:17;33069:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33140:45;33169:1;33173:2;33177:7;33140:20;:45::i;:::-;33215:1;33198:9;:13;33208:2;33198:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33246:2;33227:7;:16;33235:7;33227:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33291:7;33287:2;33266:33;;33283:1;33266:33;;;;;;;;;;;;33312:44;33340:1;33344:2;33348:7;33312:19;:44::i;:::-;32925:439;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:118::-;8054:24;8072:5;8054:24;:::i;:::-;8049:3;8042:37;7967:118;;:::o;8091:109::-;8172:21;8187:5;8172:21;:::i;:::-;8167:3;8160:34;8091:109;;:::o;8206:360::-;8292:3;8320:38;8352:5;8320:38;:::i;:::-;8374:70;8437:6;8432:3;8374:70;:::i;:::-;8367:77;;8453:52;8498:6;8493:3;8486:4;8479:5;8475:16;8453:52;:::i;:::-;8530:29;8552:6;8530:29;:::i;:::-;8525:3;8521:39;8514:46;;8296:270;8206:360;;;;:::o;8572:364::-;8660:3;8688:39;8721:5;8688:39;:::i;:::-;8743:71;8807:6;8802:3;8743:71;:::i;:::-;8736:78;;8823:52;8868:6;8863:3;8856:4;8849:5;8845:16;8823:52;:::i;:::-;8900:29;8922:6;8900:29;:::i;:::-;8895:3;8891:39;8884:46;;8664:272;8572:364;;;;:::o;8942:377::-;9048:3;9076:39;9109:5;9076:39;:::i;:::-;9131:89;9213:6;9208:3;9131:89;:::i;:::-;9124:96;;9229:52;9274:6;9269:3;9262:4;9255:5;9251:16;9229:52;:::i;:::-;9306:6;9301:3;9297:16;9290:23;;9052:267;8942:377;;;;:::o;9349:845::-;9452:3;9489:5;9483:12;9518:36;9544:9;9518:36;:::i;:::-;9570:89;9652:6;9647:3;9570:89;:::i;:::-;9563:96;;9690:1;9679:9;9675:17;9706:1;9701:137;;;;9852:1;9847:341;;;;9668:520;;9701:137;9785:4;9781:9;9770;9766:25;9761:3;9754:38;9821:6;9816:3;9812:16;9805:23;;9701:137;;9847:341;9914:38;9946:5;9914:38;:::i;:::-;9974:1;9988:154;10002:6;9999:1;9996:13;9988:154;;;10076:7;10070:14;10066:1;10061:3;10057:11;10050:35;10126:1;10117:7;10113:15;10102:26;;10024:4;10021:1;10017:12;10012:17;;9988:154;;;10171:6;10166:3;10162:16;10155:23;;9854:334;;9668:520;;9456:738;;9349:845;;;;:::o;10200:365::-;10342:3;10363:66;10427:1;10422:3;10363:66;:::i;:::-;10356:73;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10200:365;;;:::o;10571:::-;10713:3;10734:66;10798:1;10793:3;10734:66;:::i;:::-;10727:73;;10809:93;10898:3;10809:93;:::i;:::-;10927:2;10922:3;10918:12;10911:19;;10571:365;;;:::o;10942:366::-;11084:3;11105:67;11169:2;11164:3;11105:67;:::i;:::-;11098:74;;11181:93;11270:3;11181:93;:::i;:::-;11299:2;11294:3;11290:12;11283:19;;10942:366;;;:::o;11314:::-;11456:3;11477:67;11541:2;11536:3;11477:67;:::i;:::-;11470:74;;11553:93;11642:3;11553:93;:::i;:::-;11671:2;11666:3;11662:12;11655:19;;11314:366;;;:::o;11686:::-;11828:3;11849:67;11913:2;11908:3;11849:67;:::i;:::-;11842:74;;11925:93;12014:3;11925:93;:::i;:::-;12043:2;12038:3;12034:12;12027:19;;11686:366;;;:::o;12058:::-;12200:3;12221:67;12285:2;12280:3;12221:67;:::i;:::-;12214:74;;12297:93;12386:3;12297:93;:::i;:::-;12415:2;12410:3;12406:12;12399:19;;12058:366;;;:::o;12430:::-;12572:3;12593:67;12657:2;12652:3;12593:67;:::i;:::-;12586:74;;12669:93;12758:3;12669:93;:::i;:::-;12787:2;12782:3;12778:12;12771:19;;12430:366;;;:::o;12802:365::-;12944:3;12965:66;13029:1;13024:3;12965:66;:::i;:::-;12958:73;;13040:93;13129:3;13040:93;:::i;:::-;13158:2;13153:3;13149:12;13142:19;;12802:365;;;:::o;13173:366::-;13315:3;13336:67;13400:2;13395:3;13336:67;:::i;:::-;13329:74;;13412:93;13501:3;13412:93;:::i;:::-;13530:2;13525:3;13521:12;13514:19;;13173:366;;;:::o;13545:::-;13687:3;13708:67;13772:2;13767:3;13708:67;:::i;:::-;13701:74;;13784:93;13873:3;13784:93;:::i;:::-;13902:2;13897:3;13893:12;13886:19;;13545:366;;;:::o;13917:365::-;14059:3;14080:66;14144:1;14139:3;14080:66;:::i;:::-;14073:73;;14155:93;14244:3;14155:93;:::i;:::-;14273:2;14268:3;14264:12;14257:19;;13917:365;;;:::o;14288:366::-;14430:3;14451:67;14515:2;14510:3;14451:67;:::i;:::-;14444:74;;14527:93;14616:3;14527:93;:::i;:::-;14645:2;14640:3;14636:12;14629:19;;14288:366;;;:::o;14660:::-;14802:3;14823:67;14887:2;14882:3;14823:67;:::i;:::-;14816:74;;14899:93;14988:3;14899:93;:::i;:::-;15017:2;15012:3;15008:12;15001:19;;14660:366;;;:::o;15032:::-;15174:3;15195:67;15259:2;15254:3;15195:67;:::i;:::-;15188:74;;15271:93;15360:3;15271:93;:::i;:::-;15389:2;15384:3;15380:12;15373:19;;15032:366;;;:::o;15404:::-;15546:3;15567:67;15631:2;15626:3;15567:67;:::i;:::-;15560:74;;15643:93;15732:3;15643:93;:::i;:::-;15761:2;15756:3;15752:12;15745:19;;15404:366;;;:::o;15776:365::-;15918:3;15939:66;16003:1;15998:3;15939:66;:::i;:::-;15932:73;;16014:93;16103:3;16014:93;:::i;:::-;16132:2;16127:3;16123:12;16116:19;;15776:365;;;:::o;16147:366::-;16289:3;16310:67;16374:2;16369:3;16310:67;:::i;:::-;16303:74;;16386:93;16475:3;16386:93;:::i;:::-;16504:2;16499:3;16495:12;16488:19;;16147:366;;;:::o;16519:::-;16661:3;16682:67;16746:2;16741:3;16682:67;:::i;:::-;16675:74;;16758:93;16847:3;16758:93;:::i;:::-;16876:2;16871:3;16867:12;16860:19;;16519:366;;;:::o;16891:400::-;17051:3;17072:84;17154:1;17149:3;17072:84;:::i;:::-;17065:91;;17165:93;17254:3;17165:93;:::i;:::-;17283:1;17278:3;17274:11;17267:18;;16891:400;;;:::o;17297:366::-;17439:3;17460:67;17524:2;17519:3;17460:67;:::i;:::-;17453:74;;17536:93;17625:3;17536:93;:::i;:::-;17654:2;17649:3;17645:12;17638:19;;17297:366;;;:::o;17669:365::-;17811:3;17832:66;17896:1;17891:3;17832:66;:::i;:::-;17825:73;;17907:93;17996:3;17907:93;:::i;:::-;18025:2;18020:3;18016:12;18009:19;;17669:365;;;:::o;18040:366::-;18182:3;18203:67;18267:2;18262:3;18203:67;:::i;:::-;18196:74;;18279:93;18368:3;18279:93;:::i;:::-;18397:2;18392:3;18388:12;18381:19;;18040:366;;;:::o;18412:398::-;18571:3;18592:83;18673:1;18668:3;18592:83;:::i;:::-;18585:90;;18684:93;18773:3;18684:93;:::i;:::-;18802:1;18797:3;18793:11;18786:18;;18412:398;;;:::o;18816:366::-;18958:3;18979:67;19043:2;19038:3;18979:67;:::i;:::-;18972:74;;19055:93;19144:3;19055:93;:::i;:::-;19173:2;19168:3;19164:12;19157:19;;18816:366;;;:::o;19188:365::-;19330:3;19351:66;19415:1;19410:3;19351:66;:::i;:::-;19344:73;;19426:93;19515:3;19426:93;:::i;:::-;19544:2;19539:3;19535:12;19528:19;;19188:365;;;:::o;19559:::-;19701:3;19722:66;19786:1;19781:3;19722:66;:::i;:::-;19715:73;;19797:93;19886:3;19797:93;:::i;:::-;19915:2;19910:3;19906:12;19899:19;;19559:365;;;:::o;19930:366::-;20072:3;20093:67;20157:2;20152:3;20093:67;:::i;:::-;20086:74;;20169:93;20258:3;20169:93;:::i;:::-;20287:2;20282:3;20278:12;20271:19;;19930:366;;;:::o;20302:365::-;20444:3;20465:66;20529:1;20524:3;20465:66;:::i;:::-;20458:73;;20540:93;20629:3;20540:93;:::i;:::-;20658:2;20653:3;20649:12;20642:19;;20302:365;;;:::o;20673:::-;20815:3;20836:66;20900:1;20895:3;20836:66;:::i;:::-;20829:73;;20911:93;21000:3;20911:93;:::i;:::-;21029:2;21024:3;21020:12;21013:19;;20673:365;;;:::o;21044:::-;21186:3;21207:66;21271:1;21266:3;21207:66;:::i;:::-;21200:73;;21282:93;21371:3;21282:93;:::i;:::-;21400:2;21395:3;21391:12;21384:19;;21044:365;;;:::o;21415:118::-;21502:24;21520:5;21502:24;:::i;:::-;21497:3;21490:37;21415:118;;:::o;21539:695::-;21817:3;21839:92;21927:3;21918:6;21839:92;:::i;:::-;21832:99;;21948:95;22039:3;22030:6;21948:95;:::i;:::-;21941:102;;22060:148;22204:3;22060:148;:::i;:::-;22053:155;;22225:3;22218:10;;21539:695;;;;;:::o;22240:379::-;22424:3;22446:147;22589:3;22446:147;:::i;:::-;22439:154;;22610:3;22603:10;;22240:379;;;:::o;22625:222::-;22718:4;22756:2;22745:9;22741:18;22733:26;;22769:71;22837:1;22826:9;22822:17;22813:6;22769:71;:::i;:::-;22625:222;;;;:::o;22853:640::-;23048:4;23086:3;23075:9;23071:19;23063:27;;23100:71;23168:1;23157:9;23153:17;23144:6;23100:71;:::i;:::-;23181:72;23249:2;23238:9;23234:18;23225:6;23181:72;:::i;:::-;23263;23331:2;23320:9;23316:18;23307:6;23263:72;:::i;:::-;23382:9;23376:4;23372:20;23367:2;23356:9;23352:18;23345:48;23410:76;23481:4;23472:6;23410:76;:::i;:::-;23402:84;;22853:640;;;;;;;:::o;23499:332::-;23620:4;23658:2;23647:9;23643:18;23635:26;;23671:71;23739:1;23728:9;23724:17;23715:6;23671:71;:::i;:::-;23752:72;23820:2;23809:9;23805:18;23796:6;23752:72;:::i;:::-;23499:332;;;;;:::o;23837:210::-;23924:4;23962:2;23951:9;23947:18;23939:26;;23975:65;24037:1;24026:9;24022:17;24013:6;23975:65;:::i;:::-;23837:210;;;;:::o;24053:313::-;24166:4;24204:2;24193:9;24189:18;24181:26;;24253:9;24247:4;24243:20;24239:1;24228:9;24224:17;24217:47;24281:78;24354:4;24345:6;24281:78;:::i;:::-;24273:86;;24053:313;;;;:::o;24372:419::-;24538:4;24576:2;24565:9;24561:18;24553:26;;24625:9;24619:4;24615:20;24611:1;24600:9;24596:17;24589:47;24653:131;24779:4;24653:131;:::i;:::-;24645:139;;24372:419;;;:::o;24797:::-;24963:4;25001:2;24990:9;24986:18;24978:26;;25050:9;25044:4;25040:20;25036:1;25025:9;25021:17;25014:47;25078:131;25204:4;25078:131;:::i;:::-;25070:139;;24797:419;;;:::o;25222:::-;25388:4;25426:2;25415:9;25411:18;25403:26;;25475:9;25469:4;25465:20;25461:1;25450:9;25446:17;25439:47;25503:131;25629:4;25503:131;:::i;:::-;25495:139;;25222:419;;;:::o;25647:::-;25813:4;25851:2;25840:9;25836:18;25828:26;;25900:9;25894:4;25890:20;25886:1;25875:9;25871:17;25864:47;25928:131;26054:4;25928:131;:::i;:::-;25920:139;;25647:419;;;:::o;26072:::-;26238:4;26276:2;26265:9;26261:18;26253:26;;26325:9;26319:4;26315:20;26311:1;26300:9;26296:17;26289:47;26353:131;26479:4;26353:131;:::i;:::-;26345:139;;26072:419;;;:::o;26497:::-;26663:4;26701:2;26690:9;26686:18;26678:26;;26750:9;26744:4;26740:20;26736:1;26725:9;26721:17;26714:47;26778:131;26904:4;26778:131;:::i;:::-;26770:139;;26497:419;;;:::o;26922:::-;27088:4;27126:2;27115:9;27111:18;27103:26;;27175:9;27169:4;27165:20;27161:1;27150:9;27146:17;27139:47;27203:131;27329:4;27203:131;:::i;:::-;27195:139;;26922:419;;;:::o;27347:::-;27513:4;27551:2;27540:9;27536:18;27528:26;;27600:9;27594:4;27590:20;27586:1;27575:9;27571:17;27564:47;27628:131;27754:4;27628:131;:::i;:::-;27620:139;;27347:419;;;:::o;27772:::-;27938:4;27976:2;27965:9;27961:18;27953:26;;28025:9;28019:4;28015:20;28011:1;28000:9;27996:17;27989:47;28053:131;28179:4;28053:131;:::i;:::-;28045:139;;27772:419;;;:::o;28197:::-;28363:4;28401:2;28390:9;28386:18;28378:26;;28450:9;28444:4;28440:20;28436:1;28425:9;28421:17;28414:47;28478:131;28604:4;28478:131;:::i;:::-;28470:139;;28197:419;;;:::o;28622:::-;28788:4;28826:2;28815:9;28811:18;28803:26;;28875:9;28869:4;28865:20;28861:1;28850:9;28846:17;28839:47;28903:131;29029:4;28903:131;:::i;:::-;28895:139;;28622:419;;;:::o;29047:::-;29213:4;29251:2;29240:9;29236:18;29228:26;;29300:9;29294:4;29290:20;29286:1;29275:9;29271:17;29264:47;29328:131;29454:4;29328:131;:::i;:::-;29320:139;;29047:419;;;:::o;29472:::-;29638:4;29676:2;29665:9;29661:18;29653:26;;29725:9;29719:4;29715:20;29711:1;29700:9;29696:17;29689:47;29753:131;29879:4;29753:131;:::i;:::-;29745:139;;29472:419;;;:::o;29897:::-;30063:4;30101:2;30090:9;30086:18;30078:26;;30150:9;30144:4;30140:20;30136:1;30125:9;30121:17;30114:47;30178:131;30304:4;30178:131;:::i;:::-;30170:139;;29897:419;;;:::o;30322:::-;30488:4;30526:2;30515:9;30511:18;30503:26;;30575:9;30569:4;30565:20;30561:1;30550:9;30546:17;30539:47;30603:131;30729:4;30603:131;:::i;:::-;30595:139;;30322:419;;;:::o;30747:::-;30913:4;30951:2;30940:9;30936:18;30928:26;;31000:9;30994:4;30990:20;30986:1;30975:9;30971:17;30964:47;31028:131;31154:4;31028:131;:::i;:::-;31020:139;;30747:419;;;:::o;31172:::-;31338:4;31376:2;31365:9;31361:18;31353:26;;31425:9;31419:4;31415:20;31411:1;31400:9;31396:17;31389:47;31453:131;31579:4;31453:131;:::i;:::-;31445:139;;31172:419;;;:::o;31597:::-;31763:4;31801:2;31790:9;31786:18;31778:26;;31850:9;31844:4;31840:20;31836:1;31825:9;31821:17;31814:47;31878:131;32004:4;31878:131;:::i;:::-;31870:139;;31597:419;;;:::o;32022:::-;32188:4;32226:2;32215:9;32211:18;32203:26;;32275:9;32269:4;32265:20;32261:1;32250:9;32246:17;32239:47;32303:131;32429:4;32303:131;:::i;:::-;32295:139;;32022:419;;;:::o;32447:::-;32613:4;32651:2;32640:9;32636:18;32628:26;;32700:9;32694:4;32690:20;32686:1;32675:9;32671:17;32664:47;32728:131;32854:4;32728:131;:::i;:::-;32720:139;;32447:419;;;:::o;32872:::-;33038:4;33076:2;33065:9;33061:18;33053:26;;33125:9;33119:4;33115:20;33111:1;33100:9;33096:17;33089:47;33153:131;33279:4;33153:131;:::i;:::-;33145:139;;32872:419;;;:::o;33297:::-;33463:4;33501:2;33490:9;33486:18;33478:26;;33550:9;33544:4;33540:20;33536:1;33525:9;33521:17;33514:47;33578:131;33704:4;33578:131;:::i;:::-;33570:139;;33297:419;;;:::o;33722:::-;33888:4;33926:2;33915:9;33911:18;33903:26;;33975:9;33969:4;33965:20;33961:1;33950:9;33946:17;33939:47;34003:131;34129:4;34003:131;:::i;:::-;33995:139;;33722:419;;;:::o;34147:::-;34313:4;34351:2;34340:9;34336:18;34328:26;;34400:9;34394:4;34390:20;34386:1;34375:9;34371:17;34364:47;34428:131;34554:4;34428:131;:::i;:::-;34420:139;;34147:419;;;:::o;34572:::-;34738:4;34776:2;34765:9;34761:18;34753:26;;34825:9;34819:4;34815:20;34811:1;34800:9;34796:17;34789:47;34853:131;34979:4;34853:131;:::i;:::-;34845:139;;34572:419;;;:::o;34997:::-;35163:4;35201:2;35190:9;35186:18;35178:26;;35250:9;35244:4;35240:20;35236:1;35225:9;35221:17;35214:47;35278:131;35404:4;35278:131;:::i;:::-;35270:139;;34997:419;;;:::o;35422:::-;35588:4;35626:2;35615:9;35611:18;35603:26;;35675:9;35669:4;35665:20;35661:1;35650:9;35646:17;35639:47;35703:131;35829:4;35703:131;:::i;:::-;35695:139;;35422:419;;;:::o;35847:::-;36013:4;36051:2;36040:9;36036:18;36028:26;;36100:9;36094:4;36090:20;36086:1;36075:9;36071:17;36064:47;36128:131;36254:4;36128:131;:::i;:::-;36120:139;;35847:419;;;:::o;36272:222::-;36365:4;36403:2;36392:9;36388:18;36380:26;;36416:71;36484:1;36473:9;36469:17;36460:6;36416:71;:::i;:::-;36272:222;;;;:::o;36500:129::-;36534:6;36561:20;;:::i;:::-;36551:30;;36590:33;36618:4;36610:6;36590:33;:::i;:::-;36500:129;;;:::o;36635:75::-;36668:6;36701:2;36695:9;36685:19;;36635:75;:::o;36716:307::-;36777:4;36867:18;36859:6;36856:30;36853:56;;;36889:18;;:::i;:::-;36853:56;36927:29;36949:6;36927:29;:::i;:::-;36919:37;;37011:4;37005;37001:15;36993:23;;36716:307;;;:::o;37029:308::-;37091:4;37181:18;37173:6;37170:30;37167:56;;;37203:18;;:::i;:::-;37167:56;37241:29;37263:6;37241:29;:::i;:::-;37233:37;;37325:4;37319;37315:15;37307:23;;37029:308;;;:::o;37343:141::-;37392:4;37415:3;37407:11;;37438:3;37435:1;37428:14;37472:4;37469:1;37459:18;37451:26;;37343:141;;;:::o;37490:98::-;37541:6;37575:5;37569:12;37559:22;;37490:98;;;:::o;37594:99::-;37646:6;37680:5;37674:12;37664:22;;37594:99;;;:::o;37699:168::-;37782:11;37816:6;37811:3;37804:19;37856:4;37851:3;37847:14;37832:29;;37699:168;;;;:::o;37873:147::-;37974:11;38011:3;37996:18;;37873:147;;;;:::o;38026:169::-;38110:11;38144:6;38139:3;38132:19;38184:4;38179:3;38175:14;38160:29;;38026:169;;;;:::o;38201:148::-;38303:11;38340:3;38325:18;;38201:148;;;;:::o;38355:305::-;38395:3;38414:20;38432:1;38414:20;:::i;:::-;38409:25;;38448:20;38466:1;38448:20;:::i;:::-;38443:25;;38602:1;38534:66;38530:74;38527:1;38524:81;38521:107;;;38608:18;;:::i;:::-;38521:107;38652:1;38649;38645:9;38638:16;;38355:305;;;;:::o;38666:185::-;38706:1;38723:20;38741:1;38723:20;:::i;:::-;38718:25;;38757:20;38775:1;38757:20;:::i;:::-;38752:25;;38796:1;38786:35;;38801:18;;:::i;:::-;38786:35;38843:1;38840;38836:9;38831:14;;38666:185;;;;:::o;38857:348::-;38897:7;38920:20;38938:1;38920:20;:::i;:::-;38915:25;;38954:20;38972:1;38954:20;:::i;:::-;38949:25;;39142:1;39074:66;39070:74;39067:1;39064:81;39059:1;39052:9;39045:17;39041:105;39038:131;;;39149:18;;:::i;:::-;39038:131;39197:1;39194;39190:9;39179:20;;38857:348;;;;:::o;39211:191::-;39251:4;39271:20;39289:1;39271:20;:::i;:::-;39266:25;;39305:20;39323:1;39305:20;:::i;:::-;39300:25;;39344:1;39341;39338:8;39335:34;;;39349:18;;:::i;:::-;39335:34;39394:1;39391;39387:9;39379:17;;39211:191;;;;:::o;39408:96::-;39445:7;39474:24;39492:5;39474:24;:::i;:::-;39463:35;;39408:96;;;:::o;39510:90::-;39544:7;39587:5;39580:13;39573:21;39562:32;;39510:90;;;:::o;39606:149::-;39642:7;39682:66;39675:5;39671:78;39660:89;;39606:149;;;:::o;39761:126::-;39798:7;39838:42;39831:5;39827:54;39816:65;;39761:126;;;:::o;39893:77::-;39930:7;39959:5;39948:16;;39893:77;;;:::o;39976:154::-;40060:6;40055:3;40050;40037:30;40122:1;40113:6;40108:3;40104:16;40097:27;39976:154;;;:::o;40136:307::-;40204:1;40214:113;40228:6;40225:1;40222:13;40214:113;;;40313:1;40308:3;40304:11;40298:18;40294:1;40289:3;40285:11;40278:39;40250:2;40247:1;40243:10;40238:15;;40214:113;;;40345:6;40342:1;40339:13;40336:101;;;40425:1;40416:6;40411:3;40407:16;40400:27;40336:101;40185:258;40136:307;;;:::o;40449:320::-;40493:6;40530:1;40524:4;40520:12;40510:22;;40577:1;40571:4;40567:12;40598:18;40588:81;;40654:4;40646:6;40642:17;40632:27;;40588:81;40716:2;40708:6;40705:14;40685:18;40682:38;40679:84;;;40735:18;;:::i;:::-;40679:84;40500:269;40449:320;;;:::o;40775:281::-;40858:27;40880:4;40858:27;:::i;:::-;40850:6;40846:40;40988:6;40976:10;40973:22;40952:18;40940:10;40937:34;40934:62;40931:88;;;40999:18;;:::i;:::-;40931:88;41039:10;41035:2;41028:22;40818:238;40775:281;;:::o;41062:233::-;41101:3;41124:24;41142:5;41124:24;:::i;:::-;41115:33;;41170:66;41163:5;41160:77;41157:103;;;41240:18;;:::i;:::-;41157:103;41287:1;41280:5;41276:13;41269:20;;41062:233;;;:::o;41301:176::-;41333:1;41350:20;41368:1;41350:20;:::i;:::-;41345:25;;41384:20;41402:1;41384:20;:::i;:::-;41379:25;;41423:1;41413:35;;41428:18;;:::i;:::-;41413:35;41469:1;41466;41462:9;41457:14;;41301:176;;;;:::o;41483:180::-;41531:77;41528:1;41521:88;41628:4;41625:1;41618:15;41652:4;41649:1;41642:15;41669:180;41717:77;41714:1;41707:88;41814:4;41811:1;41804:15;41838:4;41835:1;41828:15;41855:180;41903:77;41900:1;41893:88;42000:4;41997:1;41990:15;42024:4;42021:1;42014:15;42041:180;42089:77;42086:1;42079:88;42186:4;42183:1;42176:15;42210:4;42207:1;42200:15;42227:180;42275:77;42272:1;42265:88;42372:4;42369:1;42362:15;42396:4;42393:1;42386:15;42413:180;42461:77;42458:1;42451:88;42558:4;42555:1;42548:15;42582:4;42579:1;42572:15;42599:117;42708:1;42705;42698:12;42722:117;42831:1;42828;42821:12;42845:117;42954:1;42951;42944:12;42968:117;43077:1;43074;43067:12;43091:102;43132:6;43183:2;43179:7;43174:2;43167:5;43163:14;43159:28;43149:38;;43091:102;;;:::o;43199:151::-;43339:3;43335:1;43327:6;43323:14;43316:27;43199:151;:::o;43356:152::-;43496:4;43492:1;43484:6;43480:14;43473:28;43356:152;:::o;43514:230::-;43654:34;43650:1;43642:6;43638:14;43631:58;43723:13;43718:2;43710:6;43706:15;43699:38;43514:230;:::o;43750:237::-;43890:34;43886:1;43878:6;43874:14;43867:58;43959:20;43954:2;43946:6;43942:15;43935:45;43750:237;:::o;43993:225::-;44133:34;44129:1;44121:6;44117:14;44110:58;44202:8;44197:2;44189:6;44185:15;44178:33;43993:225;:::o;44224:224::-;44364:34;44360:1;44352:6;44348:14;44341:58;44433:7;44428:2;44420:6;44416:15;44409:32;44224:224;:::o;44454:178::-;44594:30;44590:1;44582:6;44578:14;44571:54;44454:178;:::o;44638:151::-;44778:3;44774:1;44766:6;44762:14;44755:27;44638:151;:::o;44795:223::-;44935:34;44931:1;44923:6;44919:14;44912:58;45004:6;44999:2;44991:6;44987:15;44980:31;44795:223;:::o;45024:175::-;45164:27;45160:1;45152:6;45148:14;45141:51;45024:175;:::o;45205:151::-;45345:3;45341:1;45333:6;45329:14;45322:27;45205:151;:::o;45362:231::-;45502:34;45498:1;45490:6;45486:14;45479:58;45571:14;45566:2;45558:6;45554:15;45547:39;45362:231;:::o;45599:243::-;45739:34;45735:1;45727:6;45723:14;45716:58;45808:26;45803:2;45795:6;45791:15;45784:51;45599:243;:::o;45848:229::-;45988:34;45984:1;45976:6;45972:14;45965:58;46057:12;46052:2;46044:6;46040:15;46033:37;45848:229;:::o;46083:228::-;46223:34;46219:1;46211:6;46207:14;46200:58;46292:11;46287:2;46279:6;46275:15;46268:36;46083:228;:::o;46317:152::-;46457:4;46453:1;46445:6;46441:14;46434:28;46317:152;:::o;46475:182::-;46615:34;46611:1;46603:6;46599:14;46592:58;46475:182;:::o;46663:231::-;46803:34;46799:1;46791:6;46787:14;46780:58;46872:14;46867:2;46859:6;46855:15;46848:39;46663:231;:::o;46900:155::-;47040:7;47036:1;47028:6;47024:14;47017:31;46900:155;:::o;47061:182::-;47201:34;47197:1;47189:6;47185:14;47178:58;47061:182;:::o;47249:151::-;47389:3;47385:1;47377:6;47373:14;47366:27;47249:151;:::o;47406:220::-;47546:34;47542:1;47534:6;47530:14;47523:58;47615:3;47610:2;47602:6;47598:15;47591:28;47406:220;:::o;47632:114::-;;:::o;47752:236::-;47892:34;47888:1;47880:6;47876:14;47869:58;47961:19;47956:2;47948:6;47944:15;47937:44;47752:236;:::o;47994:151::-;48134:3;48130:1;48122:6;48118:14;48111:27;47994:151;:::o;48151:::-;48291:3;48287:1;48279:6;48275:14;48268:27;48151:151;:::o;48308:231::-;48448:34;48444:1;48436:6;48432:14;48425:58;48517:14;48512:2;48504:6;48500:15;48493:39;48308:231;:::o;48545:151::-;48685:3;48681:1;48673:6;48669:14;48662:27;48545:151;:::o;48702:::-;48842:3;48838:1;48830:6;48826:14;48819:27;48702:151;:::o;48859:::-;48999:3;48995:1;48987:6;48983:14;48976:27;48859:151;:::o;49016:122::-;49089:24;49107:5;49089:24;:::i;:::-;49082:5;49079:35;49069:63;;49128:1;49125;49118:12;49069:63;49016:122;:::o;49144:116::-;49214:21;49229:5;49214:21;:::i;:::-;49207:5;49204:32;49194:60;;49250:1;49247;49240:12;49194:60;49144:116;:::o;49266:120::-;49338:23;49355:5;49338:23;:::i;:::-;49331:5;49328:34;49318:62;;49376:1;49373;49366:12;49318:62;49266:120;:::o;49392:122::-;49465:24;49483:5;49465:24;:::i;:::-;49458:5;49455:35;49445:63;;49504:1;49501;49494:12;49445:63;49392:122;:::o
Swarm Source
ipfs://f0383148b3edc231edb66996bcc4e70e716555c614f49cb0be6cbc0175f02b32
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.