ERC-721
Overview
Max Total Supply
74 SYMMETRICAL
Holders
48
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SYMMETRICALLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Symmetrical
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-06 */ //SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/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 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 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() { _setOwner(_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. */ /** * @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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol 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 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 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 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 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 tokenId); /** * @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 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 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/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: contracts/Symmetrical.sol pragma solidity ^0.8.0; contract Symmetrical is ERC721Enumerable, Ownable { using Strings for uint256; string private baseURI; string public baseExtension = ".json"; uint256 public cost = 0.06 ether; uint256 public maxSupply = 10000; uint256 public maxSupplyByEndOfThisStage = 2500; uint256 public maxMintAmount = 25; uint256 public COMMUNITY_SHARE = 50; uint256 public PROMOTER_SHARE = 20; uint256 public DEVELOPER_SHARE = 20; uint256 constant SHARE_SUM = 100; bool public paused = false; mapping(address => bool) public whitelisted; address public constant COMMUNITY_ADDRESS = 0x773749ABD03697B3b0eF7cA87225e38f50900fea; address public constant PROMOTER_ADDRESS = 0x414508c939B0B78347a22d1F2dE5A7747C1426A5; address public constant DEVELOPER_ADDRESS = 0xB5a7dDbac8dFa97C688E93CF600b8303Bf88A296; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); mint(msg.sender, 2); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused,'you have time for a quick coffee as we reveal our next Stage'); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupplyByEndOfThisStage ); if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function setMaxQuartSupply(uint256 _newmaxStageSupply) public onlyOwner { maxSupplyByEndOfThisStage = _newmaxStageSupply; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() public payable onlyOwner { uint256 balance = address(this).balance; uint256 toCommunity = (balance * COMMUNITY_SHARE)/SHARE_SUM; uint256 toPromoter = (balance * PROMOTER_SHARE)/SHARE_SUM; uint256 toDeveloper = (balance * DEVELOPER_SHARE)/SHARE_SUM; require(payable(COMMUNITY_ADDRESS).send(toCommunity)); require(payable(PROMOTER_ADDRESS).send(toPromoter)); require(payable(DEVELOPER_ADDRESS).send(toDeveloper)); uint256 toOwner = balance - (toCommunity + toPromoter + toDeveloper); require(payable(msg.sender).send(toOwner)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"COMMUNITY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COMMUNITY_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEVELOPER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEVELOPER_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROMOTER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROMOTER_SHARE","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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyByEndOfThisStage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxStageSupply","type":"uint256"}],"name":"setMaxQuartSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000e8d565b5066d529ae9e860000600d55612710600e556109c4600f5560196010556032601155601460125560146013556000601460006101000a81548160ff021916908315150217905550348015620000a557600080fd5b5060405162005f1f38038062005f1f8339818101604052810190620000cb919062001004565b82828160009080519060200190620000e592919062000e8d565b508060019080519060200190620000fe92919062000e8d565b50505062000121620001156200014e60201b60201c565b6200015660201b60201c565b62000132816200021c60201b60201c565b62000145336002620002c760201b60201c565b5050506200189b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200022c6200014e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002526200046e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a29062001308565b60405180910390fd5b80600b9080519060200190620002c392919062000e8d565b5050565b6000620002d96200049860201b60201c565b9050601460009054906101000a900460ff16156200032e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000325906200125e565b60405180910390fd5b600082116200033c57600080fd5b6010548211156200034c57600080fd5b600f5482826200035d9190620013b6565b11156200036957600080fd5b620003796200046e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620004245760011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620004235781600d5462000415919062001413565b3410156200042257600080fd5b5b5b6000600190505b828111620004685762000452848284620004469190620013b6565b620004a560201b60201c565b80806200045f90620015bb565b9150506200042b565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b620004c7828260405180602001604052806000815250620004cb60201b60201c565b5050565b620004dd83836200053960201b60201c565b620004f260008484846200071f60201b60201c565b62000534576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200052b9062001280565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005a390620012e6565b60405180910390fd5b620005bd81620008d960201b60201c565b1562000600576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f790620012a2565b60405180910390fd5b62000614600083836200094560201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006669190620013b6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200074d8473ffffffffffffffffffffffffffffffffffffffff1662000a8c60201b62001e3b1760201c565b15620008cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200077f6200014e60201b60201c565b8786866040518563ffffffff1660e01b8152600401620007a394939291906200120a565b602060405180830381600087803b158015620007be57600080fd5b505af1925050508015620007f257506040513d601f19601f82011682018060405250810190620007ef919062000fd2565b60015b6200087b573d806000811462000825576040519150601f19603f3d011682016040523d82523d6000602084013e6200082a565b606091505b5060008151141562000873576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200086a9062001280565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008d1565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200095d83838362000a9f60201b62001e4e1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009aa57620009a48162000aa460201b60201c565b620009f2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009f157620009f0838262000aed60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a3f5762000a398162000c6a60201b60201c565b62000a87565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000a865762000a85828262000d4660201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000b078462000dd260201b620016b41760201c565b62000b13919062001474565b905060006007600084815260200190815260200160002054905081811462000bf9576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c80919062001474565b905060006009600084815260200190815260200160002054905060006008838154811062000cb35762000cb262001696565b5b90600052602060002001549050806008838154811062000cd85762000cd762001696565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000d2a5762000d2962001667565b5b6001900381819060005260206000200160009055905550505050565b600062000d5e8362000dd260201b620016b41760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000e46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e3d90620012c4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e9b906200154f565b90600052602060002090601f01602090048101928262000ebf576000855562000f0b565b82601f1062000eda57805160ff191683800117855562000f0b565b8280016001018555821562000f0b579182015b8281111562000f0a57825182559160200191906001019062000eed565b5b50905062000f1a919062000f1e565b5090565b5b8082111562000f3957600081600090555060010162000f1f565b5090565b600062000f5462000f4e8462001353565b6200132a565b90508281526020810184848401111562000f735762000f72620016f9565b5b62000f8084828562001519565b509392505050565b60008151905062000f998162001881565b92915050565b600082601f83011262000fb75762000fb6620016f4565b5b815162000fc984826020860162000f3d565b91505092915050565b60006020828403121562000feb5762000fea62001703565b5b600062000ffb8482850162000f88565b91505092915050565b60008060006060848603121562001020576200101f62001703565b5b600084015167ffffffffffffffff811115620010415762001040620016fe565b5b6200104f8682870162000f9f565b935050602084015167ffffffffffffffff811115620010735762001072620016fe565b5b620010818682870162000f9f565b925050604084015167ffffffffffffffff811115620010a557620010a4620016fe565b5b620010b38682870162000f9f565b9150509250925092565b620010c881620014af565b82525050565b6000620010db8262001389565b620010e7818562001394565b9350620010f981856020860162001519565b620011048162001708565b840191505092915050565b60006200111e603c83620013a5565b91506200112b8262001719565b604082019050919050565b600062001145603283620013a5565b9150620011528262001768565b604082019050919050565b60006200116c601c83620013a5565b91506200117982620017b7565b602082019050919050565b600062001193602a83620013a5565b9150620011a082620017e0565b604082019050919050565b6000620011ba602083620013a5565b9150620011c7826200182f565b602082019050919050565b6000620011e1602083620013a5565b9150620011ee8262001858565b602082019050919050565b62001204816200150f565b82525050565b6000608082019050620012216000830187620010bd565b620012306020830186620010bd565b6200123f6040830185620011f9565b8181036060830152620012538184620010ce565b905095945050505050565b6000602082019050818103600083015262001279816200110f565b9050919050565b600060208201905081810360008301526200129b8162001136565b9050919050565b60006020820190508181036000830152620012bd816200115d565b9050919050565b60006020820190508181036000830152620012df8162001184565b9050919050565b600060208201905081810360008301526200130181620011ab565b9050919050565b600060208201905081810360008301526200132381620011d2565b9050919050565b60006200133662001349565b905062001344828262001585565b919050565b6000604051905090565b600067ffffffffffffffff821115620013715762001370620016c5565b5b6200137c8262001708565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620013c3826200150f565b9150620013d0836200150f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001408576200140762001609565b5b828201905092915050565b600062001420826200150f565b91506200142d836200150f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001469576200146862001609565b5b828202905092915050565b600062001481826200150f565b91506200148e836200150f565b925082821015620014a457620014a362001609565b5b828203905092915050565b6000620014bc82620014ef565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620015395780820151818401526020810190506200151c565b8381111562001549576000848401525b50505050565b600060028204905060018216806200156857607f821691505b602082108114156200157f576200157e62001638565b5b50919050565b620015908262001708565b810181811067ffffffffffffffff82111715620015b257620015b1620016c5565b5b80604052505050565b6000620015c8826200150f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620015fe57620015fd62001609565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f796f7520686176652074696d6520666f72206120717569636b20636f6666656560008201527f2061732077652072657665616c206f7572206e65787420537461676500000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200188c81620014c3565b81146200189857600080fd5b50565b61467480620018ab6000396000f3fe6080604052600436106102465760003560e01c806355f804b311610139578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb0114610876578063d936547e146108a1578063da3ef23f146108de578063e23c5a7814610907578063e985e9c514610932578063f2fde38b1461096f57610246565b8063b88d4fde1461078f578063c623c543146107b8578063c6682862146107e3578063c87b56dd1461080e578063d3f189bd1461084b57610246565b8063736959ae116100fd578063736959ae146106bc5780637f00c7a6146106e75780638da5cb5b1461071057806395d89b411461073b578063a22cb4651461076657610246565b806355f804b3146105c35780635c975abb146105ec5780636352211e1461061757806368ffbaa61461065457806370a082311461067f57610246565b80632f745c59116101c7578063438b63001161018b578063438b6300146104cc578063454e66c8146105095780634a4c560d146105345780634f6ccce71461055d5780635234b1bb1461059a57610246565b80632f745c591461041757806330cc7ae0146104545780633ccfd60b1461047d57806340c10f191461048757806342842e0e146104a357610246565b80630b045c671161020e5780630b045c671461034257806313faede61461036d57806318160ddd14610398578063239c70ae146103c357806323b872dd146103ee57610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906132ef565b610998565b60405161027f91906138e6565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906132c2565b610a12565b005b3480156102bd57600080fd5b506102c6610aab565b6040516102d39190613901565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190613392565b610b3d565b604051610310919061385d565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613282565b610bc2565b005b34801561034e57600080fd5b50610357610cda565b6040516103649190613b83565b60405180910390f35b34801561037957600080fd5b50610382610ce0565b60405161038f9190613b83565b60405180910390f35b3480156103a457600080fd5b506103ad610ce6565b6040516103ba9190613b83565b60405180910390f35b3480156103cf57600080fd5b506103d8610cf3565b6040516103e59190613b83565b60405180910390f35b3480156103fa57600080fd5b506104156004803603810190610410919061316c565b610cf9565b005b34801561042357600080fd5b5061043e60048036038101906104399190613282565b610d59565b60405161044b9190613b83565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906130ff565b610dfe565b005b610485610ed5565b005b6104a1600480360381019061049c9190613282565b611111565b005b3480156104af57600080fd5b506104ca60048036038101906104c5919061316c565b61128d565b005b3480156104d857600080fd5b506104f360048036038101906104ee91906130ff565b6112ad565b60405161050091906138c4565b60405180910390f35b34801561051557600080fd5b5061051e61135b565b60405161052b919061385d565b60405180910390f35b34801561054057600080fd5b5061055b600480360381019061055691906130ff565b611373565b005b34801561056957600080fd5b50610584600480360381019061057f9190613392565b61144a565b6040516105919190613b83565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613392565b6114bb565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190613349565b611541565b005b3480156105f857600080fd5b506106016115d7565b60405161060e91906138e6565b60405180910390f35b34801561062357600080fd5b5061063e60048036038101906106399190613392565b6115ea565b60405161064b919061385d565b60405180910390f35b34801561066057600080fd5b5061066961169c565b604051610676919061385d565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a191906130ff565b6116b4565b6040516106b39190613b83565b60405180910390f35b3480156106c857600080fd5b506106d161176c565b6040516106de9190613b83565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613392565b611772565b005b34801561071c57600080fd5b506107256117f8565b604051610732919061385d565b60405180910390f35b34801561074757600080fd5b50610750611822565b60405161075d9190613901565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613242565b6118b4565b005b34801561079b57600080fd5b506107b660048036038101906107b191906131bf565b611a35565b005b3480156107c457600080fd5b506107cd611a97565b6040516107da9190613b83565b60405180910390f35b3480156107ef57600080fd5b506107f8611a9d565b6040516108059190613901565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613392565b611b2b565b6040516108429190613901565b60405180910390f35b34801561085757600080fd5b50610860611bd5565b60405161086d919061385d565b60405180910390f35b34801561088257600080fd5b5061088b611bed565b6040516108989190613b83565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c391906130ff565b611bf3565b6040516108d591906138e6565b60405180910390f35b3480156108ea57600080fd5b5061090560048036038101906109009190613349565b611c13565b005b34801561091357600080fd5b5061091c611ca9565b6040516109299190613b83565b60405180910390f35b34801561093e57600080fd5b506109596004803603810190610954919061312c565b611caf565b60405161096691906138e6565b60405180910390f35b34801561097b57600080fd5b50610996600480360381019061099191906130ff565b611d43565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0b5750610a0a82611e53565b5b9050919050565b610a1a611f35565b73ffffffffffffffffffffffffffffffffffffffff16610a386117f8565b73ffffffffffffffffffffffffffffffffffffffff1614610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590613ac3565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b606060008054610aba90613e81565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae690613e81565b8015610b335780601f10610b0857610100808354040283529160200191610b33565b820191906000526020600020905b815481529060010190602001808311610b1657829003601f168201915b5050505050905090565b6000610b4882611f3d565b610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e90613aa3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bcd826115ea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590613b23565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c5d611f35565b73ffffffffffffffffffffffffffffffffffffffff161480610c8c5750610c8b81610c86611f35565b611caf565b5b610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290613a23565b60405180910390fd5b610cd58383611fa9565b505050565b60115481565b600d5481565b6000600880549050905090565b60105481565b610d0a610d04611f35565b82612062565b610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090613b43565b60405180910390fd5b610d54838383612140565b505050565b6000610d64836116b4565b8210610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90613943565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e06611f35565b73ffffffffffffffffffffffffffffffffffffffff16610e246117f8565b73ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190613ac3565b60405180910390fd5b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610edd611f35565b73ffffffffffffffffffffffffffffffffffffffff16610efb6117f8565b73ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890613ac3565b60405180910390fd5b60004790506000606460115483610f689190613d3d565b610f729190613d0c565b90506000606460125484610f869190613d3d565b610f909190613d0c565b90506000606460135485610fa49190613d3d565b610fae9190613d0c565b905073773749abd03697b3b0ef7ca87225e38f50900fea73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505061100257600080fd5b73414508c939b0b78347a22d1f2de5a7747c1426a573ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505061105457600080fd5b73b5a7ddbac8dfa97c688e93cf600b8303bf88a29673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110a657600080fd5b60008183856110b59190613cb6565b6110bf9190613cb6565b856110ca9190613d97565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061110a57600080fd5b5050505050565b600061111b610ce6565b9050601460009054906101000a900460ff161561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490613923565b60405180910390fd5b6000821161117a57600080fd5b60105482111561118957600080fd5b600f5482826111989190613cb6565b11156111a357600080fd5b6111ab6117f8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112515760011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146112505781600d546112439190613d3d565b34101561124f57600080fd5b5b5b6000600190505b8281116112875761127484828461126f9190613cb6565b61239c565b808061127f90613ee4565b915050611258565b50505050565b6112a883838360405180602001604052806000815250611a35565b505050565b606060006112ba836116b4565b905060008167ffffffffffffffff8111156112d8576112d7614049565b5b6040519080825280602002602001820160405280156113065781602001602082028036833780820191505090505b50905060005b828110156113505761131e8582610d59565b8282815181106113315761133061401a565b5b602002602001018181525050808061134890613ee4565b91505061130c565b508092505050919050565b73b5a7ddbac8dfa97c688e93cf600b8303bf88a29681565b61137b611f35565b73ffffffffffffffffffffffffffffffffffffffff166113996117f8565b73ffffffffffffffffffffffffffffffffffffffff16146113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690613ac3565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611454610ce6565b8210611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613b63565b60405180910390fd5b600882815481106114a9576114a861401a565b5b90600052602060002001549050919050565b6114c3611f35565b73ffffffffffffffffffffffffffffffffffffffff166114e16117f8565b73ffffffffffffffffffffffffffffffffffffffff1614611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90613ac3565b60405180910390fd5b80600f8190555050565b611549611f35565b73ffffffffffffffffffffffffffffffffffffffff166115676117f8565b73ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613ac3565b60405180910390fd5b80600b90805190602001906115d3929190612f13565b5050565b601460009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613a63565b60405180910390fd5b80915050919050565b73414508c939b0b78347a22d1f2de5a7747c1426a581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c90613a43565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600f5481565b61177a611f35565b73ffffffffffffffffffffffffffffffffffffffff166117986117f8565b73ffffffffffffffffffffffffffffffffffffffff16146117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613ac3565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461183190613e81565b80601f016020809104026020016040519081016040528092919081815260200182805461185d90613e81565b80156118aa5780601f1061187f576101008083540402835291602001916118aa565b820191906000526020600020905b81548152906001019060200180831161188d57829003601f168201915b5050505050905090565b6118bc611f35565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561192a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611921906139e3565b60405180910390fd5b8060056000611937611f35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119e4611f35565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a2991906138e6565b60405180910390a35050565b611a46611a40611f35565b83612062565b611a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7c90613b43565b60405180910390fd5b611a91848484846123ba565b50505050565b60135481565b600c8054611aaa90613e81565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad690613e81565b8015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505050505081565b6060611b3682611f3d565b611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90613b03565b60405180910390fd5b6000611b7f612416565b90506000815111611b9f5760405180602001604052806000815250611bcd565b80611ba9846124a8565b600c604051602001611bbd9392919061382c565b6040516020818303038152906040525b915050919050565b73773749abd03697b3b0ef7ca87225e38f50900fea81565b600e5481565b60156020528060005260406000206000915054906101000a900460ff1681565b611c1b611f35565b73ffffffffffffffffffffffffffffffffffffffff16611c396117f8565b73ffffffffffffffffffffffffffffffffffffffff1614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613ac3565b60405180910390fd5b80600c9080519060200190611ca5929190612f13565b5050565b60125481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d4b611f35565b73ffffffffffffffffffffffffffffffffffffffff16611d696117f8565b73ffffffffffffffffffffffffffffffffffffffff1614611dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db690613ac3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2690613983565b60405180910390fd5b611e3881612609565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f1e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f2e5750611f2d826126cf565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661201c836115ea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061206d82611f3d565b6120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390613a03565b60405180910390fd5b60006120b7836115ea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212657508373ffffffffffffffffffffffffffffffffffffffff1661210e84610b3d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213757506121368185611caf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612160826115ea565b73ffffffffffffffffffffffffffffffffffffffff16146121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90613ae3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d906139c3565b60405180910390fd5b612231838383612739565b61223c600082611fa9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228c9190613d97565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e39190613cb6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123b682826040518060200160405280600081525061284d565b5050565b6123c5848484612140565b6123d1848484846128a8565b612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240790613963565b60405180910390fd5b50505050565b6060600b805461242590613e81565b80601f016020809104026020016040519081016040528092919081815260200182805461245190613e81565b801561249e5780601f106124735761010080835404028352916020019161249e565b820191906000526020600020905b81548152906001019060200180831161248157829003601f168201915b5050505050905090565b606060008214156124f0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612604565b600082905060005b6000821461252257808061250b90613ee4565b915050600a8261251b9190613d0c565b91506124f8565b60008167ffffffffffffffff81111561253e5761253d614049565b5b6040519080825280601f01601f1916602001820160405280156125705781602001600182028036833780820191505090505b5090505b600085146125fd576001826125899190613d97565b9150600a856125989190613f2d565b60306125a49190613cb6565b60f81b8183815181106125ba576125b961401a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125f69190613d0c565b9450612574565b8093505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612744838383611e4e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127875761278281612a3f565b6127c6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127c5576127c48382612a88565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128095761280481612bf5565b612848565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612847576128468282612cc6565b5b5b505050565b6128578383612d45565b61286460008484846128a8565b6128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a90613963565b60405180910390fd5b505050565b60006128c98473ffffffffffffffffffffffffffffffffffffffff16611e3b565b15612a32578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128f2611f35565b8786866040518563ffffffff1660e01b81526004016129149493929190613878565b602060405180830381600087803b15801561292e57600080fd5b505af192505050801561295f57506040513d601f19601f8201168201806040525081019061295c919061331c565b60015b6129e2573d806000811461298f576040519150601f19603f3d011682016040523d82523d6000602084013e612994565b606091505b506000815114156129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190613963565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a37565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a95846116b4565b612a9f9190613d97565b9050600060076000848152602001908152602001600020549050818114612b84576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c099190613d97565b9050600060096000848152602001908152602001600020549050600060088381548110612c3957612c3861401a565b5b906000526020600020015490508060088381548110612c5b57612c5a61401a565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612caa57612ca9613feb565b5b6001900381819060005260206000200160009055905550505050565b6000612cd1836116b4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac90613a83565b60405180910390fd5b612dbe81611f3d565b15612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df5906139a3565b60405180910390fd5b612e0a60008383612739565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e5a9190613cb6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f1f90613e81565b90600052602060002090601f016020900481019282612f415760008555612f88565b82601f10612f5a57805160ff1916838001178555612f88565b82800160010185558215612f88579182015b82811115612f87578251825591602001919060010190612f6c565b5b509050612f959190612f99565b5090565b5b80821115612fb2576000816000905550600101612f9a565b5090565b6000612fc9612fc484613bc3565b613b9e565b905082815260208101848484011115612fe557612fe461407d565b5b612ff0848285613e3f565b509392505050565b600061300b61300684613bf4565b613b9e565b9050828152602081018484840111156130275761302661407d565b5b613032848285613e3f565b509392505050565b600081359050613049816145e2565b92915050565b60008135905061305e816145f9565b92915050565b60008135905061307381614610565b92915050565b60008151905061308881614610565b92915050565b600082601f8301126130a3576130a2614078565b5b81356130b3848260208601612fb6565b91505092915050565b600082601f8301126130d1576130d0614078565b5b81356130e1848260208601612ff8565b91505092915050565b6000813590506130f981614627565b92915050565b60006020828403121561311557613114614087565b5b60006131238482850161303a565b91505092915050565b6000806040838503121561314357613142614087565b5b60006131518582860161303a565b92505060206131628582860161303a565b9150509250929050565b60008060006060848603121561318557613184614087565b5b60006131938682870161303a565b93505060206131a48682870161303a565b92505060406131b5868287016130ea565b9150509250925092565b600080600080608085870312156131d9576131d8614087565b5b60006131e78782880161303a565b94505060206131f88782880161303a565b9350506040613209878288016130ea565b925050606085013567ffffffffffffffff81111561322a57613229614082565b5b6132368782880161308e565b91505092959194509250565b6000806040838503121561325957613258614087565b5b60006132678582860161303a565b92505060206132788582860161304f565b9150509250929050565b6000806040838503121561329957613298614087565b5b60006132a78582860161303a565b92505060206132b8858286016130ea565b9150509250929050565b6000602082840312156132d8576132d7614087565b5b60006132e68482850161304f565b91505092915050565b60006020828403121561330557613304614087565b5b600061331384828501613064565b91505092915050565b60006020828403121561333257613331614087565b5b600061334084828501613079565b91505092915050565b60006020828403121561335f5761335e614087565b5b600082013567ffffffffffffffff81111561337d5761337c614082565b5b613389848285016130bc565b91505092915050565b6000602082840312156133a8576133a7614087565b5b60006133b6848285016130ea565b91505092915050565b60006133cb838361380e565b60208301905092915050565b6133e081613dcb565b82525050565b60006133f182613c4a565b6133fb8185613c78565b935061340683613c25565b8060005b8381101561343757815161341e88826133bf565b975061342983613c6b565b92505060018101905061340a565b5085935050505092915050565b61344d81613ddd565b82525050565b600061345e82613c55565b6134688185613c89565b9350613478818560208601613e4e565b6134818161408c565b840191505092915050565b600061349782613c60565b6134a18185613c9a565b93506134b1818560208601613e4e565b6134ba8161408c565b840191505092915050565b60006134d082613c60565b6134da8185613cab565b93506134ea818560208601613e4e565b80840191505092915050565b6000815461350381613e81565b61350d8186613cab565b9450600182166000811461352857600181146135395761356c565b60ff1983168652818601935061356c565b61354285613c35565b60005b8381101561356457815481890152600182019150602081019050613545565b838801955050505b50505092915050565b6000613582603c83613c9a565b915061358d8261409d565b604082019050919050565b60006135a5602b83613c9a565b91506135b0826140ec565b604082019050919050565b60006135c8603283613c9a565b91506135d38261413b565b604082019050919050565b60006135eb602683613c9a565b91506135f68261418a565b604082019050919050565b600061360e601c83613c9a565b9150613619826141d9565b602082019050919050565b6000613631602483613c9a565b915061363c82614202565b604082019050919050565b6000613654601983613c9a565b915061365f82614251565b602082019050919050565b6000613677602c83613c9a565b91506136828261427a565b604082019050919050565b600061369a603883613c9a565b91506136a5826142c9565b604082019050919050565b60006136bd602a83613c9a565b91506136c882614318565b604082019050919050565b60006136e0602983613c9a565b91506136eb82614367565b604082019050919050565b6000613703602083613c9a565b915061370e826143b6565b602082019050919050565b6000613726602c83613c9a565b9150613731826143df565b604082019050919050565b6000613749602083613c9a565b91506137548261442e565b602082019050919050565b600061376c602983613c9a565b915061377782614457565b604082019050919050565b600061378f602f83613c9a565b915061379a826144a6565b604082019050919050565b60006137b2602183613c9a565b91506137bd826144f5565b604082019050919050565b60006137d5603183613c9a565b91506137e082614544565b604082019050919050565b60006137f8602c83613c9a565b915061380382614593565b604082019050919050565b61381781613e35565b82525050565b61382681613e35565b82525050565b600061383882866134c5565b915061384482856134c5565b915061385082846134f6565b9150819050949350505050565b600060208201905061387260008301846133d7565b92915050565b600060808201905061388d60008301876133d7565b61389a60208301866133d7565b6138a7604083018561381d565b81810360608301526138b98184613453565b905095945050505050565b600060208201905081810360008301526138de81846133e6565b905092915050565b60006020820190506138fb6000830184613444565b92915050565b6000602082019050818103600083015261391b818461348c565b905092915050565b6000602082019050818103600083015261393c81613575565b9050919050565b6000602082019050818103600083015261395c81613598565b9050919050565b6000602082019050818103600083015261397c816135bb565b9050919050565b6000602082019050818103600083015261399c816135de565b9050919050565b600060208201905081810360008301526139bc81613601565b9050919050565b600060208201905081810360008301526139dc81613624565b9050919050565b600060208201905081810360008301526139fc81613647565b9050919050565b60006020820190508181036000830152613a1c8161366a565b9050919050565b60006020820190508181036000830152613a3c8161368d565b9050919050565b60006020820190508181036000830152613a5c816136b0565b9050919050565b60006020820190508181036000830152613a7c816136d3565b9050919050565b60006020820190508181036000830152613a9c816136f6565b9050919050565b60006020820190508181036000830152613abc81613719565b9050919050565b60006020820190508181036000830152613adc8161373c565b9050919050565b60006020820190508181036000830152613afc8161375f565b9050919050565b60006020820190508181036000830152613b1c81613782565b9050919050565b60006020820190508181036000830152613b3c816137a5565b9050919050565b60006020820190508181036000830152613b5c816137c8565b9050919050565b60006020820190508181036000830152613b7c816137eb565b9050919050565b6000602082019050613b98600083018461381d565b92915050565b6000613ba8613bb9565b9050613bb48282613eb3565b919050565b6000604051905090565b600067ffffffffffffffff821115613bde57613bdd614049565b5b613be78261408c565b9050602081019050919050565b600067ffffffffffffffff821115613c0f57613c0e614049565b5b613c188261408c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cc182613e35565b9150613ccc83613e35565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d0157613d00613f5e565b5b828201905092915050565b6000613d1782613e35565b9150613d2283613e35565b925082613d3257613d31613f8d565b5b828204905092915050565b6000613d4882613e35565b9150613d5383613e35565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8c57613d8b613f5e565b5b828202905092915050565b6000613da282613e35565b9150613dad83613e35565b925082821015613dc057613dbf613f5e565b5b828203905092915050565b6000613dd682613e15565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e6c578082015181840152602081019050613e51565b83811115613e7b576000848401525b50505050565b60006002820490506001821680613e9957607f821691505b60208210811415613ead57613eac613fbc565b5b50919050565b613ebc8261408c565b810181811067ffffffffffffffff82111715613edb57613eda614049565b5b80604052505050565b6000613eef82613e35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2257613f21613f5e565b5b600182019050919050565b6000613f3882613e35565b9150613f4383613e35565b925082613f5357613f52613f8d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f796f7520686176652074696d6520666f72206120717569636b20636f6666656560008201527f2061732077652072657665616c206f7572206e65787420537461676500000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6145eb81613dcb565b81146145f657600080fd5b50565b61460281613ddd565b811461460d57600080fd5b50565b61461981613de9565b811461462457600080fd5b50565b61463081613e35565b811461463b57600080fd5b5056fea264697066735822122078dc0ee23d821382add809e0297582962b46d37a9325cd3bb503f0d55ac44c5f64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b53796d6d6574726963616c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b53594d4d4554524943414c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a68747470733a2f2f73796d6d6574726963616c6e66742e6d7970696e6174612e636c6f75642f697066732f516d6133646f71486636574c63564e5064625556544c73593864703372617938394243706f694550686e556656432f000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c806355f804b311610139578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb0114610876578063d936547e146108a1578063da3ef23f146108de578063e23c5a7814610907578063e985e9c514610932578063f2fde38b1461096f57610246565b8063b88d4fde1461078f578063c623c543146107b8578063c6682862146107e3578063c87b56dd1461080e578063d3f189bd1461084b57610246565b8063736959ae116100fd578063736959ae146106bc5780637f00c7a6146106e75780638da5cb5b1461071057806395d89b411461073b578063a22cb4651461076657610246565b806355f804b3146105c35780635c975abb146105ec5780636352211e1461061757806368ffbaa61461065457806370a082311461067f57610246565b80632f745c59116101c7578063438b63001161018b578063438b6300146104cc578063454e66c8146105095780634a4c560d146105345780634f6ccce71461055d5780635234b1bb1461059a57610246565b80632f745c591461041757806330cc7ae0146104545780633ccfd60b1461047d57806340c10f191461048757806342842e0e146104a357610246565b80630b045c671161020e5780630b045c671461034257806313faede61461036d57806318160ddd14610398578063239c70ae146103c357806323b872dd146103ee57610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906132ef565b610998565b60405161027f91906138e6565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906132c2565b610a12565b005b3480156102bd57600080fd5b506102c6610aab565b6040516102d39190613901565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190613392565b610b3d565b604051610310919061385d565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613282565b610bc2565b005b34801561034e57600080fd5b50610357610cda565b6040516103649190613b83565b60405180910390f35b34801561037957600080fd5b50610382610ce0565b60405161038f9190613b83565b60405180910390f35b3480156103a457600080fd5b506103ad610ce6565b6040516103ba9190613b83565b60405180910390f35b3480156103cf57600080fd5b506103d8610cf3565b6040516103e59190613b83565b60405180910390f35b3480156103fa57600080fd5b506104156004803603810190610410919061316c565b610cf9565b005b34801561042357600080fd5b5061043e60048036038101906104399190613282565b610d59565b60405161044b9190613b83565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906130ff565b610dfe565b005b610485610ed5565b005b6104a1600480360381019061049c9190613282565b611111565b005b3480156104af57600080fd5b506104ca60048036038101906104c5919061316c565b61128d565b005b3480156104d857600080fd5b506104f360048036038101906104ee91906130ff565b6112ad565b60405161050091906138c4565b60405180910390f35b34801561051557600080fd5b5061051e61135b565b60405161052b919061385d565b60405180910390f35b34801561054057600080fd5b5061055b600480360381019061055691906130ff565b611373565b005b34801561056957600080fd5b50610584600480360381019061057f9190613392565b61144a565b6040516105919190613b83565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613392565b6114bb565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190613349565b611541565b005b3480156105f857600080fd5b506106016115d7565b60405161060e91906138e6565b60405180910390f35b34801561062357600080fd5b5061063e60048036038101906106399190613392565b6115ea565b60405161064b919061385d565b60405180910390f35b34801561066057600080fd5b5061066961169c565b604051610676919061385d565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a191906130ff565b6116b4565b6040516106b39190613b83565b60405180910390f35b3480156106c857600080fd5b506106d161176c565b6040516106de9190613b83565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613392565b611772565b005b34801561071c57600080fd5b506107256117f8565b604051610732919061385d565b60405180910390f35b34801561074757600080fd5b50610750611822565b60405161075d9190613901565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613242565b6118b4565b005b34801561079b57600080fd5b506107b660048036038101906107b191906131bf565b611a35565b005b3480156107c457600080fd5b506107cd611a97565b6040516107da9190613b83565b60405180910390f35b3480156107ef57600080fd5b506107f8611a9d565b6040516108059190613901565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613392565b611b2b565b6040516108429190613901565b60405180910390f35b34801561085757600080fd5b50610860611bd5565b60405161086d919061385d565b60405180910390f35b34801561088257600080fd5b5061088b611bed565b6040516108989190613b83565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c391906130ff565b611bf3565b6040516108d591906138e6565b60405180910390f35b3480156108ea57600080fd5b5061090560048036038101906109009190613349565b611c13565b005b34801561091357600080fd5b5061091c611ca9565b6040516109299190613b83565b60405180910390f35b34801561093e57600080fd5b506109596004803603810190610954919061312c565b611caf565b60405161096691906138e6565b60405180910390f35b34801561097b57600080fd5b50610996600480360381019061099191906130ff565b611d43565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0b5750610a0a82611e53565b5b9050919050565b610a1a611f35565b73ffffffffffffffffffffffffffffffffffffffff16610a386117f8565b73ffffffffffffffffffffffffffffffffffffffff1614610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590613ac3565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b606060008054610aba90613e81565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae690613e81565b8015610b335780601f10610b0857610100808354040283529160200191610b33565b820191906000526020600020905b815481529060010190602001808311610b1657829003601f168201915b5050505050905090565b6000610b4882611f3d565b610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e90613aa3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bcd826115ea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590613b23565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c5d611f35565b73ffffffffffffffffffffffffffffffffffffffff161480610c8c5750610c8b81610c86611f35565b611caf565b5b610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290613a23565b60405180910390fd5b610cd58383611fa9565b505050565b60115481565b600d5481565b6000600880549050905090565b60105481565b610d0a610d04611f35565b82612062565b610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090613b43565b60405180910390fd5b610d54838383612140565b505050565b6000610d64836116b4565b8210610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90613943565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e06611f35565b73ffffffffffffffffffffffffffffffffffffffff16610e246117f8565b73ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190613ac3565b60405180910390fd5b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610edd611f35565b73ffffffffffffffffffffffffffffffffffffffff16610efb6117f8565b73ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890613ac3565b60405180910390fd5b60004790506000606460115483610f689190613d3d565b610f729190613d0c565b90506000606460125484610f869190613d3d565b610f909190613d0c565b90506000606460135485610fa49190613d3d565b610fae9190613d0c565b905073773749abd03697b3b0ef7ca87225e38f50900fea73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505061100257600080fd5b73414508c939b0b78347a22d1f2de5a7747c1426a573ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505061105457600080fd5b73b5a7ddbac8dfa97c688e93cf600b8303bf88a29673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110a657600080fd5b60008183856110b59190613cb6565b6110bf9190613cb6565b856110ca9190613d97565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061110a57600080fd5b5050505050565b600061111b610ce6565b9050601460009054906101000a900460ff161561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490613923565b60405180910390fd5b6000821161117a57600080fd5b60105482111561118957600080fd5b600f5482826111989190613cb6565b11156111a357600080fd5b6111ab6117f8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112515760011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146112505781600d546112439190613d3d565b34101561124f57600080fd5b5b5b6000600190505b8281116112875761127484828461126f9190613cb6565b61239c565b808061127f90613ee4565b915050611258565b50505050565b6112a883838360405180602001604052806000815250611a35565b505050565b606060006112ba836116b4565b905060008167ffffffffffffffff8111156112d8576112d7614049565b5b6040519080825280602002602001820160405280156113065781602001602082028036833780820191505090505b50905060005b828110156113505761131e8582610d59565b8282815181106113315761133061401a565b5b602002602001018181525050808061134890613ee4565b91505061130c565b508092505050919050565b73b5a7ddbac8dfa97c688e93cf600b8303bf88a29681565b61137b611f35565b73ffffffffffffffffffffffffffffffffffffffff166113996117f8565b73ffffffffffffffffffffffffffffffffffffffff16146113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690613ac3565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611454610ce6565b8210611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613b63565b60405180910390fd5b600882815481106114a9576114a861401a565b5b90600052602060002001549050919050565b6114c3611f35565b73ffffffffffffffffffffffffffffffffffffffff166114e16117f8565b73ffffffffffffffffffffffffffffffffffffffff1614611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90613ac3565b60405180910390fd5b80600f8190555050565b611549611f35565b73ffffffffffffffffffffffffffffffffffffffff166115676117f8565b73ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613ac3565b60405180910390fd5b80600b90805190602001906115d3929190612f13565b5050565b601460009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613a63565b60405180910390fd5b80915050919050565b73414508c939b0b78347a22d1f2de5a7747c1426a581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c90613a43565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600f5481565b61177a611f35565b73ffffffffffffffffffffffffffffffffffffffff166117986117f8565b73ffffffffffffffffffffffffffffffffffffffff16146117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613ac3565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461183190613e81565b80601f016020809104026020016040519081016040528092919081815260200182805461185d90613e81565b80156118aa5780601f1061187f576101008083540402835291602001916118aa565b820191906000526020600020905b81548152906001019060200180831161188d57829003601f168201915b5050505050905090565b6118bc611f35565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561192a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611921906139e3565b60405180910390fd5b8060056000611937611f35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119e4611f35565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a2991906138e6565b60405180910390a35050565b611a46611a40611f35565b83612062565b611a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7c90613b43565b60405180910390fd5b611a91848484846123ba565b50505050565b60135481565b600c8054611aaa90613e81565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad690613e81565b8015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505050505081565b6060611b3682611f3d565b611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90613b03565b60405180910390fd5b6000611b7f612416565b90506000815111611b9f5760405180602001604052806000815250611bcd565b80611ba9846124a8565b600c604051602001611bbd9392919061382c565b6040516020818303038152906040525b915050919050565b73773749abd03697b3b0ef7ca87225e38f50900fea81565b600e5481565b60156020528060005260406000206000915054906101000a900460ff1681565b611c1b611f35565b73ffffffffffffffffffffffffffffffffffffffff16611c396117f8565b73ffffffffffffffffffffffffffffffffffffffff1614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613ac3565b60405180910390fd5b80600c9080519060200190611ca5929190612f13565b5050565b60125481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d4b611f35565b73ffffffffffffffffffffffffffffffffffffffff16611d696117f8565b73ffffffffffffffffffffffffffffffffffffffff1614611dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db690613ac3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2690613983565b60405180910390fd5b611e3881612609565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f1e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f2e5750611f2d826126cf565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661201c836115ea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061206d82611f3d565b6120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390613a03565b60405180910390fd5b60006120b7836115ea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212657508373ffffffffffffffffffffffffffffffffffffffff1661210e84610b3d565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213757506121368185611caf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612160826115ea565b73ffffffffffffffffffffffffffffffffffffffff16146121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90613ae3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d906139c3565b60405180910390fd5b612231838383612739565b61223c600082611fa9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228c9190613d97565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e39190613cb6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123b682826040518060200160405280600081525061284d565b5050565b6123c5848484612140565b6123d1848484846128a8565b612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240790613963565b60405180910390fd5b50505050565b6060600b805461242590613e81565b80601f016020809104026020016040519081016040528092919081815260200182805461245190613e81565b801561249e5780601f106124735761010080835404028352916020019161249e565b820191906000526020600020905b81548152906001019060200180831161248157829003601f168201915b5050505050905090565b606060008214156124f0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612604565b600082905060005b6000821461252257808061250b90613ee4565b915050600a8261251b9190613d0c565b91506124f8565b60008167ffffffffffffffff81111561253e5761253d614049565b5b6040519080825280601f01601f1916602001820160405280156125705781602001600182028036833780820191505090505b5090505b600085146125fd576001826125899190613d97565b9150600a856125989190613f2d565b60306125a49190613cb6565b60f81b8183815181106125ba576125b961401a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125f69190613d0c565b9450612574565b8093505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612744838383611e4e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127875761278281612a3f565b6127c6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127c5576127c48382612a88565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128095761280481612bf5565b612848565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612847576128468282612cc6565b5b5b505050565b6128578383612d45565b61286460008484846128a8565b6128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a90613963565b60405180910390fd5b505050565b60006128c98473ffffffffffffffffffffffffffffffffffffffff16611e3b565b15612a32578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128f2611f35565b8786866040518563ffffffff1660e01b81526004016129149493929190613878565b602060405180830381600087803b15801561292e57600080fd5b505af192505050801561295f57506040513d601f19601f8201168201806040525081019061295c919061331c565b60015b6129e2573d806000811461298f576040519150601f19603f3d011682016040523d82523d6000602084013e612994565b606091505b506000815114156129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190613963565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a37565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a95846116b4565b612a9f9190613d97565b9050600060076000848152602001908152602001600020549050818114612b84576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c099190613d97565b9050600060096000848152602001908152602001600020549050600060088381548110612c3957612c3861401a565b5b906000526020600020015490508060088381548110612c5b57612c5a61401a565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612caa57612ca9613feb565b5b6001900381819060005260206000200160009055905550505050565b6000612cd1836116b4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac90613a83565b60405180910390fd5b612dbe81611f3d565b15612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df5906139a3565b60405180910390fd5b612e0a60008383612739565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e5a9190613cb6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f1f90613e81565b90600052602060002090601f016020900481019282612f415760008555612f88565b82601f10612f5a57805160ff1916838001178555612f88565b82800160010185558215612f88579182015b82811115612f87578251825591602001919060010190612f6c565b5b509050612f959190612f99565b5090565b5b80821115612fb2576000816000905550600101612f9a565b5090565b6000612fc9612fc484613bc3565b613b9e565b905082815260208101848484011115612fe557612fe461407d565b5b612ff0848285613e3f565b509392505050565b600061300b61300684613bf4565b613b9e565b9050828152602081018484840111156130275761302661407d565b5b613032848285613e3f565b509392505050565b600081359050613049816145e2565b92915050565b60008135905061305e816145f9565b92915050565b60008135905061307381614610565b92915050565b60008151905061308881614610565b92915050565b600082601f8301126130a3576130a2614078565b5b81356130b3848260208601612fb6565b91505092915050565b600082601f8301126130d1576130d0614078565b5b81356130e1848260208601612ff8565b91505092915050565b6000813590506130f981614627565b92915050565b60006020828403121561311557613114614087565b5b60006131238482850161303a565b91505092915050565b6000806040838503121561314357613142614087565b5b60006131518582860161303a565b92505060206131628582860161303a565b9150509250929050565b60008060006060848603121561318557613184614087565b5b60006131938682870161303a565b93505060206131a48682870161303a565b92505060406131b5868287016130ea565b9150509250925092565b600080600080608085870312156131d9576131d8614087565b5b60006131e78782880161303a565b94505060206131f88782880161303a565b9350506040613209878288016130ea565b925050606085013567ffffffffffffffff81111561322a57613229614082565b5b6132368782880161308e565b91505092959194509250565b6000806040838503121561325957613258614087565b5b60006132678582860161303a565b92505060206132788582860161304f565b9150509250929050565b6000806040838503121561329957613298614087565b5b60006132a78582860161303a565b92505060206132b8858286016130ea565b9150509250929050565b6000602082840312156132d8576132d7614087565b5b60006132e68482850161304f565b91505092915050565b60006020828403121561330557613304614087565b5b600061331384828501613064565b91505092915050565b60006020828403121561333257613331614087565b5b600061334084828501613079565b91505092915050565b60006020828403121561335f5761335e614087565b5b600082013567ffffffffffffffff81111561337d5761337c614082565b5b613389848285016130bc565b91505092915050565b6000602082840312156133a8576133a7614087565b5b60006133b6848285016130ea565b91505092915050565b60006133cb838361380e565b60208301905092915050565b6133e081613dcb565b82525050565b60006133f182613c4a565b6133fb8185613c78565b935061340683613c25565b8060005b8381101561343757815161341e88826133bf565b975061342983613c6b565b92505060018101905061340a565b5085935050505092915050565b61344d81613ddd565b82525050565b600061345e82613c55565b6134688185613c89565b9350613478818560208601613e4e565b6134818161408c565b840191505092915050565b600061349782613c60565b6134a18185613c9a565b93506134b1818560208601613e4e565b6134ba8161408c565b840191505092915050565b60006134d082613c60565b6134da8185613cab565b93506134ea818560208601613e4e565b80840191505092915050565b6000815461350381613e81565b61350d8186613cab565b9450600182166000811461352857600181146135395761356c565b60ff1983168652818601935061356c565b61354285613c35565b60005b8381101561356457815481890152600182019150602081019050613545565b838801955050505b50505092915050565b6000613582603c83613c9a565b915061358d8261409d565b604082019050919050565b60006135a5602b83613c9a565b91506135b0826140ec565b604082019050919050565b60006135c8603283613c9a565b91506135d38261413b565b604082019050919050565b60006135eb602683613c9a565b91506135f68261418a565b604082019050919050565b600061360e601c83613c9a565b9150613619826141d9565b602082019050919050565b6000613631602483613c9a565b915061363c82614202565b604082019050919050565b6000613654601983613c9a565b915061365f82614251565b602082019050919050565b6000613677602c83613c9a565b91506136828261427a565b604082019050919050565b600061369a603883613c9a565b91506136a5826142c9565b604082019050919050565b60006136bd602a83613c9a565b91506136c882614318565b604082019050919050565b60006136e0602983613c9a565b91506136eb82614367565b604082019050919050565b6000613703602083613c9a565b915061370e826143b6565b602082019050919050565b6000613726602c83613c9a565b9150613731826143df565b604082019050919050565b6000613749602083613c9a565b91506137548261442e565b602082019050919050565b600061376c602983613c9a565b915061377782614457565b604082019050919050565b600061378f602f83613c9a565b915061379a826144a6565b604082019050919050565b60006137b2602183613c9a565b91506137bd826144f5565b604082019050919050565b60006137d5603183613c9a565b91506137e082614544565b604082019050919050565b60006137f8602c83613c9a565b915061380382614593565b604082019050919050565b61381781613e35565b82525050565b61382681613e35565b82525050565b600061383882866134c5565b915061384482856134c5565b915061385082846134f6565b9150819050949350505050565b600060208201905061387260008301846133d7565b92915050565b600060808201905061388d60008301876133d7565b61389a60208301866133d7565b6138a7604083018561381d565b81810360608301526138b98184613453565b905095945050505050565b600060208201905081810360008301526138de81846133e6565b905092915050565b60006020820190506138fb6000830184613444565b92915050565b6000602082019050818103600083015261391b818461348c565b905092915050565b6000602082019050818103600083015261393c81613575565b9050919050565b6000602082019050818103600083015261395c81613598565b9050919050565b6000602082019050818103600083015261397c816135bb565b9050919050565b6000602082019050818103600083015261399c816135de565b9050919050565b600060208201905081810360008301526139bc81613601565b9050919050565b600060208201905081810360008301526139dc81613624565b9050919050565b600060208201905081810360008301526139fc81613647565b9050919050565b60006020820190508181036000830152613a1c8161366a565b9050919050565b60006020820190508181036000830152613a3c8161368d565b9050919050565b60006020820190508181036000830152613a5c816136b0565b9050919050565b60006020820190508181036000830152613a7c816136d3565b9050919050565b60006020820190508181036000830152613a9c816136f6565b9050919050565b60006020820190508181036000830152613abc81613719565b9050919050565b60006020820190508181036000830152613adc8161373c565b9050919050565b60006020820190508181036000830152613afc8161375f565b9050919050565b60006020820190508181036000830152613b1c81613782565b9050919050565b60006020820190508181036000830152613b3c816137a5565b9050919050565b60006020820190508181036000830152613b5c816137c8565b9050919050565b60006020820190508181036000830152613b7c816137eb565b9050919050565b6000602082019050613b98600083018461381d565b92915050565b6000613ba8613bb9565b9050613bb48282613eb3565b919050565b6000604051905090565b600067ffffffffffffffff821115613bde57613bdd614049565b5b613be78261408c565b9050602081019050919050565b600067ffffffffffffffff821115613c0f57613c0e614049565b5b613c188261408c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cc182613e35565b9150613ccc83613e35565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d0157613d00613f5e565b5b828201905092915050565b6000613d1782613e35565b9150613d2283613e35565b925082613d3257613d31613f8d565b5b828204905092915050565b6000613d4882613e35565b9150613d5383613e35565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8c57613d8b613f5e565b5b828202905092915050565b6000613da282613e35565b9150613dad83613e35565b925082821015613dc057613dbf613f5e565b5b828203905092915050565b6000613dd682613e15565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e6c578082015181840152602081019050613e51565b83811115613e7b576000848401525b50505050565b60006002820490506001821680613e9957607f821691505b60208210811415613ead57613eac613fbc565b5b50919050565b613ebc8261408c565b810181811067ffffffffffffffff82111715613edb57613eda614049565b5b80604052505050565b6000613eef82613e35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2257613f21613f5e565b5b600182019050919050565b6000613f3882613e35565b9150613f4383613e35565b925082613f5357613f52613f8d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f796f7520686176652074696d6520666f72206120717569636b20636f6666656560008201527f2061732077652072657665616c206f7572206e65787420537461676500000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6145eb81613dcb565b81146145f657600080fd5b50565b61460281613ddd565b811461460d57600080fd5b50565b61461981613de9565b811461462457600080fd5b50565b61463081613e35565b811461463b57600080fd5b5056fea264697066735822122078dc0ee23d821382add809e0297582962b46d37a9325cd3bb503f0d55ac44c5f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b53796d6d6574726963616c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b53594d4d4554524943414c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a68747470733a2f2f73796d6d6574726963616c6e66742e6d7970696e6174612e636c6f75642f697066732f516d6133646f71486636574c63564e5064625556544c73593864703372617938394243706f694550686e556656432f000000000000
-----Decoded View---------------
Arg [0] : _name (string): Symmetrical
Arg [1] : _symbol (string): SYMMETRICAL
Arg [2] : _initBaseURI (string): https://symmetricalnft.mypinata.cloud/ipfs/Qma3doqHf6WLcVNPdbUVTLsY8dp3ray89BCpoiEPhnUfVC/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [4] : 53796d6d6574726963616c000000000000000000000000000000000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [6] : 53594d4d4554524943414c000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000005a
Arg [8] : 68747470733a2f2f73796d6d6574726963616c6e66742e6d7970696e6174612e
Arg [9] : 636c6f75642f697066732f516d6133646f71486636574c63564e506462555654
Arg [10] : 4c73593864703372617938394243706f694550686e556656432f000000000000
Deployed Bytecode Sourcemap
43129:3970:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36906:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46052:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24798:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26357:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25880:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43449:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43285:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37546:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43411:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27247:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37214:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46371:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46477:619;;;:::i;:::-;;44294:583;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27657:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44883:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43865:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46271:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37736:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46134:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45820:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43605:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24492:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43775:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24222:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43359:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45698:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3943:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24967:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26650:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27913:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43528:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43243:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45237:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43684:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43322:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43636:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45924:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43489:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27016:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4746:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36906:224;37008:4;37047:35;37032:50;;;:11;:50;;;;:90;;;;37086:36;37110:11;37086:23;:36::i;:::-;37032:90;37025:97;;36906:224;;;:::o;46052:73::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46113:6:::1;46104;;:15;;;;;;;;;;;;;;;;;;46052:73:::0;:::o;24798:100::-;24852:13;24885:5;24878:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24798:100;:::o;26357:221::-;26433:7;26461:16;26469:7;26461;:16::i;:::-;26453:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26546:15;:24;26562:7;26546:24;;;;;;;;;;;;;;;;;;;;;26539:31;;26357:221;;;:::o;25880:411::-;25961:13;25977:23;25992:7;25977:14;:23::i;:::-;25961:39;;26025:5;26019:11;;:2;:11;;;;26011:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26119:5;26103:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26128:37;26145:5;26152:12;:10;:12::i;:::-;26128:16;:37::i;:::-;26103:62;26081:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26262:21;26271:2;26275:7;26262:8;:21::i;:::-;25950:341;25880:411;;:::o;43449:35::-;;;;:::o;43285:32::-;;;;:::o;37546:113::-;37607:7;37634:10;:17;;;;37627:24;;37546:113;:::o;43411:33::-;;;;:::o;27247:339::-;27442:41;27461:12;:10;:12::i;:::-;27475:7;27442:18;:41::i;:::-;27434:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27550:28;27560:4;27566:2;27570:7;27550:9;:28::i;:::-;27247:339;;;:::o;37214:256::-;37311:7;37347:23;37364:5;37347:16;:23::i;:::-;37339:5;:31;37331:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37436:12;:19;37449:5;37436:19;;;;;;;;;;;;;;;:26;37456:5;37436:26;;;;;;;;;;;;37429:33;;37214:256;;;;:::o;46371:100::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46460:5:::1;46439:11;:18;46451:5;46439:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;46371:100:::0;:::o;46477:619::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46531:15:::1;46549:21;46531:39;;46579:19;43597:3;46612:15;;46602:7;:25;;;;:::i;:::-;46601:37;;;;:::i;:::-;46579:59;;46647:18;43597:3;46679:14;;46669:7;:24;;;;:::i;:::-;46668:36;;;;:::i;:::-;46647:57;;46713:19;43597:3;46746:15;;46736:7;:25;;;;:::i;:::-;46735:37;;;;:::i;:::-;46713:59;;43728:42;46789:31;;:44;46821:11;46789:44;;;;;;;;;;;;;;;;;;;;;;;46781:53;;;::::0;::::1;;43818:42;46851:30;;:42;46882:10;46851:42;;;;;;;;;;;;;;;;;;;;;;;46843:51;;;::::0;::::1;;43909:42;46911:31;;:44;46943:11;46911:44;;;;;;;;;;;;;;;;;;;;;;;46903:53;;;::::0;::::1;;46973:15;47029:11;47016:10;47002:11;:24;;;;:::i;:::-;:38;;;;:::i;:::-;46991:7;:50;;;;:::i;:::-;46973:68;;47064:10;47056:24;;:33;47081:7;47056:33;;;;;;;;;;;;;;;;;;;;;;;47048:42;;;::::0;::::1;;46522:574;;;;;46477:619::o:0;44294:583::-;44364:14;44381:13;:11;:13::i;:::-;44364:30;;44410:6;;;;;;;;;;;44409:7;44401:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;44509:1;44495:11;:15;44487:24;;;;;;44541:13;;44526:11;:28;;44518:37;;;;;;44594:25;;44579:11;44570:6;:20;;;;:::i;:::-;:49;;44562:59;;;;;;44650:7;:5;:7::i;:::-;44636:21;;:10;:21;;;44632:146;;44700:4;44673:31;;:11;:23;44685:10;44673:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;44670:101;;44747:11;44740:4;;:18;;;;:::i;:::-;44727:9;:31;;44719:40;;;;;;44670:101;44632:146;44791:9;44803:1;44791:13;;44786:86;44811:11;44806:1;:16;44786:86;;44838:26;44848:3;44862:1;44853:6;:10;;;;:::i;:::-;44838:9;:26::i;:::-;44824:3;;;;;:::i;:::-;;;;44786:86;;;;44357:520;44294:583;;:::o;27657:185::-;27795:39;27812:4;27818:2;27822:7;27795:39;;;;;;;;;;;;:16;:39::i;:::-;27657:185;;;:::o;44883:348::-;44958:16;44986:23;45012:17;45022:6;45012:9;:17::i;:::-;44986:43;;45036:25;45078:15;45064:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45036:58;;45106:9;45101:103;45121:15;45117:1;:19;45101:103;;;45166:30;45186:6;45194:1;45166:19;:30::i;:::-;45152:8;45161:1;45152:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45138:3;;;;;:::i;:::-;;;;45101:103;;;;45217:8;45210:15;;;;44883:348;;;:::o;43865:86::-;43909:42;43865:86;:::o;46271:93::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46354:4:::1;46333:11;:18;46345:5;46333:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;46271:93:::0;:::o;37736:233::-;37811:7;37847:30;:28;:30::i;:::-;37839:5;:38;37831:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37944:10;37955:5;37944:17;;;;;;;;:::i;:::-;;;;;;;;;;37937:24;;37736:233;;;:::o;46134:131::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46241:18:::1;46213:25;:46;;;;46134:131:::0;:::o;45820:98::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45901:11:::1;45891:7;:21;;;;;;;;;;;;:::i;:::-;;45820:98:::0;:::o;43605:26::-;;;;;;;;;;;;;:::o;24492:239::-;24564:7;24584:13;24600:7;:16;24608:7;24600:16;;;;;;;;;;;;;;;;;;;;;24584:32;;24652:1;24635:19;;:5;:19;;;;24627:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24718:5;24711:12;;;24492:239;;;:::o;43775:85::-;43818:42;43775:85;:::o;24222:208::-;24294:7;24339:1;24322:19;;:5;:19;;;;24314:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24406:9;:16;24416:5;24406:16;;;;;;;;;;;;;;;;24399:23;;24222:208;;;:::o;43359:47::-;;;;:::o;45698:116::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45791:17:::1;45775:13;:33;;;;45698:116:::0;:::o;3943:87::-;3989:7;4016:6;;;;;;;;;;;4009:13;;3943:87;:::o;24967:104::-;25023:13;25056:7;25049:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24967:104;:::o;26650:295::-;26765:12;:10;:12::i;:::-;26753:24;;:8;:24;;;;26745:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26865:8;26820:18;:32;26839:12;:10;:12::i;:::-;26820:32;;;;;;;;;;;;;;;:42;26853:8;26820:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26918:8;26889:48;;26904:12;:10;:12::i;:::-;26889:48;;;26928:8;26889:48;;;;;;:::i;:::-;;;;;;;;26650:295;;:::o;27913:328::-;28088:41;28107:12;:10;:12::i;:::-;28121:7;28088:18;:41::i;:::-;28080:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28194:39;28208:4;28214:2;28218:7;28227:5;28194:13;:39::i;:::-;27913:328;;;;:::o;43528:35::-;;;;:::o;43243:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45237:429::-;45335:13;45376:16;45384:7;45376;:16::i;:::-;45360:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45472:28;45503:10;:8;:10::i;:::-;45472:41;;45558:1;45533:14;45527:28;:32;:133;;;;;;;;;;;;;;;;;45595:14;45611:18;:7;:16;:18::i;:::-;45631:13;45578:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45527:133;45520:140;;;45237:429;;;:::o;43684:86::-;43728:42;43684:86;:::o;43322:32::-;;;;:::o;43636:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;45924:122::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46023:17:::1;46007:13;:33;;;;;;;;;;;;:::i;:::-;;45924:122:::0;:::o;43489:34::-;;;;:::o;27016:164::-;27113:4;27137:18;:25;27156:5;27137:25;;;;;;;;;;;;;;;:35;27163:8;27137:35;;;;;;;;;;;;;;;;;;;;;;;;;27130:42;;27016:164;;;;:::o;4746:192::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4855:1:::1;4835:22;;:8;:22;;;;4827:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4911:19;4921:8;4911:9;:19::i;:::-;4746:192:::0;:::o;5892:387::-;5952:4;6160:12;6227:7;6215:20;6207:28;;6270:1;6263:4;:8;6256:15;;;5892:387;;;:::o;35843:126::-;;;;:::o;23853:305::-;23955:4;24007:25;23992:40;;;:11;:40;;;;:105;;;;24064:33;24049:48;;;:11;:48;;;;23992:105;:158;;;;24114:36;24138:11;24114:23;:36::i;:::-;23992:158;23972:178;;23853:305;;;:::o;2731:98::-;2784:7;2811:10;2804:17;;2731:98;:::o;29751:127::-;29816:4;29868:1;29840:30;;:7;:16;29848:7;29840:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29833:37;;29751:127;;;:::o;33733:174::-;33835:2;33808:15;:24;33824:7;33808:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33891:7;33887:2;33853:46;;33862:23;33877:7;33862:14;:23::i;:::-;33853:46;;;;;;;;;;;;33733:174;;:::o;30045:348::-;30138:4;30163:16;30171:7;30163;:16::i;:::-;30155:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30239:13;30255:23;30270:7;30255:14;:23::i;:::-;30239:39;;30308:5;30297:16;;:7;:16;;;:51;;;;30341:7;30317:31;;:20;30329:7;30317:11;:20::i;:::-;:31;;;30297:51;:87;;;;30352:32;30369:5;30376:7;30352:16;:32::i;:::-;30297:87;30289:96;;;30045:348;;;;:::o;33037:578::-;33196:4;33169:31;;:23;33184:7;33169:14;:23::i;:::-;:31;;;33161:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33279:1;33265:16;;:2;:16;;;;33257:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33335:39;33356:4;33362:2;33366:7;33335:20;:39::i;:::-;33439:29;33456:1;33460:7;33439:8;:29::i;:::-;33500:1;33481:9;:15;33491:4;33481:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33529:1;33512:9;:13;33522:2;33512:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33560:2;33541:7;:16;33549:7;33541:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33599:7;33595:2;33580:27;;33589:4;33580:27;;;;;;;;;;;;33037:578;;;:::o;30735:110::-;30811:26;30821:2;30825:7;30811:26;;;;;;;;;;;;:9;:26::i;:::-;30735:110;;:::o;29123:315::-;29280:28;29290:4;29296:2;29300:7;29280:9;:28::i;:::-;29327:48;29350:4;29356:2;29360:7;29369:5;29327:22;:48::i;:::-;29319:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29123:315;;;;:::o;44173:102::-;44233:13;44262:7;44255:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44173:102;:::o;347:723::-;403:13;633:1;624:5;:10;620:53;;;651:10;;;;;;;;;;;;;;;;;;;;;620:53;683:12;698:5;683:20;;714:14;739:78;754:1;746:4;:9;739:78;;772:8;;;;;:::i;:::-;;;;803:2;795:10;;;;;:::i;:::-;;;739:78;;;827:19;859:6;849:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;827:39;;877:154;893:1;884:5;:10;877:154;;921:1;911:11;;;;;:::i;:::-;;;988:2;980:5;:10;;;;:::i;:::-;967:2;:24;;;;:::i;:::-;954:39;;937:6;944;937:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1017:2;1008:11;;;;;:::i;:::-;;;877:154;;;1055:6;1041:21;;;;;347:723;;;;:::o;4946:173::-;5002:16;5021:6;;;;;;;;;;;5002:25;;5047:8;5038:6;;:17;;;;;;;;;;;;;;;;;;5102:8;5071:40;;5092:8;5071:40;;;;;;;;;;;;4991:128;4946:173;:::o;15832:157::-;15917:4;15956:25;15941:40;;;:11;:40;;;;15934:47;;15832:157;;;:::o;38582:589::-;38726:45;38753:4;38759:2;38763:7;38726:26;:45::i;:::-;38804:1;38788:18;;:4;:18;;;38784:187;;;38823:40;38855:7;38823:31;:40::i;:::-;38784:187;;;38893:2;38885:10;;:4;:10;;;38881:90;;38912:47;38945:4;38951:7;38912:32;:47::i;:::-;38881:90;38784:187;38999:1;38985:16;;:2;:16;;;38981:183;;;39018:45;39055:7;39018:36;:45::i;:::-;38981:183;;;39091:4;39085:10;;:2;:10;;;39081:83;;39112:40;39140:2;39144:7;39112:27;:40::i;:::-;39081:83;38981:183;38582:589;;;:::o;31072:321::-;31202:18;31208:2;31212:7;31202:5;:18::i;:::-;31253:54;31284:1;31288:2;31292:7;31301:5;31253:22;:54::i;:::-;31231:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31072:321;;;:::o;34472:799::-;34627:4;34648:15;:2;:13;;;:15::i;:::-;34644:620;;;34700:2;34684:36;;;34721:12;:10;:12::i;:::-;34735:4;34741:7;34750:5;34684:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34680:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34943:1;34926:6;:13;:18;34922:272;;;34969:60;;;;;;;;;;:::i;:::-;;;;;;;;34922:272;35144:6;35138:13;35129:6;35125:2;35121:15;35114:38;34680:529;34817:41;;;34807:51;;;:6;:51;;;;34800:58;;;;;34644:620;35248:4;35241:11;;34472:799;;;;;;;:::o;39894:164::-;39998:10;:17;;;;39971:15;:24;39987:7;39971:24;;;;;;;;;;;:44;;;;40026:10;40042:7;40026:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39894:164;:::o;40685:988::-;40951:22;41001:1;40976:22;40993:4;40976:16;:22::i;:::-;:26;;;;:::i;:::-;40951:51;;41013:18;41034:17;:26;41052:7;41034:26;;;;;;;;;;;;41013:47;;41181:14;41167:10;:28;41163:328;;41212:19;41234:12;:18;41247:4;41234:18;;;;;;;;;;;;;;;:34;41253:14;41234:34;;;;;;;;;;;;41212:56;;41318:11;41285:12;:18;41298:4;41285:18;;;;;;;;;;;;;;;:30;41304:10;41285:30;;;;;;;;;;;:44;;;;41435:10;41402:17;:30;41420:11;41402:30;;;;;;;;;;;:43;;;;41197:294;41163:328;41587:17;:26;41605:7;41587:26;;;;;;;;;;;41580:33;;;41631:12;:18;41644:4;41631:18;;;;;;;;;;;;;;;:34;41650:14;41631:34;;;;;;;;;;;41624:41;;;40766:907;;40685:988;;:::o;41968:1079::-;42221:22;42266:1;42246:10;:17;;;;:21;;;;:::i;:::-;42221:46;;42278:18;42299:15;:24;42315:7;42299:24;;;;;;;;;;;;42278:45;;42650:19;42672:10;42683:14;42672:26;;;;;;;;:::i;:::-;;;;;;;;;;42650:48;;42736:11;42711:10;42722;42711:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42847:10;42816:15;:28;42832:11;42816:28;;;;;;;;;;;:41;;;;42988:15;:24;43004:7;42988:24;;;;;;;;;;;42981:31;;;43023:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42039:1008;;;41968:1079;:::o;39472:221::-;39557:14;39574:20;39591:2;39574:16;:20::i;:::-;39557:37;;39632:7;39605:12;:16;39618:2;39605:16;;;;;;;;;;;;;;;:24;39622:6;39605:24;;;;;;;;;;;:34;;;;39679:6;39650:17;:26;39668:7;39650:26;;;;;;;;;;;:35;;;;39546:147;39472:221;;:::o;31729:382::-;31823:1;31809:16;;:2;:16;;;;31801:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31882:16;31890:7;31882;:16::i;:::-;31881:17;31873:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31944:45;31973:1;31977:2;31981:7;31944:20;:45::i;:::-;32019:1;32002:9;:13;32012:2;32002:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32050:2;32031:7;:16;32039:7;32031:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32095:7;32091:2;32070:33;;32087:1;32070:33;;;;;;;;;;;;31729:382;;:::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:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9822:845::-;9925:3;9962:5;9956:12;9991:36;10017:9;9991:36;:::i;:::-;10043:89;10125:6;10120:3;10043:89;:::i;:::-;10036:96;;10163:1;10152:9;10148:17;10179:1;10174:137;;;;10325:1;10320:341;;;;10141:520;;10174:137;10258:4;10254:9;10243;10239:25;10234:3;10227:38;10294:6;10289:3;10285:16;10278:23;;10174:137;;10320:341;10387:38;10419:5;10387:38;:::i;:::-;10447:1;10461:154;10475:6;10472:1;10469:13;10461:154;;;10549:7;10543:14;10539:1;10534:3;10530:11;10523:35;10599:1;10590:7;10586:15;10575:26;;10497:4;10494:1;10490:12;10485:17;;10461:154;;;10644:6;10639:3;10635:16;10628:23;;10327:334;;10141:520;;9929:738;;9822:845;;;;:::o;10673:366::-;10815:3;10836:67;10900:2;10895:3;10836:67;:::i;:::-;10829:74;;10912:93;11001:3;10912:93;:::i;:::-;11030:2;11025:3;11021:12;11014:19;;10673:366;;;:::o;11045:::-;11187:3;11208:67;11272:2;11267:3;11208:67;:::i;:::-;11201:74;;11284:93;11373:3;11284:93;:::i;:::-;11402:2;11397:3;11393:12;11386:19;;11045:366;;;:::o;11417:::-;11559:3;11580:67;11644:2;11639:3;11580:67;:::i;:::-;11573:74;;11656:93;11745:3;11656:93;:::i;:::-;11774:2;11769:3;11765:12;11758:19;;11417:366;;;:::o;11789:::-;11931:3;11952:67;12016:2;12011:3;11952:67;:::i;:::-;11945:74;;12028:93;12117:3;12028:93;:::i;:::-;12146:2;12141:3;12137:12;12130:19;;11789:366;;;:::o;12161:::-;12303:3;12324:67;12388:2;12383:3;12324:67;:::i;:::-;12317:74;;12400:93;12489:3;12400:93;:::i;:::-;12518:2;12513:3;12509:12;12502:19;;12161:366;;;:::o;12533:::-;12675:3;12696:67;12760:2;12755:3;12696:67;:::i;:::-;12689:74;;12772:93;12861:3;12772:93;:::i;:::-;12890:2;12885:3;12881:12;12874:19;;12533:366;;;:::o;12905:::-;13047:3;13068:67;13132:2;13127:3;13068:67;:::i;:::-;13061:74;;13144:93;13233:3;13144:93;:::i;:::-;13262:2;13257:3;13253:12;13246:19;;12905:366;;;:::o;13277:::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:::-;13791:3;13812:67;13876:2;13871:3;13812:67;:::i;:::-;13805:74;;13888:93;13977:3;13888:93;:::i;:::-;14006:2;14001:3;13997:12;13990:19;;13649:366;;;:::o;14021:::-;14163:3;14184:67;14248:2;14243:3;14184:67;:::i;:::-;14177:74;;14260:93;14349:3;14260:93;:::i;:::-;14378:2;14373:3;14369:12;14362:19;;14021:366;;;:::o;14393:::-;14535:3;14556:67;14620:2;14615:3;14556:67;:::i;:::-;14549:74;;14632:93;14721:3;14632:93;:::i;:::-;14750:2;14745:3;14741:12;14734:19;;14393:366;;;:::o;14765:::-;14907:3;14928:67;14992:2;14987:3;14928:67;:::i;:::-;14921:74;;15004:93;15093:3;15004:93;:::i;:::-;15122:2;15117:3;15113:12;15106:19;;14765:366;;;:::o;15137:::-;15279:3;15300:67;15364:2;15359:3;15300:67;:::i;:::-;15293:74;;15376:93;15465:3;15376:93;:::i;:::-;15494:2;15489:3;15485:12;15478:19;;15137:366;;;:::o;15509:::-;15651:3;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15748:93;15837:3;15748:93;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15509:366;;;:::o;15881:::-;16023:3;16044:67;16108:2;16103:3;16044:67;:::i;:::-;16037:74;;16120:93;16209:3;16120:93;:::i;:::-;16238:2;16233:3;16229:12;16222:19;;15881:366;;;:::o;16253:::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:::-;16767:3;16788:67;16852:2;16847:3;16788:67;:::i;:::-;16781:74;;16864:93;16953:3;16864:93;:::i;:::-;16982:2;16977:3;16973:12;16966:19;;16625:366;;;:::o;16997:::-;17139:3;17160:67;17224:2;17219:3;17160:67;:::i;:::-;17153:74;;17236:93;17325:3;17236:93;:::i;:::-;17354:2;17349:3;17345:12;17338:19;;16997:366;;;:::o;17369:::-;17511:3;17532:67;17596:2;17591:3;17532:67;:::i;:::-;17525:74;;17608:93;17697:3;17608:93;:::i;:::-;17726:2;17721:3;17717:12;17710:19;;17369:366;;;:::o;17741:108::-;17818:24;17836:5;17818:24;:::i;:::-;17813:3;17806:37;17741:108;;:::o;17855:118::-;17942:24;17960:5;17942:24;:::i;:::-;17937:3;17930:37;17855:118;;:::o;17979:589::-;18204:3;18226:95;18317:3;18308:6;18226:95;:::i;:::-;18219:102;;18338:95;18429:3;18420:6;18338:95;:::i;:::-;18331:102;;18450:92;18538:3;18529:6;18450:92;:::i;:::-;18443:99;;18559:3;18552:10;;17979:589;;;;;;:::o;18574:222::-;18667:4;18705:2;18694:9;18690:18;18682:26;;18718:71;18786:1;18775:9;18771:17;18762:6;18718:71;:::i;:::-;18574:222;;;;:::o;18802:640::-;18997:4;19035:3;19024:9;19020:19;19012:27;;19049:71;19117:1;19106:9;19102:17;19093:6;19049:71;:::i;:::-;19130:72;19198:2;19187:9;19183:18;19174:6;19130:72;:::i;:::-;19212;19280:2;19269:9;19265:18;19256:6;19212:72;:::i;:::-;19331:9;19325:4;19321:20;19316:2;19305:9;19301:18;19294:48;19359:76;19430:4;19421:6;19359:76;:::i;:::-;19351:84;;18802:640;;;;;;;:::o;19448:373::-;19591:4;19629:2;19618:9;19614:18;19606:26;;19678:9;19672:4;19668:20;19664:1;19653:9;19649:17;19642:47;19706:108;19809:4;19800:6;19706:108;:::i;:::-;19698:116;;19448:373;;;;:::o;19827:210::-;19914:4;19952:2;19941:9;19937:18;19929:26;;19965:65;20027:1;20016:9;20012:17;20003:6;19965:65;:::i;:::-;19827:210;;;;:::o;20043:313::-;20156:4;20194:2;20183:9;20179:18;20171:26;;20243:9;20237:4;20233:20;20229:1;20218:9;20214:17;20207:47;20271:78;20344:4;20335:6;20271:78;:::i;:::-;20263:86;;20043:313;;;;:::o;20362:419::-;20528:4;20566:2;20555:9;20551:18;20543:26;;20615:9;20609:4;20605:20;20601:1;20590:9;20586:17;20579:47;20643:131;20769:4;20643:131;:::i;:::-;20635:139;;20362:419;;;:::o;20787:::-;20953:4;20991:2;20980:9;20976:18;20968:26;;21040:9;21034:4;21030:20;21026:1;21015:9;21011:17;21004:47;21068:131;21194:4;21068:131;:::i;:::-;21060:139;;20787:419;;;:::o;21212:::-;21378:4;21416:2;21405:9;21401:18;21393:26;;21465:9;21459:4;21455:20;21451:1;21440:9;21436:17;21429:47;21493:131;21619:4;21493:131;:::i;:::-;21485:139;;21212:419;;;:::o;21637:::-;21803:4;21841:2;21830:9;21826:18;21818:26;;21890:9;21884:4;21880:20;21876:1;21865:9;21861:17;21854:47;21918:131;22044:4;21918:131;:::i;:::-;21910:139;;21637:419;;;:::o;22062:::-;22228:4;22266:2;22255:9;22251:18;22243:26;;22315:9;22309:4;22305:20;22301:1;22290:9;22286:17;22279:47;22343:131;22469:4;22343:131;:::i;:::-;22335:139;;22062:419;;;:::o;22487:::-;22653:4;22691:2;22680:9;22676:18;22668:26;;22740:9;22734:4;22730:20;22726:1;22715:9;22711:17;22704:47;22768:131;22894:4;22768:131;:::i;:::-;22760:139;;22487:419;;;:::o;22912:::-;23078:4;23116:2;23105:9;23101:18;23093:26;;23165:9;23159:4;23155:20;23151:1;23140:9;23136:17;23129:47;23193:131;23319:4;23193:131;:::i;:::-;23185:139;;22912:419;;;:::o;23337:::-;23503:4;23541:2;23530:9;23526:18;23518:26;;23590:9;23584:4;23580:20;23576:1;23565:9;23561:17;23554:47;23618:131;23744:4;23618:131;:::i;:::-;23610:139;;23337:419;;;:::o;23762:::-;23928:4;23966:2;23955:9;23951:18;23943:26;;24015:9;24009:4;24005:20;24001:1;23990:9;23986:17;23979:47;24043:131;24169:4;24043:131;:::i;:::-;24035:139;;23762:419;;;:::o;24187:::-;24353:4;24391:2;24380:9;24376:18;24368:26;;24440:9;24434:4;24430:20;24426:1;24415:9;24411:17;24404:47;24468:131;24594:4;24468:131;:::i;:::-;24460:139;;24187:419;;;:::o;24612:::-;24778:4;24816:2;24805:9;24801:18;24793:26;;24865:9;24859:4;24855:20;24851:1;24840:9;24836:17;24829:47;24893:131;25019:4;24893:131;:::i;:::-;24885:139;;24612:419;;;:::o;25037:::-;25203:4;25241:2;25230:9;25226:18;25218:26;;25290:9;25284:4;25280:20;25276:1;25265:9;25261:17;25254:47;25318:131;25444:4;25318:131;:::i;:::-;25310:139;;25037:419;;;:::o;25462:::-;25628:4;25666:2;25655:9;25651:18;25643:26;;25715:9;25709:4;25705:20;25701:1;25690:9;25686:17;25679:47;25743:131;25869:4;25743:131;:::i;:::-;25735:139;;25462:419;;;:::o;25887:::-;26053:4;26091:2;26080:9;26076:18;26068:26;;26140:9;26134:4;26130:20;26126:1;26115:9;26111:17;26104:47;26168:131;26294:4;26168:131;:::i;:::-;26160:139;;25887:419;;;:::o;26312:::-;26478:4;26516:2;26505:9;26501:18;26493:26;;26565:9;26559:4;26555:20;26551:1;26540:9;26536:17;26529:47;26593:131;26719:4;26593:131;:::i;:::-;26585:139;;26312:419;;;:::o;26737:::-;26903:4;26941:2;26930:9;26926:18;26918:26;;26990:9;26984:4;26980:20;26976:1;26965:9;26961:17;26954:47;27018:131;27144:4;27018:131;:::i;:::-;27010:139;;26737:419;;;:::o;27162:::-;27328:4;27366:2;27355:9;27351:18;27343:26;;27415:9;27409:4;27405:20;27401:1;27390:9;27386:17;27379:47;27443:131;27569:4;27443:131;:::i;:::-;27435:139;;27162:419;;;:::o;27587:::-;27753:4;27791:2;27780:9;27776:18;27768:26;;27840:9;27834:4;27830:20;27826:1;27815:9;27811:17;27804:47;27868:131;27994:4;27868:131;:::i;:::-;27860:139;;27587:419;;;:::o;28012:::-;28178:4;28216:2;28205:9;28201:18;28193:26;;28265:9;28259:4;28255:20;28251:1;28240:9;28236:17;28229:47;28293:131;28419:4;28293:131;:::i;:::-;28285:139;;28012:419;;;:::o;28437:222::-;28530:4;28568:2;28557:9;28553:18;28545:26;;28581:71;28649:1;28638:9;28634:17;28625:6;28581:71;:::i;:::-;28437:222;;;;:::o;28665:129::-;28699:6;28726:20;;:::i;:::-;28716:30;;28755:33;28783:4;28775:6;28755:33;:::i;:::-;28665:129;;;:::o;28800:75::-;28833:6;28866:2;28860:9;28850:19;;28800:75;:::o;28881:307::-;28942:4;29032:18;29024:6;29021:30;29018:56;;;29054:18;;:::i;:::-;29018:56;29092:29;29114:6;29092:29;:::i;:::-;29084:37;;29176:4;29170;29166:15;29158:23;;28881:307;;;:::o;29194:308::-;29256:4;29346:18;29338:6;29335:30;29332:56;;;29368:18;;:::i;:::-;29332:56;29406:29;29428:6;29406:29;:::i;:::-;29398:37;;29490:4;29484;29480:15;29472:23;;29194:308;;;:::o;29508:132::-;29575:4;29598:3;29590:11;;29628:4;29623:3;29619:14;29611:22;;29508:132;;;:::o;29646:141::-;29695:4;29718:3;29710:11;;29741:3;29738:1;29731:14;29775:4;29772:1;29762:18;29754:26;;29646:141;;;:::o;29793:114::-;29860:6;29894:5;29888:12;29878:22;;29793:114;;;:::o;29913:98::-;29964:6;29998:5;29992:12;29982:22;;29913:98;;;:::o;30017:99::-;30069:6;30103:5;30097:12;30087:22;;30017:99;;;:::o;30122:113::-;30192:4;30224;30219:3;30215:14;30207:22;;30122:113;;;:::o;30241:184::-;30340:11;30374:6;30369:3;30362:19;30414:4;30409:3;30405:14;30390:29;;30241:184;;;;:::o;30431:168::-;30514:11;30548:6;30543:3;30536:19;30588:4;30583:3;30579:14;30564:29;;30431:168;;;;:::o;30605:169::-;30689:11;30723:6;30718:3;30711:19;30763:4;30758:3;30754:14;30739:29;;30605:169;;;;:::o;30780:148::-;30882:11;30919:3;30904:18;;30780:148;;;;:::o;30934:305::-;30974:3;30993:20;31011:1;30993:20;:::i;:::-;30988:25;;31027:20;31045:1;31027:20;:::i;:::-;31022:25;;31181:1;31113:66;31109:74;31106:1;31103:81;31100:107;;;31187:18;;:::i;:::-;31100:107;31231:1;31228;31224:9;31217:16;;30934:305;;;;:::o;31245:185::-;31285:1;31302:20;31320:1;31302:20;:::i;:::-;31297:25;;31336:20;31354:1;31336:20;:::i;:::-;31331:25;;31375:1;31365:35;;31380:18;;:::i;:::-;31365:35;31422:1;31419;31415:9;31410:14;;31245:185;;;;:::o;31436:348::-;31476:7;31499:20;31517:1;31499:20;:::i;:::-;31494:25;;31533:20;31551:1;31533:20;:::i;:::-;31528:25;;31721:1;31653:66;31649:74;31646:1;31643:81;31638:1;31631:9;31624:17;31620:105;31617:131;;;31728:18;;:::i;:::-;31617:131;31776:1;31773;31769:9;31758:20;;31436:348;;;;:::o;31790:191::-;31830:4;31850:20;31868:1;31850:20;:::i;:::-;31845:25;;31884:20;31902:1;31884:20;:::i;:::-;31879:25;;31923:1;31920;31917:8;31914:34;;;31928:18;;:::i;:::-;31914:34;31973:1;31970;31966:9;31958:17;;31790:191;;;;:::o;31987:96::-;32024:7;32053:24;32071:5;32053:24;:::i;:::-;32042:35;;31987:96;;;:::o;32089:90::-;32123:7;32166:5;32159:13;32152:21;32141:32;;32089:90;;;:::o;32185:149::-;32221:7;32261:66;32254:5;32250:78;32239:89;;32185:149;;;:::o;32340:126::-;32377:7;32417:42;32410:5;32406:54;32395:65;;32340:126;;;:::o;32472:77::-;32509:7;32538:5;32527:16;;32472:77;;;:::o;32555:154::-;32639:6;32634:3;32629;32616:30;32701:1;32692:6;32687:3;32683:16;32676:27;32555:154;;;:::o;32715:307::-;32783:1;32793:113;32807:6;32804:1;32801:13;32793:113;;;32892:1;32887:3;32883:11;32877:18;32873:1;32868:3;32864:11;32857:39;32829:2;32826:1;32822:10;32817:15;;32793:113;;;32924:6;32921:1;32918:13;32915:101;;;33004:1;32995:6;32990:3;32986:16;32979:27;32915:101;32764:258;32715:307;;;:::o;33028:320::-;33072:6;33109:1;33103:4;33099:12;33089:22;;33156:1;33150:4;33146:12;33177:18;33167:81;;33233:4;33225:6;33221:17;33211:27;;33167:81;33295:2;33287:6;33284:14;33264:18;33261:38;33258:84;;;33314:18;;:::i;:::-;33258:84;33079:269;33028:320;;;:::o;33354:281::-;33437:27;33459:4;33437:27;:::i;:::-;33429:6;33425:40;33567:6;33555:10;33552:22;33531:18;33519:10;33516:34;33513:62;33510:88;;;33578:18;;:::i;:::-;33510:88;33618:10;33614:2;33607:22;33397:238;33354:281;;:::o;33641:233::-;33680:3;33703:24;33721:5;33703:24;:::i;:::-;33694:33;;33749:66;33742:5;33739:77;33736:103;;;33819:18;;:::i;:::-;33736:103;33866:1;33859:5;33855:13;33848:20;;33641:233;;;:::o;33880:176::-;33912:1;33929:20;33947:1;33929:20;:::i;:::-;33924:25;;33963:20;33981:1;33963:20;:::i;:::-;33958:25;;34002:1;33992:35;;34007:18;;:::i;:::-;33992:35;34048:1;34045;34041:9;34036:14;;33880:176;;;;:::o;34062:180::-;34110:77;34107:1;34100:88;34207:4;34204:1;34197:15;34231:4;34228:1;34221:15;34248:180;34296:77;34293:1;34286:88;34393:4;34390:1;34383:15;34417:4;34414:1;34407:15;34434:180;34482:77;34479:1;34472:88;34579:4;34576:1;34569:15;34603:4;34600:1;34593:15;34620:180;34668:77;34665:1;34658:88;34765:4;34762:1;34755:15;34789:4;34786:1;34779:15;34806:180;34854:77;34851:1;34844:88;34951:4;34948:1;34941:15;34975:4;34972:1;34965:15;34992:180;35040:77;35037:1;35030:88;35137:4;35134:1;35127:15;35161:4;35158:1;35151:15;35178:117;35287:1;35284;35277:12;35301:117;35410:1;35407;35400:12;35424:117;35533:1;35530;35523:12;35547:117;35656:1;35653;35646:12;35670:102;35711:6;35762:2;35758:7;35753:2;35746:5;35742:14;35738:28;35728:38;;35670:102;;;:::o;35778:247::-;35918:34;35914:1;35906:6;35902:14;35895:58;35987:30;35982:2;35974:6;35970:15;35963:55;35778:247;:::o;36031:230::-;36171:34;36167:1;36159:6;36155:14;36148:58;36240:13;36235:2;36227:6;36223:15;36216:38;36031:230;:::o;36267:237::-;36407:34;36403:1;36395:6;36391:14;36384:58;36476:20;36471:2;36463:6;36459:15;36452:45;36267:237;:::o;36510:225::-;36650:34;36646:1;36638:6;36634:14;36627:58;36719:8;36714:2;36706:6;36702:15;36695:33;36510:225;:::o;36741:178::-;36881:30;36877:1;36869:6;36865:14;36858:54;36741:178;:::o;36925:223::-;37065:34;37061:1;37053:6;37049:14;37042:58;37134:6;37129:2;37121:6;37117:15;37110:31;36925:223;:::o;37154:175::-;37294:27;37290:1;37282:6;37278:14;37271:51;37154:175;:::o;37335:231::-;37475:34;37471:1;37463:6;37459:14;37452:58;37544:14;37539:2;37531:6;37527:15;37520:39;37335:231;:::o;37572:243::-;37712:34;37708:1;37700:6;37696:14;37689:58;37781:26;37776:2;37768:6;37764:15;37757:51;37572:243;:::o;37821:229::-;37961:34;37957:1;37949:6;37945:14;37938:58;38030:12;38025:2;38017:6;38013:15;38006:37;37821:229;:::o;38056:228::-;38196:34;38192:1;38184:6;38180:14;38173:58;38265:11;38260:2;38252:6;38248:15;38241:36;38056:228;:::o;38290:182::-;38430:34;38426:1;38418:6;38414:14;38407:58;38290:182;:::o;38478:231::-;38618:34;38614:1;38606:6;38602:14;38595:58;38687:14;38682:2;38674:6;38670:15;38663:39;38478:231;:::o;38715:182::-;38855:34;38851:1;38843:6;38839:14;38832:58;38715:182;:::o;38903:228::-;39043:34;39039:1;39031:6;39027:14;39020:58;39112:11;39107:2;39099:6;39095:15;39088:36;38903:228;:::o;39137:234::-;39277:34;39273:1;39265:6;39261:14;39254:58;39346:17;39341:2;39333:6;39329:15;39322:42;39137:234;:::o;39377:220::-;39517:34;39513:1;39505:6;39501:14;39494:58;39586:3;39581:2;39573:6;39569:15;39562:28;39377:220;:::o;39603:236::-;39743:34;39739:1;39731:6;39727:14;39720:58;39812:19;39807:2;39799:6;39795:15;39788:44;39603:236;:::o;39845:231::-;39985:34;39981:1;39973:6;39969:14;39962:58;40054:14;40049:2;40041:6;40037:15;40030:39;39845:231;:::o;40082:122::-;40155:24;40173:5;40155:24;:::i;:::-;40148:5;40145:35;40135:63;;40194:1;40191;40184:12;40135:63;40082:122;:::o;40210:116::-;40280:21;40295:5;40280:21;:::i;:::-;40273:5;40270:32;40260:60;;40316:1;40313;40306:12;40260:60;40210:116;:::o;40332:120::-;40404:23;40421:5;40404:23;:::i;:::-;40397:5;40394:34;40384:62;;40442:1;40439;40432:12;40384:62;40332:120;:::o;40458:122::-;40531:24;40549:5;40531:24;:::i;:::-;40524:5;40521:35;40511:63;;40570:1;40567;40560:12;40511:63;40458:122;:::o
Swarm Source
ipfs://78dc0ee23d821382add809e0297582962b46d37a9325cd3bb503f0d55ac44c5f
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.