ERC-721
Overview
Max Total Supply
1,782 RAGZ
Holders
784
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 RAGZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Ragdollz
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-10 */ // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT 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/token/ERC721/[email protected] 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/[email protected] 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/token/ERC721/extensions/[email protected] 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/utils/[email protected] 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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/utils/[email protected] 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/utils/[email protected] 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/introspection/[email protected] 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/[email protected] 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(to).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/[email protected] 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/[email protected] 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 @openzeppelin/contracts/access/[email protected] 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. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/Ragdollz.sol pragma solidity ^0.8.0; contract Ragdollz is ERC721Enumerable, Ownable { using Strings for uint256; bool public _active = false; bool public _presaleActive = false; string public _baseTokenURI; uint256 public _price = 0.09 ether; uint256 public _gifts = 315; uint256 public _supply = 9999; address public _t1 = 0x3962Ba4D978D367ae42Be4dDE448655A018979b4; address public _t2 = 0x63a29965e70Af0C334bC3DB20D87f2DaC425Cea1; address public _t3 = 0x5404980C4e40310073f4c959E91bA94c4C47Ca03; address public _t4 = 0xA08E3c71550D73D3AFCc74a2ea906BB2a3562f42; constructor(string memory baseURI) ERC721("Ragdollz", "RAGZ") { setBaseURI(baseURI); } function setActive(bool active) public onlyOwner { _active = active; } function setPresaleActive(bool presaleActive) public onlyOwner { _presaleActive = presaleActive; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function setPrice(uint256 price) public onlyOwner { _price = price; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function tokensByOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function gift(address _to, uint256 _amount) external onlyOwner { require(_amount <= _gifts, "Gift reserve exceeded with provided amount."); uint256 supply = totalSupply(); for(uint256 i; i < _amount; i++){ _safeMint( _to, supply + i ); } _gifts -= _amount; } function mint(uint256 _amount) public payable { uint256 supply = totalSupply(); require( _active, "Sale is not active."); require( _amount < 21, "Provided amount exceeds mint limit."); require( msg.value >= _price * _amount, "Insufficient ether provided."); require( supply + _amount <= _supply - _gifts, "Supply exceeded with provided amount."); for(uint256 i; i < _amount; i++){ _safeMint( msg.sender, supply + i ); } } function presaleMint(uint256 _amount) public payable { uint256 supply = totalSupply(); uint256 balance = balanceOf(msg.sender); require( _presaleActive, "Pre-Sale is not active."); require( _amount + balance < 3, "Provided amount exceeds pre-sale mint limit."); require( msg.value >= _price * _amount, "Insufficient ether provided."); require( supply + _amount <= _supply - _gifts, "Supply exceeded with provided amount."); for(uint256 i; i < _amount; i++){ _safeMint( msg.sender, supply + i ); } } function withdraw() public payable onlyOwner { uint256 _p1 = address(this).balance / 20; uint256 _p2 = address(this).balance / 10; uint256 _p3 = address(this).balance / 5; uint256 _p4 = address(this).balance - _p1 - _p2 - _p3; require(payable(_t1).send(_p1)); require(payable(_t2).send(_p2)); require(payable(_t3).send(_p3)); require(payable(_t4).send(_p4)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","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":"_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_gifts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_t1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_t2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_t3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_t4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","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":"uint256","name":"_amount","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setActive","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"presaleActive","type":"bool"}],"name":"setPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff02191690831515021790555067013fbe85edc90000600c5561013b600d5561270f600e55733962ba4d978d367ae42be4dde448655a018979b4600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507363a29965e70af0c334bc3db20d87f2dac425cea1601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735404980c4e40310073f4c959e91ba94c4c47ca03601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a08e3c71550d73d3afcc74a2ea906bb2a3562f42601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001b357600080fd5b5060405162005192380380620051928339818101604052810190620001d9919062000576565b6040518060400160405280600881526020017f526167646f6c6c7a0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5241475a0000000000000000000000000000000000000000000000000000000081525081600090805190602001906200025d92919062000454565b5080600190805190602001906200027692919062000454565b505050620002996200028d620002b160201b60201c565b620002b960201b60201c565b620002aa816200037f60201b60201c565b50620007ae565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200038f620002b160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003b56200042a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200040e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040590620005e2565b60405180910390fd5b80600b90805190602001906200042692919062000454565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200046290620006aa565b90600052602060002090601f016020900481019282620004865760008555620004d2565b82601f10620004a157805160ff1916838001178555620004d2565b82800160010185558215620004d2579182015b82811115620004d1578251825591602001919060010190620004b4565b5b509050620004e19190620004e5565b5090565b5b8082111562000500576000816000905550600101620004e6565b5090565b60006200051b62000515846200062d565b62000604565b9050828152602081018484840111156200053457600080fd5b6200054184828562000674565b509392505050565b600082601f8301126200055b57600080fd5b81516200056d84826020860162000504565b91505092915050565b6000602082840312156200058957600080fd5b600082015167ffffffffffffffff811115620005a457600080fd5b620005b28482850162000549565b91505092915050565b6000620005ca60208362000663565b9150620005d78262000785565b602082019050919050565b60006020820190508181036000830152620005fd81620005bb565b9050919050565b60006200061062000623565b90506200061e8282620006e0565b919050565b6000604051905090565b600067ffffffffffffffff8211156200064b576200064a62000745565b5b620006568262000774565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200069457808201518184015260208101905062000677565b83811115620006a4576000848401525b50505050565b60006002820490506001821680620006c357607f821691505b60208210811415620006da57620006d962000716565b5b50919050565b620006eb8262000774565b810181811067ffffffffffffffff821117156200070d576200070c62000745565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6149d480620007be6000396000f3fe6080604052600436106102255760003560e01c8063715018a611610123578063afc91613116100ab578063cfc86f7b1161006f578063cfc86f7b146107de578063de96931914610809578063e985e9c514610834578063ee40494614610871578063f2fde38b1461089c57610225565b8063afc9161314610708578063b88d4fde14610733578063c87b56dd1461075c578063c9b298f114610799578063cbce4c97146107b557610225565b806395d89b41116100f257806395d89b4114610644578063a0712d681461066f578063a22cb4651461068b578063a2fe9c9b146106b4578063acec338a146106df57610225565b8063715018a6146105ae5780638b8fcdd4146105c55780638da5cb5b146105f057806391b7f5ed1461061b57610225565b80632f745c59116101b15780634f6ccce7116101755780634f6ccce7146104a357806355f804b3146104e05780636352211e146105095780636b0a11761461054657806370a082311461057157610225565b80632f745c59146103df5780633ccfd60b1461041c5780633f8121a21461042657806342842e0e1461044f5780634d615d231461047857610225565b80630d381a28116101f85780630d381a28146102f8578063159457901461033557806318160ddd14610360578063235b6ea11461038b57806323b872dd146103b657610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061347c565b6108c5565b60405161025e9190613aa5565b60405180910390f35b34801561027357600080fd5b5061027c61093f565b6040516102899190613ac0565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061350f565b6109d1565b6040516102c69190613a1c565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613417565b610a56565b005b34801561030457600080fd5b5061031f600480360381019061031a91906132ac565b610b6e565b60405161032c9190613a83565b60405180910390f35b34801561034157600080fd5b5061034a610c68565b6040516103579190613e02565b60405180910390f35b34801561036c57600080fd5b50610375610c6e565b6040516103829190613e02565b60405180910390f35b34801561039757600080fd5b506103a0610c7b565b6040516103ad9190613e02565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613311565b610c81565b005b3480156103eb57600080fd5b5061040660048036038101906104019190613417565b610ce1565b6040516104139190613e02565b60405180910390f35b610424610d86565b005b34801561043257600080fd5b5061044d60048036038101906104489190613453565b610fe1565b005b34801561045b57600080fd5b5061047660048036038101906104719190613311565b61107a565b005b34801561048457600080fd5b5061048d61109a565b60405161049a9190613aa5565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c5919061350f565b6110ad565b6040516104d79190613e02565b60405180910390f35b3480156104ec57600080fd5b50610507600480360381019061050291906134ce565b611144565b005b34801561051557600080fd5b50610530600480360381019061052b919061350f565b6111da565b60405161053d9190613a1c565b60405180910390f35b34801561055257600080fd5b5061055b61128c565b6040516105689190613aa5565b60405180910390f35b34801561057d57600080fd5b50610598600480360381019061059391906132ac565b61129f565b6040516105a59190613e02565b60405180910390f35b3480156105ba57600080fd5b506105c3611357565b005b3480156105d157600080fd5b506105da6113df565b6040516105e79190613a1c565b60405180910390f35b3480156105fc57600080fd5b50610605611405565b6040516106129190613a1c565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d919061350f565b61142f565b005b34801561065057600080fd5b506106596114b5565b6040516106669190613ac0565b60405180910390f35b6106896004803603810190610684919061350f565b611547565b005b34801561069757600080fd5b506106b260048036038101906106ad91906133db565b6116ca565b005b3480156106c057600080fd5b506106c961184b565b6040516106d69190613a1c565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613453565b611871565b005b34801561071457600080fd5b5061071d61190a565b60405161072a9190613a1c565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190613360565b611930565b005b34801561076857600080fd5b50610783600480360381019061077e919061350f565b611992565b6040516107909190613ac0565b60405180910390f35b6107b360048036038101906107ae919061350f565b611a39565b005b3480156107c157600080fd5b506107dc60048036038101906107d79190613417565b611bd5565b005b3480156107ea57600080fd5b506107f3611cf4565b6040516108009190613ac0565b60405180910390f35b34801561081557600080fd5b5061081e611d82565b60405161082b9190613a1c565b60405180910390f35b34801561084057600080fd5b5061085b600480360381019061085691906132d5565b611da8565b6040516108689190613aa5565b60405180910390f35b34801561087d57600080fd5b50610886611e3c565b6040516108939190613e02565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be91906132ac565b611e42565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610938575061093782611f3a565b5b9050919050565b60606000805461094e906140eb565b80601f016020809104026020016040519081016040528092919081815260200182805461097a906140eb565b80156109c75780601f1061099c576101008083540402835291602001916109c7565b820191906000526020600020905b8154815290600101906020018083116109aa57829003601f168201915b5050505050905090565b60006109dc8261201c565b610a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1290613ca2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a61826111da565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac990613d42565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610af1612088565b73ffffffffffffffffffffffffffffffffffffffff161480610b205750610b1f81610b1a612088565b611da8565b5b610b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5690613c02565b60405180910390fd5b610b698383612090565b505050565b60606000610b7b8361129f565b905060008167ffffffffffffffff811115610bbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bed5781602001602082028036833780820191505090505b50905060005b82811015610c5d57610c058582610ce1565b828281518110610c3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c559061414e565b915050610bf3565b508092505050919050565b600e5481565b6000600880549050905090565b600c5481565b610c92610c8c612088565b82612149565b610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890613d82565b60405180910390fd5b610cdc838383612227565b505050565b6000610cec8361129f565b8210610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490613ae2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d8e612088565b73ffffffffffffffffffffffffffffffffffffffff16610dac611405565b73ffffffffffffffffffffffffffffffffffffffff1614610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df990613cc2565b60405180910390fd5b6000601447610e119190613f76565b90506000600a47610e229190613f76565b90506000600547610e339190613f76565b9050600081838547610e459190614001565b610e4f9190614001565b610e599190614001565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050610ebb57600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050610f1b57600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050610f7b57600080fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610fdb57600080fd5b50505050565b610fe9612088565b73ffffffffffffffffffffffffffffffffffffffff16611007611405565b73ffffffffffffffffffffffffffffffffffffffff161461105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613cc2565b60405180910390fd5b80600a60156101000a81548160ff02191690831515021790555050565b61109583838360405180602001604052806000815250611930565b505050565b600a60149054906101000a900460ff1681565b60006110b7610c6e565b82106110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613da2565b60405180910390fd5b60088281548110611132577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61114c612088565b73ffffffffffffffffffffffffffffffffffffffff1661116a611405565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613cc2565b60405180910390fd5b80600b90805190602001906111d69291906130d0565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90613c42565b60405180910390fd5b80915050919050565b600a60159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790613c22565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61135f612088565b73ffffffffffffffffffffffffffffffffffffffff1661137d611405565b73ffffffffffffffffffffffffffffffffffffffff16146113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca90613cc2565b60405180910390fd5b6113dd6000612483565b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611437612088565b73ffffffffffffffffffffffffffffffffffffffff16611455611405565b73ffffffffffffffffffffffffffffffffffffffff16146114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a290613cc2565b60405180910390fd5b80600c8190555050565b6060600180546114c4906140eb565b80601f01602080910402602001604051908101604052809291908181526020018280546114f0906140eb565b801561153d5780601f106115125761010080835404028352916020019161153d565b820191906000526020600020905b81548152906001019060200180831161152057829003601f168201915b5050505050905090565b6000611551610c6e565b9050600a60149054906101000a900460ff166115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613d22565b60405180910390fd5b601582106115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90613de2565b60405180910390fd5b81600c546115f39190613fa7565b341015611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613c62565b60405180910390fd5b600d54600e546116459190614001565b82826116519190613f20565b1115611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990613d62565b60405180910390fd5b60005b828110156116c5576116b23382846116ad9190613f20565b612549565b80806116bd9061414e565b915050611695565b505050565b6116d2612088565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790613ba2565b60405180910390fd5b806005600061174d612088565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117fa612088565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161183f9190613aa5565b60405180910390a35050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611879612088565b73ffffffffffffffffffffffffffffffffffffffff16611897611405565b73ffffffffffffffffffffffffffffffffffffffff16146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e490613cc2565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61194161193b612088565b83612149565b611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790613d82565b60405180910390fd5b61198c84848484612567565b50505050565b606061199d8261201c565b6119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d390613d02565b60405180910390fd5b60006119e66125c3565b90506000815111611a065760405180602001604052806000815250611a31565b80611a1084612655565b604051602001611a219291906139f8565b6040516020818303038152906040525b915050919050565b6000611a43610c6e565b90506000611a503361129f565b9050600a60159054906101000a900460ff16611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613b62565b60405180910390fd5b60038184611aaf9190613f20565b10611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690613dc2565b60405180910390fd5b82600c54611afd9190613fa7565b341015611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690613c62565b60405180910390fd5b600d54600e54611b4f9190614001565b8383611b5b9190613f20565b1115611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613d62565b60405180910390fd5b60005b83811015611bcf57611bbc338285611bb79190613f20565b612549565b8080611bc79061414e565b915050611b9f565b50505050565b611bdd612088565b73ffffffffffffffffffffffffffffffffffffffff16611bfb611405565b73ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890613cc2565b60405180910390fd5b600d54811115611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90613be2565b60405180910390fd5b6000611ca0610c6e565b905060005b82811015611cd557611cc2848284611cbd9190613f20565b612549565b8080611ccd9061414e565b915050611ca5565b5081600d6000828254611ce89190614001565b92505081905550505050565b600b8054611d01906140eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2d906140eb565b8015611d7a5780601f10611d4f57610100808354040283529160200191611d7a565b820191906000526020600020905b815481529060010190602001808311611d5d57829003601f168201915b505050505081565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b611e4a612088565b73ffffffffffffffffffffffffffffffffffffffff16611e68611405565b73ffffffffffffffffffffffffffffffffffffffff1614611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590613cc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2590613b22565b60405180910390fd5b611f3781612483565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061200557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612015575061201482612802565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612103836111da565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121548261201c565b612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90613bc2565b60405180910390fd5b600061219e836111da565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061220d57508373ffffffffffffffffffffffffffffffffffffffff166121f5846109d1565b73ffffffffffffffffffffffffffffffffffffffff16145b8061221e575061221d8185611da8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612247826111da565b73ffffffffffffffffffffffffffffffffffffffff161461229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490613ce2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230490613b82565b60405180910390fd5b61231883838361286c565b612323600082612090565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123739190614001565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123ca9190613f20565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612563828260405180602001604052806000815250612980565b5050565b612572848484612227565b61257e848484846129db565b6125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b490613b02565b60405180910390fd5b50505050565b6060600b80546125d2906140eb565b80601f01602080910402602001604051908101604052809291908181526020018280546125fe906140eb565b801561264b5780601f106126205761010080835404028352916020019161264b565b820191906000526020600020905b81548152906001019060200180831161262e57829003601f168201915b5050505050905090565b6060600082141561269d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127fd565b600082905060005b600082146126cf5780806126b89061414e565b915050600a826126c89190613f76565b91506126a5565b60008167ffffffffffffffff811115612711577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127435781602001600182028036833780820191505090505b5090505b600085146127f65760018261275c9190614001565b9150600a8561276b9190614197565b60306127779190613f20565b60f81b8183815181106127b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127ef9190613f76565b9450612747565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612877838383612b72565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128ba576128b581612b77565b6128f9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128f8576128f78382612bc0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561293c5761293781612d2d565b61297b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461297a576129798282612e70565b5b5b505050565b61298a8383612eef565b61299760008484846129db565b6129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90613b02565b60405180910390fd5b505050565b60006129fc8473ffffffffffffffffffffffffffffffffffffffff166130bd565b15612b65578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a25612088565b8786866040518563ffffffff1660e01b8152600401612a479493929190613a37565b602060405180830381600087803b158015612a6157600080fd5b505af1925050508015612a9257506040513d601f19601f82011682018060405250810190612a8f91906134a5565b60015b612b15573d8060008114612ac2576040519150601f19603f3d011682016040523d82523d6000602084013e612ac7565b606091505b50600081511415612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0490613b02565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b6a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612bcd8461129f565b612bd79190614001565b9050600060076000848152602001908152602001600020549050818114612cbc576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d419190614001565b9050600060096000848152602001908152602001600020549050600060088381548110612d97577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612ddf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e7b8361129f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5690613c82565b60405180910390fd5b612f688161201c565b15612fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9f90613b42565b60405180910390fd5b612fb46000838361286c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130049190613f20565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546130dc906140eb565b90600052602060002090601f0160209004810192826130fe5760008555613145565b82601f1061311757805160ff1916838001178555613145565b82800160010185558215613145579182015b82811115613144578251825591602001919060010190613129565b5b5090506131529190613156565b5090565b5b8082111561316f576000816000905550600101613157565b5090565b600061318661318184613e42565b613e1d565b90508281526020810184848401111561319e57600080fd5b6131a98482856140a9565b509392505050565b60006131c46131bf84613e73565b613e1d565b9050828152602081018484840111156131dc57600080fd5b6131e78482856140a9565b509392505050565b6000813590506131fe81614942565b92915050565b60008135905061321381614959565b92915050565b60008135905061322881614970565b92915050565b60008151905061323d81614970565b92915050565b600082601f83011261325457600080fd5b8135613264848260208601613173565b91505092915050565b600082601f83011261327e57600080fd5b813561328e8482602086016131b1565b91505092915050565b6000813590506132a681614987565b92915050565b6000602082840312156132be57600080fd5b60006132cc848285016131ef565b91505092915050565b600080604083850312156132e857600080fd5b60006132f6858286016131ef565b9250506020613307858286016131ef565b9150509250929050565b60008060006060848603121561332657600080fd5b6000613334868287016131ef565b9350506020613345868287016131ef565b925050604061335686828701613297565b9150509250925092565b6000806000806080858703121561337657600080fd5b6000613384878288016131ef565b9450506020613395878288016131ef565b93505060406133a687828801613297565b925050606085013567ffffffffffffffff8111156133c357600080fd5b6133cf87828801613243565b91505092959194509250565b600080604083850312156133ee57600080fd5b60006133fc858286016131ef565b925050602061340d85828601613204565b9150509250929050565b6000806040838503121561342a57600080fd5b6000613438858286016131ef565b925050602061344985828601613297565b9150509250929050565b60006020828403121561346557600080fd5b600061347384828501613204565b91505092915050565b60006020828403121561348e57600080fd5b600061349c84828501613219565b91505092915050565b6000602082840312156134b757600080fd5b60006134c58482850161322e565b91505092915050565b6000602082840312156134e057600080fd5b600082013567ffffffffffffffff8111156134fa57600080fd5b6135068482850161326d565b91505092915050565b60006020828403121561352157600080fd5b600061352f84828501613297565b91505092915050565b600061354483836139da565b60208301905092915050565b61355981614035565b82525050565b600061356a82613eb4565b6135748185613ee2565b935061357f83613ea4565b8060005b838110156135b05781516135978882613538565b97506135a283613ed5565b925050600181019050613583565b5085935050505092915050565b6135c681614047565b82525050565b60006135d782613ebf565b6135e18185613ef3565b93506135f18185602086016140b8565b6135fa81614284565b840191505092915050565b600061361082613eca565b61361a8185613f04565b935061362a8185602086016140b8565b61363381614284565b840191505092915050565b600061364982613eca565b6136538185613f15565b93506136638185602086016140b8565b80840191505092915050565b600061367c602b83613f04565b915061368782614295565b604082019050919050565b600061369f603283613f04565b91506136aa826142e4565b604082019050919050565b60006136c2602683613f04565b91506136cd82614333565b604082019050919050565b60006136e5601c83613f04565b91506136f082614382565b602082019050919050565b6000613708601783613f04565b9150613713826143ab565b602082019050919050565b600061372b602483613f04565b9150613736826143d4565b604082019050919050565b600061374e601983613f04565b915061375982614423565b602082019050919050565b6000613771602c83613f04565b915061377c8261444c565b604082019050919050565b6000613794602b83613f04565b915061379f8261449b565b604082019050919050565b60006137b7603883613f04565b91506137c2826144ea565b604082019050919050565b60006137da602a83613f04565b91506137e582614539565b604082019050919050565b60006137fd602983613f04565b915061380882614588565b604082019050919050565b6000613820601c83613f04565b915061382b826145d7565b602082019050919050565b6000613843602083613f04565b915061384e82614600565b602082019050919050565b6000613866602c83613f04565b915061387182614629565b604082019050919050565b6000613889602083613f04565b915061389482614678565b602082019050919050565b60006138ac602983613f04565b91506138b7826146a1565b604082019050919050565b60006138cf602f83613f04565b91506138da826146f0565b604082019050919050565b60006138f2601383613f04565b91506138fd8261473f565b602082019050919050565b6000613915602183613f04565b915061392082614768565b604082019050919050565b6000613938602583613f04565b9150613943826147b7565b604082019050919050565b600061395b603183613f04565b915061396682614806565b604082019050919050565b600061397e602c83613f04565b915061398982614855565b604082019050919050565b60006139a1602c83613f04565b91506139ac826148a4565b604082019050919050565b60006139c4602383613f04565b91506139cf826148f3565b604082019050919050565b6139e38161409f565b82525050565b6139f28161409f565b82525050565b6000613a04828561363e565b9150613a10828461363e565b91508190509392505050565b6000602082019050613a316000830184613550565b92915050565b6000608082019050613a4c6000830187613550565b613a596020830186613550565b613a6660408301856139e9565b8181036060830152613a7881846135cc565b905095945050505050565b60006020820190508181036000830152613a9d818461355f565b905092915050565b6000602082019050613aba60008301846135bd565b92915050565b60006020820190508181036000830152613ada8184613605565b905092915050565b60006020820190508181036000830152613afb8161366f565b9050919050565b60006020820190508181036000830152613b1b81613692565b9050919050565b60006020820190508181036000830152613b3b816136b5565b9050919050565b60006020820190508181036000830152613b5b816136d8565b9050919050565b60006020820190508181036000830152613b7b816136fb565b9050919050565b60006020820190508181036000830152613b9b8161371e565b9050919050565b60006020820190508181036000830152613bbb81613741565b9050919050565b60006020820190508181036000830152613bdb81613764565b9050919050565b60006020820190508181036000830152613bfb81613787565b9050919050565b60006020820190508181036000830152613c1b816137aa565b9050919050565b60006020820190508181036000830152613c3b816137cd565b9050919050565b60006020820190508181036000830152613c5b816137f0565b9050919050565b60006020820190508181036000830152613c7b81613813565b9050919050565b60006020820190508181036000830152613c9b81613836565b9050919050565b60006020820190508181036000830152613cbb81613859565b9050919050565b60006020820190508181036000830152613cdb8161387c565b9050919050565b60006020820190508181036000830152613cfb8161389f565b9050919050565b60006020820190508181036000830152613d1b816138c2565b9050919050565b60006020820190508181036000830152613d3b816138e5565b9050919050565b60006020820190508181036000830152613d5b81613908565b9050919050565b60006020820190508181036000830152613d7b8161392b565b9050919050565b60006020820190508181036000830152613d9b8161394e565b9050919050565b60006020820190508181036000830152613dbb81613971565b9050919050565b60006020820190508181036000830152613ddb81613994565b9050919050565b60006020820190508181036000830152613dfb816139b7565b9050919050565b6000602082019050613e1760008301846139e9565b92915050565b6000613e27613e38565b9050613e33828261411d565b919050565b6000604051905090565b600067ffffffffffffffff821115613e5d57613e5c614255565b5b613e6682614284565b9050602081019050919050565b600067ffffffffffffffff821115613e8e57613e8d614255565b5b613e9782614284565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f2b8261409f565b9150613f368361409f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f6b57613f6a6141c8565b5b828201905092915050565b6000613f818261409f565b9150613f8c8361409f565b925082613f9c57613f9b6141f7565b5b828204905092915050565b6000613fb28261409f565b9150613fbd8361409f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ff657613ff56141c8565b5b828202905092915050565b600061400c8261409f565b91506140178361409f565b92508282101561402a576140296141c8565b5b828203905092915050565b60006140408261407f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140d65780820151818401526020810190506140bb565b838111156140e5576000848401525b50505050565b6000600282049050600182168061410357607f821691505b6020821081141561411757614116614226565b5b50919050565b61412682614284565b810181811067ffffffffffffffff8211171561414557614144614255565b5b80604052505050565b60006141598261409f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561418c5761418b6141c8565b5b600182019050919050565b60006141a28261409f565b91506141ad8361409f565b9250826141bd576141bc6141f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5072652d53616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f47696674207265736572766520657863656564656420776974682070726f766960008201527f64656420616d6f756e742e000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742065746865722070726f76696465642e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f537570706c7920657863656564656420776974682070726f766964656420616d60008201527f6f756e742e000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f50726f766964656420616d6f756e742065786365656473207072652d73616c6560008201527f206d696e74206c696d69742e0000000000000000000000000000000000000000602082015250565b7f50726f766964656420616d6f756e742065786365656473206d696e74206c696d60008201527f69742e0000000000000000000000000000000000000000000000000000000000602082015250565b61494b81614035565b811461495657600080fd5b50565b61496281614047565b811461496d57600080fd5b50565b61497981614053565b811461498457600080fd5b50565b6149908161409f565b811461499b57600080fd5b5056fea26469706673582212201ddf8e8ff6ff85d2cba91a1e845d84fb32cef260b97378cf9d51d53c2e933a0964736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d613576544b595a7231466d636e38377847364c56625062414e77677677717a4e425139656b456770626933502f00000000000000000000
Deployed Bytecode
0x6080604052600436106102255760003560e01c8063715018a611610123578063afc91613116100ab578063cfc86f7b1161006f578063cfc86f7b146107de578063de96931914610809578063e985e9c514610834578063ee40494614610871578063f2fde38b1461089c57610225565b8063afc9161314610708578063b88d4fde14610733578063c87b56dd1461075c578063c9b298f114610799578063cbce4c97146107b557610225565b806395d89b41116100f257806395d89b4114610644578063a0712d681461066f578063a22cb4651461068b578063a2fe9c9b146106b4578063acec338a146106df57610225565b8063715018a6146105ae5780638b8fcdd4146105c55780638da5cb5b146105f057806391b7f5ed1461061b57610225565b80632f745c59116101b15780634f6ccce7116101755780634f6ccce7146104a357806355f804b3146104e05780636352211e146105095780636b0a11761461054657806370a082311461057157610225565b80632f745c59146103df5780633ccfd60b1461041c5780633f8121a21461042657806342842e0e1461044f5780634d615d231461047857610225565b80630d381a28116101f85780630d381a28146102f8578063159457901461033557806318160ddd14610360578063235b6ea11461038b57806323b872dd146103b657610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061347c565b6108c5565b60405161025e9190613aa5565b60405180910390f35b34801561027357600080fd5b5061027c61093f565b6040516102899190613ac0565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061350f565b6109d1565b6040516102c69190613a1c565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613417565b610a56565b005b34801561030457600080fd5b5061031f600480360381019061031a91906132ac565b610b6e565b60405161032c9190613a83565b60405180910390f35b34801561034157600080fd5b5061034a610c68565b6040516103579190613e02565b60405180910390f35b34801561036c57600080fd5b50610375610c6e565b6040516103829190613e02565b60405180910390f35b34801561039757600080fd5b506103a0610c7b565b6040516103ad9190613e02565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613311565b610c81565b005b3480156103eb57600080fd5b5061040660048036038101906104019190613417565b610ce1565b6040516104139190613e02565b60405180910390f35b610424610d86565b005b34801561043257600080fd5b5061044d60048036038101906104489190613453565b610fe1565b005b34801561045b57600080fd5b5061047660048036038101906104719190613311565b61107a565b005b34801561048457600080fd5b5061048d61109a565b60405161049a9190613aa5565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c5919061350f565b6110ad565b6040516104d79190613e02565b60405180910390f35b3480156104ec57600080fd5b50610507600480360381019061050291906134ce565b611144565b005b34801561051557600080fd5b50610530600480360381019061052b919061350f565b6111da565b60405161053d9190613a1c565b60405180910390f35b34801561055257600080fd5b5061055b61128c565b6040516105689190613aa5565b60405180910390f35b34801561057d57600080fd5b50610598600480360381019061059391906132ac565b61129f565b6040516105a59190613e02565b60405180910390f35b3480156105ba57600080fd5b506105c3611357565b005b3480156105d157600080fd5b506105da6113df565b6040516105e79190613a1c565b60405180910390f35b3480156105fc57600080fd5b50610605611405565b6040516106129190613a1c565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d919061350f565b61142f565b005b34801561065057600080fd5b506106596114b5565b6040516106669190613ac0565b60405180910390f35b6106896004803603810190610684919061350f565b611547565b005b34801561069757600080fd5b506106b260048036038101906106ad91906133db565b6116ca565b005b3480156106c057600080fd5b506106c961184b565b6040516106d69190613a1c565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613453565b611871565b005b34801561071457600080fd5b5061071d61190a565b60405161072a9190613a1c565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190613360565b611930565b005b34801561076857600080fd5b50610783600480360381019061077e919061350f565b611992565b6040516107909190613ac0565b60405180910390f35b6107b360048036038101906107ae919061350f565b611a39565b005b3480156107c157600080fd5b506107dc60048036038101906107d79190613417565b611bd5565b005b3480156107ea57600080fd5b506107f3611cf4565b6040516108009190613ac0565b60405180910390f35b34801561081557600080fd5b5061081e611d82565b60405161082b9190613a1c565b60405180910390f35b34801561084057600080fd5b5061085b600480360381019061085691906132d5565b611da8565b6040516108689190613aa5565b60405180910390f35b34801561087d57600080fd5b50610886611e3c565b6040516108939190613e02565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be91906132ac565b611e42565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610938575061093782611f3a565b5b9050919050565b60606000805461094e906140eb565b80601f016020809104026020016040519081016040528092919081815260200182805461097a906140eb565b80156109c75780601f1061099c576101008083540402835291602001916109c7565b820191906000526020600020905b8154815290600101906020018083116109aa57829003601f168201915b5050505050905090565b60006109dc8261201c565b610a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1290613ca2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a61826111da565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac990613d42565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610af1612088565b73ffffffffffffffffffffffffffffffffffffffff161480610b205750610b1f81610b1a612088565b611da8565b5b610b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5690613c02565b60405180910390fd5b610b698383612090565b505050565b60606000610b7b8361129f565b905060008167ffffffffffffffff811115610bbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bed5781602001602082028036833780820191505090505b50905060005b82811015610c5d57610c058582610ce1565b828281518110610c3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c559061414e565b915050610bf3565b508092505050919050565b600e5481565b6000600880549050905090565b600c5481565b610c92610c8c612088565b82612149565b610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc890613d82565b60405180910390fd5b610cdc838383612227565b505050565b6000610cec8361129f565b8210610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490613ae2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d8e612088565b73ffffffffffffffffffffffffffffffffffffffff16610dac611405565b73ffffffffffffffffffffffffffffffffffffffff1614610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df990613cc2565b60405180910390fd5b6000601447610e119190613f76565b90506000600a47610e229190613f76565b90506000600547610e339190613f76565b9050600081838547610e459190614001565b610e4f9190614001565b610e599190614001565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050610ebb57600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050610f1b57600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050610f7b57600080fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610fdb57600080fd5b50505050565b610fe9612088565b73ffffffffffffffffffffffffffffffffffffffff16611007611405565b73ffffffffffffffffffffffffffffffffffffffff161461105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613cc2565b60405180910390fd5b80600a60156101000a81548160ff02191690831515021790555050565b61109583838360405180602001604052806000815250611930565b505050565b600a60149054906101000a900460ff1681565b60006110b7610c6e565b82106110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613da2565b60405180910390fd5b60088281548110611132577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61114c612088565b73ffffffffffffffffffffffffffffffffffffffff1661116a611405565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613cc2565b60405180910390fd5b80600b90805190602001906111d69291906130d0565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90613c42565b60405180910390fd5b80915050919050565b600a60159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790613c22565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61135f612088565b73ffffffffffffffffffffffffffffffffffffffff1661137d611405565b73ffffffffffffffffffffffffffffffffffffffff16146113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca90613cc2565b60405180910390fd5b6113dd6000612483565b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611437612088565b73ffffffffffffffffffffffffffffffffffffffff16611455611405565b73ffffffffffffffffffffffffffffffffffffffff16146114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a290613cc2565b60405180910390fd5b80600c8190555050565b6060600180546114c4906140eb565b80601f01602080910402602001604051908101604052809291908181526020018280546114f0906140eb565b801561153d5780601f106115125761010080835404028352916020019161153d565b820191906000526020600020905b81548152906001019060200180831161152057829003601f168201915b5050505050905090565b6000611551610c6e565b9050600a60149054906101000a900460ff166115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990613d22565b60405180910390fd5b601582106115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90613de2565b60405180910390fd5b81600c546115f39190613fa7565b341015611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613c62565b60405180910390fd5b600d54600e546116459190614001565b82826116519190613f20565b1115611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990613d62565b60405180910390fd5b60005b828110156116c5576116b23382846116ad9190613f20565b612549565b80806116bd9061414e565b915050611695565b505050565b6116d2612088565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790613ba2565b60405180910390fd5b806005600061174d612088565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117fa612088565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161183f9190613aa5565b60405180910390a35050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611879612088565b73ffffffffffffffffffffffffffffffffffffffff16611897611405565b73ffffffffffffffffffffffffffffffffffffffff16146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e490613cc2565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61194161193b612088565b83612149565b611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790613d82565b60405180910390fd5b61198c84848484612567565b50505050565b606061199d8261201c565b6119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d390613d02565b60405180910390fd5b60006119e66125c3565b90506000815111611a065760405180602001604052806000815250611a31565b80611a1084612655565b604051602001611a219291906139f8565b6040516020818303038152906040525b915050919050565b6000611a43610c6e565b90506000611a503361129f565b9050600a60159054906101000a900460ff16611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613b62565b60405180910390fd5b60038184611aaf9190613f20565b10611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690613dc2565b60405180910390fd5b82600c54611afd9190613fa7565b341015611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690613c62565b60405180910390fd5b600d54600e54611b4f9190614001565b8383611b5b9190613f20565b1115611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613d62565b60405180910390fd5b60005b83811015611bcf57611bbc338285611bb79190613f20565b612549565b8080611bc79061414e565b915050611b9f565b50505050565b611bdd612088565b73ffffffffffffffffffffffffffffffffffffffff16611bfb611405565b73ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890613cc2565b60405180910390fd5b600d54811115611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90613be2565b60405180910390fd5b6000611ca0610c6e565b905060005b82811015611cd557611cc2848284611cbd9190613f20565b612549565b8080611ccd9061414e565b915050611ca5565b5081600d6000828254611ce89190614001565b92505081905550505050565b600b8054611d01906140eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2d906140eb565b8015611d7a5780601f10611d4f57610100808354040283529160200191611d7a565b820191906000526020600020905b815481529060010190602001808311611d5d57829003601f168201915b505050505081565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b611e4a612088565b73ffffffffffffffffffffffffffffffffffffffff16611e68611405565b73ffffffffffffffffffffffffffffffffffffffff1614611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590613cc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2590613b22565b60405180910390fd5b611f3781612483565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061200557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612015575061201482612802565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612103836111da565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121548261201c565b612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90613bc2565b60405180910390fd5b600061219e836111da565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061220d57508373ffffffffffffffffffffffffffffffffffffffff166121f5846109d1565b73ffffffffffffffffffffffffffffffffffffffff16145b8061221e575061221d8185611da8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612247826111da565b73ffffffffffffffffffffffffffffffffffffffff161461229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490613ce2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230490613b82565b60405180910390fd5b61231883838361286c565b612323600082612090565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123739190614001565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123ca9190613f20565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612563828260405180602001604052806000815250612980565b5050565b612572848484612227565b61257e848484846129db565b6125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b490613b02565b60405180910390fd5b50505050565b6060600b80546125d2906140eb565b80601f01602080910402602001604051908101604052809291908181526020018280546125fe906140eb565b801561264b5780601f106126205761010080835404028352916020019161264b565b820191906000526020600020905b81548152906001019060200180831161262e57829003601f168201915b5050505050905090565b6060600082141561269d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127fd565b600082905060005b600082146126cf5780806126b89061414e565b915050600a826126c89190613f76565b91506126a5565b60008167ffffffffffffffff811115612711577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127435781602001600182028036833780820191505090505b5090505b600085146127f65760018261275c9190614001565b9150600a8561276b9190614197565b60306127779190613f20565b60f81b8183815181106127b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127ef9190613f76565b9450612747565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612877838383612b72565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128ba576128b581612b77565b6128f9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128f8576128f78382612bc0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561293c5761293781612d2d565b61297b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461297a576129798282612e70565b5b5b505050565b61298a8383612eef565b61299760008484846129db565b6129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90613b02565b60405180910390fd5b505050565b60006129fc8473ffffffffffffffffffffffffffffffffffffffff166130bd565b15612b65578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a25612088565b8786866040518563ffffffff1660e01b8152600401612a479493929190613a37565b602060405180830381600087803b158015612a6157600080fd5b505af1925050508015612a9257506040513d601f19601f82011682018060405250810190612a8f91906134a5565b60015b612b15573d8060008114612ac2576040519150601f19603f3d011682016040523d82523d6000602084013e612ac7565b606091505b50600081511415612b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0490613b02565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b6a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612bcd8461129f565b612bd79190614001565b9050600060076000848152602001908152602001600020549050818114612cbc576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d419190614001565b9050600060096000848152602001908152602001600020549050600060088381548110612d97577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612ddf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e7b8361129f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5690613c82565b60405180910390fd5b612f688161201c565b15612fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9f90613b42565b60405180910390fd5b612fb46000838361286c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130049190613f20565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546130dc906140eb565b90600052602060002090601f0160209004810192826130fe5760008555613145565b82601f1061311757805160ff1916838001178555613145565b82800160010185558215613145579182015b82811115613144578251825591602001919060010190613129565b5b5090506131529190613156565b5090565b5b8082111561316f576000816000905550600101613157565b5090565b600061318661318184613e42565b613e1d565b90508281526020810184848401111561319e57600080fd5b6131a98482856140a9565b509392505050565b60006131c46131bf84613e73565b613e1d565b9050828152602081018484840111156131dc57600080fd5b6131e78482856140a9565b509392505050565b6000813590506131fe81614942565b92915050565b60008135905061321381614959565b92915050565b60008135905061322881614970565b92915050565b60008151905061323d81614970565b92915050565b600082601f83011261325457600080fd5b8135613264848260208601613173565b91505092915050565b600082601f83011261327e57600080fd5b813561328e8482602086016131b1565b91505092915050565b6000813590506132a681614987565b92915050565b6000602082840312156132be57600080fd5b60006132cc848285016131ef565b91505092915050565b600080604083850312156132e857600080fd5b60006132f6858286016131ef565b9250506020613307858286016131ef565b9150509250929050565b60008060006060848603121561332657600080fd5b6000613334868287016131ef565b9350506020613345868287016131ef565b925050604061335686828701613297565b9150509250925092565b6000806000806080858703121561337657600080fd5b6000613384878288016131ef565b9450506020613395878288016131ef565b93505060406133a687828801613297565b925050606085013567ffffffffffffffff8111156133c357600080fd5b6133cf87828801613243565b91505092959194509250565b600080604083850312156133ee57600080fd5b60006133fc858286016131ef565b925050602061340d85828601613204565b9150509250929050565b6000806040838503121561342a57600080fd5b6000613438858286016131ef565b925050602061344985828601613297565b9150509250929050565b60006020828403121561346557600080fd5b600061347384828501613204565b91505092915050565b60006020828403121561348e57600080fd5b600061349c84828501613219565b91505092915050565b6000602082840312156134b757600080fd5b60006134c58482850161322e565b91505092915050565b6000602082840312156134e057600080fd5b600082013567ffffffffffffffff8111156134fa57600080fd5b6135068482850161326d565b91505092915050565b60006020828403121561352157600080fd5b600061352f84828501613297565b91505092915050565b600061354483836139da565b60208301905092915050565b61355981614035565b82525050565b600061356a82613eb4565b6135748185613ee2565b935061357f83613ea4565b8060005b838110156135b05781516135978882613538565b97506135a283613ed5565b925050600181019050613583565b5085935050505092915050565b6135c681614047565b82525050565b60006135d782613ebf565b6135e18185613ef3565b93506135f18185602086016140b8565b6135fa81614284565b840191505092915050565b600061361082613eca565b61361a8185613f04565b935061362a8185602086016140b8565b61363381614284565b840191505092915050565b600061364982613eca565b6136538185613f15565b93506136638185602086016140b8565b80840191505092915050565b600061367c602b83613f04565b915061368782614295565b604082019050919050565b600061369f603283613f04565b91506136aa826142e4565b604082019050919050565b60006136c2602683613f04565b91506136cd82614333565b604082019050919050565b60006136e5601c83613f04565b91506136f082614382565b602082019050919050565b6000613708601783613f04565b9150613713826143ab565b602082019050919050565b600061372b602483613f04565b9150613736826143d4565b604082019050919050565b600061374e601983613f04565b915061375982614423565b602082019050919050565b6000613771602c83613f04565b915061377c8261444c565b604082019050919050565b6000613794602b83613f04565b915061379f8261449b565b604082019050919050565b60006137b7603883613f04565b91506137c2826144ea565b604082019050919050565b60006137da602a83613f04565b91506137e582614539565b604082019050919050565b60006137fd602983613f04565b915061380882614588565b604082019050919050565b6000613820601c83613f04565b915061382b826145d7565b602082019050919050565b6000613843602083613f04565b915061384e82614600565b602082019050919050565b6000613866602c83613f04565b915061387182614629565b604082019050919050565b6000613889602083613f04565b915061389482614678565b602082019050919050565b60006138ac602983613f04565b91506138b7826146a1565b604082019050919050565b60006138cf602f83613f04565b91506138da826146f0565b604082019050919050565b60006138f2601383613f04565b91506138fd8261473f565b602082019050919050565b6000613915602183613f04565b915061392082614768565b604082019050919050565b6000613938602583613f04565b9150613943826147b7565b604082019050919050565b600061395b603183613f04565b915061396682614806565b604082019050919050565b600061397e602c83613f04565b915061398982614855565b604082019050919050565b60006139a1602c83613f04565b91506139ac826148a4565b604082019050919050565b60006139c4602383613f04565b91506139cf826148f3565b604082019050919050565b6139e38161409f565b82525050565b6139f28161409f565b82525050565b6000613a04828561363e565b9150613a10828461363e565b91508190509392505050565b6000602082019050613a316000830184613550565b92915050565b6000608082019050613a4c6000830187613550565b613a596020830186613550565b613a6660408301856139e9565b8181036060830152613a7881846135cc565b905095945050505050565b60006020820190508181036000830152613a9d818461355f565b905092915050565b6000602082019050613aba60008301846135bd565b92915050565b60006020820190508181036000830152613ada8184613605565b905092915050565b60006020820190508181036000830152613afb8161366f565b9050919050565b60006020820190508181036000830152613b1b81613692565b9050919050565b60006020820190508181036000830152613b3b816136b5565b9050919050565b60006020820190508181036000830152613b5b816136d8565b9050919050565b60006020820190508181036000830152613b7b816136fb565b9050919050565b60006020820190508181036000830152613b9b8161371e565b9050919050565b60006020820190508181036000830152613bbb81613741565b9050919050565b60006020820190508181036000830152613bdb81613764565b9050919050565b60006020820190508181036000830152613bfb81613787565b9050919050565b60006020820190508181036000830152613c1b816137aa565b9050919050565b60006020820190508181036000830152613c3b816137cd565b9050919050565b60006020820190508181036000830152613c5b816137f0565b9050919050565b60006020820190508181036000830152613c7b81613813565b9050919050565b60006020820190508181036000830152613c9b81613836565b9050919050565b60006020820190508181036000830152613cbb81613859565b9050919050565b60006020820190508181036000830152613cdb8161387c565b9050919050565b60006020820190508181036000830152613cfb8161389f565b9050919050565b60006020820190508181036000830152613d1b816138c2565b9050919050565b60006020820190508181036000830152613d3b816138e5565b9050919050565b60006020820190508181036000830152613d5b81613908565b9050919050565b60006020820190508181036000830152613d7b8161392b565b9050919050565b60006020820190508181036000830152613d9b8161394e565b9050919050565b60006020820190508181036000830152613dbb81613971565b9050919050565b60006020820190508181036000830152613ddb81613994565b9050919050565b60006020820190508181036000830152613dfb816139b7565b9050919050565b6000602082019050613e1760008301846139e9565b92915050565b6000613e27613e38565b9050613e33828261411d565b919050565b6000604051905090565b600067ffffffffffffffff821115613e5d57613e5c614255565b5b613e6682614284565b9050602081019050919050565b600067ffffffffffffffff821115613e8e57613e8d614255565b5b613e9782614284565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f2b8261409f565b9150613f368361409f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f6b57613f6a6141c8565b5b828201905092915050565b6000613f818261409f565b9150613f8c8361409f565b925082613f9c57613f9b6141f7565b5b828204905092915050565b6000613fb28261409f565b9150613fbd8361409f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ff657613ff56141c8565b5b828202905092915050565b600061400c8261409f565b91506140178361409f565b92508282101561402a576140296141c8565b5b828203905092915050565b60006140408261407f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140d65780820151818401526020810190506140bb565b838111156140e5576000848401525b50505050565b6000600282049050600182168061410357607f821691505b6020821081141561411757614116614226565b5b50919050565b61412682614284565b810181811067ffffffffffffffff8211171561414557614144614255565b5b80604052505050565b60006141598261409f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561418c5761418b6141c8565b5b600182019050919050565b60006141a28261409f565b91506141ad8361409f565b9250826141bd576141bc6141f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5072652d53616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f47696674207265736572766520657863656564656420776974682070726f766960008201527f64656420616d6f756e742e000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742065746865722070726f76696465642e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f537570706c7920657863656564656420776974682070726f766964656420616d60008201527f6f756e742e000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f50726f766964656420616d6f756e742065786365656473207072652d73616c6560008201527f206d696e74206c696d69742e0000000000000000000000000000000000000000602082015250565b7f50726f766964656420616d6f756e742065786365656473206d696e74206c696d60008201527f69742e0000000000000000000000000000000000000000000000000000000000602082015250565b61494b81614035565b811461495657600080fd5b50565b61496281614047565b811461496d57600080fd5b50565b61497981614053565b811461498457600080fd5b50565b6149908161409f565b811461499b57600080fd5b5056fea26469706673582212201ddf8e8ff6ff85d2cba91a1e845d84fb32cef260b97378cf9d51d53c2e933a0964736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d613576544b595a7231466d636e38377847364c56625062414e77677677717a4e425139656b456770626933502f00000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://Qma5vTKYZr1Fmcn87xG6LVbPbANwgvwqzNBQ9ekEgpbi3P/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d613576544b595a7231466d636e38377847364c56625062
Arg [3] : 414e77677677717a4e425139656b456770626933502f00000000000000000000
Deployed Bytecode Sourcemap
43055:3234:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34560:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21449:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23008:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22531:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44220:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43313:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35200:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43242:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23898:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34868:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45881:405;;;:::i;:::-;;43808:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24308:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43139:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35390:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43921:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21143:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43171:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20873:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42361:94;;;;;;;;;;;;;:::i;:::-;;43349:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41710:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44023:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21618:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44847:470;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23301:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43485:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43723:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43553:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24564:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21793:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45323:552;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44542:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43210:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43417:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23667:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43281:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42610:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34560:224;34662:4;34701:35;34686:50;;;:11;:50;;;;:90;;;;34740:36;34764:11;34740:23;:36::i;:::-;34686:90;34679:97;;34560:224;;;:::o;21449:100::-;21503:13;21536:5;21529:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21449:100;:::o;23008:221::-;23084:7;23112:16;23120:7;23112;:16::i;:::-;23104:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23197:15;:24;23213:7;23197:24;;;;;;;;;;;;;;;;;;;;;23190:31;;23008:221;;;:::o;22531:411::-;22612:13;22628:23;22643:7;22628:14;:23::i;:::-;22612:39;;22676:5;22670:11;;:2;:11;;;;22662:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22770:5;22754:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22779:37;22796:5;22803:12;:10;:12::i;:::-;22779:16;:37::i;:::-;22754:62;22732:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22913:21;22922:2;22926:7;22913:8;:21::i;:::-;22531:411;;;:::o;44220:316::-;44279:16;44304:18;44325:17;44335:6;44325:9;:17::i;:::-;44304:38;;44351:25;44393:10;44379:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44351:53;;44415:9;44411:98;44430:10;44426:1;:14;44411:98;;;44471:30;44491:6;44499:1;44471:19;:30::i;:::-;44457:8;44466:1;44457:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;44442:3;;;;;:::i;:::-;;;;44411:98;;;;44522:8;44515:15;;;;44220:316;;;:::o;43313:29::-;;;;:::o;35200:113::-;35261:7;35288:10;:17;;;;35281:24;;35200:113;:::o;43242:34::-;;;;:::o;23898:339::-;24093:41;24112:12;:10;:12::i;:::-;24126:7;24093:18;:41::i;:::-;24085:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24201:28;24211:4;24217:2;24221:7;24201:9;:28::i;:::-;23898:339;;;:::o;34868:256::-;34965:7;35001:23;35018:5;35001:16;:23::i;:::-;34993:5;:31;34985:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35090:12;:19;35103:5;35090:19;;;;;;;;;;;;;;;:26;35110:5;35090:26;;;;;;;;;;;;35083:33;;34868:256;;;;:::o;45881:405::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45933:11:::1;45971:2;45947:21;:26;;;;:::i;:::-;45933:40;;45980:11;46018:2;45994:21;:26;;;;:::i;:::-;45980:40;;46027:11;46065:1;46041:21;:25;;;;:::i;:::-;46027:39;;46073:11;46123:3;46117;46111;46087:21;:27;;;;:::i;:::-;:33;;;;:::i;:::-;:39;;;;:::i;:::-;46073:53;;46151:3;;;;;;;;;;;46143:17;;:22;46161:3;46143:22;;;;;;;;;;;;;;;;;;;;;;;46135:31;;;::::0;::::1;;46189:3;;;;;;;;;;;46181:17;;:22;46199:3;46181:22;;;;;;;;;;;;;;;;;;;;;;;46173:31;;;::::0;::::1;;46227:3;;;;;;;;;;;46219:17;;:22;46237:3;46219:22;;;;;;;;;;;;;;;;;;;;;;;46211:31;;;::::0;::::1;;46265:3;;;;;;;;;;;46257:17;;:22;46275:3;46257:22;;;;;;;;;;;;;;;;;;;;;;;46249:31;;;::::0;::::1;;42001:1;;;;45881:405::o:0;43808:107::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43896:13:::1;43879:14;;:30;;;;;;;;;;;;;;;;;;43808:107:::0;:::o;24308:185::-;24446:39;24463:4;24469:2;24473:7;24446:39;;;;;;;;;;;;:16;:39::i;:::-;24308:185;;;:::o;43139:27::-;;;;;;;;;;;;;:::o;35390:233::-;35465:7;35501:30;:28;:30::i;:::-;35493:5;:38;35485:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35598:10;35609:5;35598:17;;;;;;;;;;;;;;;;;;;;;;;;35591:24;;35390:233;;;:::o;43921:96::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44004:7:::1;43988:13;:23;;;;;;;;;;;;:::i;:::-;;43921:96:::0;:::o;21143:239::-;21215:7;21235:13;21251:7;:16;21259:7;21251:16;;;;;;;;;;;;;;;;;;;;;21235:32;;21303:1;21286:19;;:5;:19;;;;21278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21369:5;21362:12;;;21143:239;;;:::o;43171:34::-;;;;;;;;;;;;;:::o;20873:208::-;20945:7;20990:1;20973:19;;:5;:19;;;;20965:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21057:9;:16;21067:5;21057:16;;;;;;;;;;;;;;;;21050:23;;20873:208;;;:::o;42361:94::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42426:21:::1;42444:1;42426:9;:21::i;:::-;42361:94::o:0;43349:63::-;;;;;;;;;;;;;:::o;41710:87::-;41756:7;41783:6;;;;;;;;;;;41776:13;;41710:87;:::o;44023:77::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44089:5:::1;44080:6;:14;;;;44023:77:::0;:::o;21618:104::-;21674:13;21707:7;21700:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21618:104;:::o;44847:470::-;44900:14;44917:13;:11;:13::i;:::-;44900:30;;44948:7;;;;;;;;;;;44939:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;45005:2;44995:7;:12;44986:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45085:7;45076:6;;:16;;;;:::i;:::-;45063:9;:29;;45054:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;45171:6;;45161:7;;:16;;;;:::i;:::-;45150:7;45141:6;:16;;;;:::i;:::-;:36;;45132:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45232:9;45228:84;45247:7;45243:1;:11;45228:84;;;45269:35;45280:10;45301:1;45292:6;:10;;;;:::i;:::-;45269:9;:35::i;:::-;45256:3;;;;;:::i;:::-;;;;45228:84;;;;44847:470;;:::o;23301:295::-;23416:12;:10;:12::i;:::-;23404:24;;:8;:24;;;;23396:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23516:8;23471:18;:32;23490:12;:10;:12::i;:::-;23471:32;;;;;;;;;;;;;;;:42;23504:8;23471:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23569:8;23540:48;;23555:12;:10;:12::i;:::-;23540:48;;;23579:8;23540:48;;;;;;:::i;:::-;;;;;;;;23301:295;;:::o;43485:63::-;;;;;;;;;;;;;:::o;43723:79::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43790:6:::1;43780:7;;:16;;;;;;;;;;;;;;;;;;43723:79:::0;:::o;43553:63::-;;;;;;;;;;;;;:::o;24564:328::-;24739:41;24758:12;:10;:12::i;:::-;24772:7;24739:18;:41::i;:::-;24731:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24845:39;24859:4;24865:2;24869:7;24878:5;24845:13;:39::i;:::-;24564:328;;;;:::o;21793:334::-;21866:13;21900:16;21908:7;21900;:16::i;:::-;21892:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21981:21;22005:10;:8;:10::i;:::-;21981:34;;22057:1;22039:7;22033:21;:25;:86;;;;;;;;;;;;;;;;;22085:7;22094:18;:7;:16;:18::i;:::-;22068:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22033:86;22026:93;;;21793:334;;;:::o;45323:552::-;45383:14;45400:13;:11;:13::i;:::-;45383:30;;45420:15;45438:21;45448:10;45438:9;:21::i;:::-;45420:39;;45477:14;;;;;;;;;;;45468:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45555:1;45545:7;45535;:17;;;;:::i;:::-;:21;45526:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;45643:7;45634:6;;:16;;;;:::i;:::-;45621:9;:29;;45612:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;45729:6;;45719:7;;:16;;;;:::i;:::-;45708:7;45699:6;:16;;;;:::i;:::-;:36;;45690:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45790:9;45786:84;45805:7;45801:1;:11;45786:84;;;45827:35;45838:10;45859:1;45850:6;:10;;;;:::i;:::-;45827:9;:35::i;:::-;45814:3;;;;;:::i;:::-;;;;45786:84;;;;45323:552;;;:::o;44542:299::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44631:6:::1;;44620:7;:17;;44612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44694:14;44711:13;:11;:13::i;:::-;44694:30;;44737:9;44733:77;44752:7;44748:1;:11;44733:77;;;44774:28;44785:3;44799:1;44790:6;:10;;;;:::i;:::-;44774:9;:28::i;:::-;44761:3;;;;;:::i;:::-;;;;44733:77;;;;44828:7;44818:6;;:17;;;;;;;:::i;:::-;;;;;;;;42001:1;44542:299:::0;;:::o;43210:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43417:63::-;;;;;;;;;;;;;:::o;23667:164::-;23764:4;23788:18;:25;23807:5;23788:25;;;;;;;;;;;;;;;:35;23814:8;23788:35;;;;;;;;;;;;;;;;;;;;;;;;;23781:42;;23667:164;;;;:::o;43281:27::-;;;;:::o;42610:192::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42719:1:::1;42699:22;;:8;:22;;;;42691:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42775:19;42785:8;42775:9;:19::i;:::-;42610:192:::0;:::o;20504:305::-;20606:4;20658:25;20643:40;;;:11;:40;;;;:105;;;;20715:33;20700:48;;;:11;:48;;;;20643:105;:158;;;;20765:36;20789:11;20765:23;:36::i;:::-;20643:158;20623:178;;20504:305;;;:::o;26402:127::-;26467:4;26519:1;26491:30;;:7;:16;26499:7;26491:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26484:37;;26402:127;;;:::o;15912:98::-;15965:7;15992:10;15985:17;;15912:98;:::o;30384:174::-;30486:2;30459:15;:24;30475:7;30459:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30542:7;30538:2;30504:46;;30513:23;30528:7;30513:14;:23::i;:::-;30504:46;;;;;;;;;;;;30384:174;;:::o;26696:348::-;26789:4;26814:16;26822:7;26814;:16::i;:::-;26806:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26890:13;26906:23;26921:7;26906:14;:23::i;:::-;26890:39;;26959:5;26948:16;;:7;:16;;;:51;;;;26992:7;26968:31;;:20;26980:7;26968:11;:20::i;:::-;:31;;;26948:51;:87;;;;27003:32;27020:5;27027:7;27003:16;:32::i;:::-;26948:87;26940:96;;;26696:348;;;;:::o;29688:578::-;29847:4;29820:31;;:23;29835:7;29820:14;:23::i;:::-;:31;;;29812:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29930:1;29916:16;;:2;:16;;;;29908:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29986:39;30007:4;30013:2;30017:7;29986:20;:39::i;:::-;30090:29;30107:1;30111:7;30090:8;:29::i;:::-;30151:1;30132:9;:15;30142:4;30132:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30180:1;30163:9;:13;30173:2;30163:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30211:2;30192:7;:16;30200:7;30192:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30250:7;30246:2;30231:27;;30240:4;30231:27;;;;;;;;;;;;29688:578;;;:::o;42810:173::-;42866:16;42885:6;;;;;;;;;;;42866:25;;42911:8;42902:6;;:17;;;;;;;;;;;;;;;;;;42966:8;42935:40;;42956:8;42935:40;;;;;;;;;;;;42810:173;;:::o;27386:110::-;27462:26;27472:2;27476:7;27462:26;;;;;;;;;;;;:9;:26::i;:::-;27386:110;;:::o;25774:315::-;25931:28;25941:4;25947:2;25951:7;25931:9;:28::i;:::-;25978:48;26001:4;26007:2;26011:7;26020:5;25978:22;:48::i;:::-;25970:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25774:315;;;;:::o;44106:108::-;44166:13;44195;44188:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44106:108;:::o;16443:723::-;16499:13;16729:1;16720:5;:10;16716:53;;;16747:10;;;;;;;;;;;;;;;;;;;;;16716:53;16779:12;16794:5;16779:20;;16810:14;16835:78;16850:1;16842:4;:9;16835:78;;16868:8;;;;;:::i;:::-;;;;16899:2;16891:10;;;;;:::i;:::-;;;16835:78;;;16923:19;16955:6;16945:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16923:39;;16973:154;16989:1;16980:5;:10;16973:154;;17017:1;17007:11;;;;;:::i;:::-;;;17084:2;17076:5;:10;;;;:::i;:::-;17063:2;:24;;;;:::i;:::-;17050:39;;17033:6;17040;17033:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17113:2;17104:11;;;;;:::i;:::-;;;16973:154;;;17151:6;17137:21;;;;;16443:723;;;;:::o;19004:157::-;19089:4;19128:25;19113:40;;;:11;:40;;;;19106:47;;19004:157;;;:::o;36236:589::-;36380:45;36407:4;36413:2;36417:7;36380:26;:45::i;:::-;36458:1;36442:18;;:4;:18;;;36438:187;;;36477:40;36509:7;36477:31;:40::i;:::-;36438:187;;;36547:2;36539:10;;:4;:10;;;36535:90;;36566:47;36599:4;36605:7;36566:32;:47::i;:::-;36535:90;36438:187;36653:1;36639:16;;:2;:16;;;36635:183;;;36672:45;36709:7;36672:36;:45::i;:::-;36635:183;;;36745:4;36739:10;;:2;:10;;;36735:83;;36766:40;36794:2;36798:7;36766:27;:40::i;:::-;36735:83;36635:183;36236:589;;;:::o;27723:321::-;27853:18;27859:2;27863:7;27853:5;:18::i;:::-;27904:54;27935:1;27939:2;27943:7;27952:5;27904:22;:54::i;:::-;27882:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27723:321;;;:::o;31123:803::-;31278:4;31299:15;:2;:13;;;:15::i;:::-;31295:624;;;31351:2;31335:36;;;31372:12;:10;:12::i;:::-;31386:4;31392:7;31401:5;31335:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31331:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31598:1;31581:6;:13;:18;31577:272;;;31624:60;;;;;;;;;;:::i;:::-;;;;;;;;31577:272;31799:6;31793:13;31784:6;31780:2;31776:15;31769:38;31331:533;31468:45;;;31458:55;;;:6;:55;;;;31451:62;;;;;31295:624;31903:4;31896:11;;31123:803;;;;;;;:::o;32498:126::-;;;;:::o;37548:164::-;37652:10;:17;;;;37625:15;:24;37641:7;37625:24;;;;;;;;;;;:44;;;;37680:10;37696:7;37680:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37548:164;:::o;38339:988::-;38605:22;38655:1;38630:22;38647:4;38630:16;:22::i;:::-;:26;;;;:::i;:::-;38605:51;;38667:18;38688:17;:26;38706:7;38688:26;;;;;;;;;;;;38667:47;;38835:14;38821:10;:28;38817:328;;38866:19;38888:12;:18;38901:4;38888:18;;;;;;;;;;;;;;;:34;38907:14;38888:34;;;;;;;;;;;;38866:56;;38972:11;38939:12;:18;38952:4;38939:18;;;;;;;;;;;;;;;:30;38958:10;38939:30;;;;;;;;;;;:44;;;;39089:10;39056:17;:30;39074:11;39056:30;;;;;;;;;;;:43;;;;38817:328;;39241:17;:26;39259:7;39241:26;;;;;;;;;;;39234:33;;;39285:12;:18;39298:4;39285:18;;;;;;;;;;;;;;;:34;39304:14;39285:34;;;;;;;;;;;39278:41;;;38339:988;;;;:::o;39622:1079::-;39875:22;39920:1;39900:10;:17;;;;:21;;;;:::i;:::-;39875:46;;39932:18;39953:15;:24;39969:7;39953:24;;;;;;;;;;;;39932:45;;40304:19;40326:10;40337:14;40326:26;;;;;;;;;;;;;;;;;;;;;;;;40304:48;;40390:11;40365:10;40376;40365:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40501:10;40470:15;:28;40486:11;40470:28;;;;;;;;;;;:41;;;;40642:15;:24;40658:7;40642:24;;;;;;;;;;;40635:31;;;40677:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39622:1079;;;;:::o;37126:221::-;37211:14;37228:20;37245:2;37228:16;:20::i;:::-;37211:37;;37286:7;37259:12;:16;37272:2;37259:16;;;;;;;;;;;;;;;:24;37276:6;37259:24;;;;;;;;;;;:34;;;;37333:6;37304:17;:26;37322:7;37304:26;;;;;;;;;;;:35;;;;37126:221;;;:::o;28380:382::-;28474:1;28460:16;;:2;:16;;;;28452:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28533:16;28541:7;28533;:16::i;:::-;28532:17;28524:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28595:45;28624:1;28628:2;28632:7;28595:20;:45::i;:::-;28670:1;28653:9;:13;28663:2;28653:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28701:2;28682:7;:16;28690:7;28682:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28746:7;28742:2;28721:33;;28738:1;28721:33;;;;;;;;;;;;28380:382;;:::o;8168:387::-;8228:4;8436:12;8503:7;8491:20;8483:28;;8546:1;8539:4;:8;8532:15;;;8168:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:256::-;4939:6;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:50;5114:7;5105:6;5094:9;5090:22;5072:50;:::i;:::-;5062:60;;5018:114;4946:193;;;;:::o;5145:260::-;5203:6;5252:2;5240:9;5231:7;5227:23;5223:32;5220:2;;;5268:1;5265;5258:12;5220:2;5311:1;5336:52;5380:7;5371:6;5360:9;5356:22;5336:52;:::i;:::-;5326:62;;5282:116;5210:195;;;;:::o;5411:282::-;5480:6;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:63;5668:7;5659:6;5648:9;5644:22;5613:63;:::i;:::-;5603:73;;5559:127;5487:206;;;;:::o;5699:375::-;5768:6;5817:2;5805:9;5796:7;5792:23;5788:32;5785:2;;;5833:1;5830;5823:12;5785:2;5904:1;5893:9;5889:17;5876:31;5934:18;5926:6;5923:30;5920:2;;;5966:1;5963;5956:12;5920:2;5994:63;6049:7;6040:6;6029:9;6025:22;5994:63;:::i;:::-;5984:73;;5847:220;5775:299;;;;:::o;6080:262::-;6139:6;6188:2;6176:9;6167:7;6163:23;6159:32;6156:2;;;6204:1;6201;6194:12;6156:2;6247:1;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6218:117;6146:196;;;;:::o;6348:179::-;6417:10;6438:46;6480:3;6472:6;6438:46;:::i;:::-;6516:4;6511:3;6507:14;6493:28;;6428:99;;;;:::o;6533:118::-;6620:24;6638:5;6620:24;:::i;:::-;6615:3;6608:37;6598:53;;:::o;6687:732::-;6806:3;6835:54;6883:5;6835:54;:::i;:::-;6905:86;6984:6;6979:3;6905:86;:::i;:::-;6898:93;;7015:56;7065:5;7015:56;:::i;:::-;7094:7;7125:1;7110:284;7135:6;7132:1;7129:13;7110:284;;;7211:6;7205:13;7238:63;7297:3;7282:13;7238:63;:::i;:::-;7231:70;;7324:60;7377:6;7324:60;:::i;:::-;7314:70;;7170:224;7157:1;7154;7150:9;7145:14;;7110:284;;;7114:14;7410:3;7403:10;;6811:608;;;;;;;:::o;7425:109::-;7506:21;7521:5;7506:21;:::i;:::-;7501:3;7494:34;7484:50;;:::o;7540:360::-;7626:3;7654:38;7686:5;7654:38;:::i;:::-;7708:70;7771:6;7766:3;7708:70;:::i;:::-;7701:77;;7787:52;7832:6;7827:3;7820:4;7813:5;7809:16;7787:52;:::i;:::-;7864:29;7886:6;7864:29;:::i;:::-;7859:3;7855:39;7848:46;;7630:270;;;;;:::o;7906:364::-;7994:3;8022:39;8055:5;8022:39;:::i;:::-;8077:71;8141:6;8136:3;8077:71;:::i;:::-;8070:78;;8157:52;8202:6;8197:3;8190:4;8183:5;8179:16;8157:52;:::i;:::-;8234:29;8256:6;8234:29;:::i;:::-;8229:3;8225:39;8218:46;;7998:272;;;;;:::o;8276:377::-;8382:3;8410:39;8443:5;8410:39;:::i;:::-;8465:89;8547:6;8542:3;8465:89;:::i;:::-;8458:96;;8563:52;8608:6;8603:3;8596:4;8589:5;8585:16;8563:52;:::i;:::-;8640:6;8635:3;8631:16;8624:23;;8386:267;;;;;:::o;8659:366::-;8801:3;8822:67;8886:2;8881:3;8822:67;:::i;:::-;8815:74;;8898:93;8987:3;8898:93;:::i;:::-;9016:2;9011:3;9007:12;9000:19;;8805:220;;;:::o;9031:366::-;9173:3;9194:67;9258:2;9253:3;9194:67;:::i;:::-;9187:74;;9270:93;9359:3;9270:93;:::i;:::-;9388:2;9383:3;9379:12;9372:19;;9177:220;;;:::o;9403:366::-;9545:3;9566:67;9630:2;9625:3;9566:67;:::i;:::-;9559:74;;9642:93;9731:3;9642:93;:::i;:::-;9760:2;9755:3;9751:12;9744:19;;9549:220;;;:::o;9775:366::-;9917:3;9938:67;10002:2;9997:3;9938:67;:::i;:::-;9931:74;;10014:93;10103:3;10014:93;:::i;:::-;10132:2;10127:3;10123:12;10116:19;;9921:220;;;:::o;10147:366::-;10289:3;10310:67;10374:2;10369:3;10310:67;:::i;:::-;10303:74;;10386:93;10475:3;10386:93;:::i;:::-;10504:2;10499:3;10495:12;10488:19;;10293:220;;;:::o;10519:366::-;10661:3;10682:67;10746:2;10741:3;10682:67;:::i;:::-;10675:74;;10758:93;10847:3;10758:93;:::i;:::-;10876:2;10871:3;10867:12;10860:19;;10665:220;;;:::o;10891:366::-;11033:3;11054:67;11118:2;11113:3;11054:67;:::i;:::-;11047:74;;11130:93;11219:3;11130:93;:::i;:::-;11248:2;11243:3;11239:12;11232:19;;11037:220;;;:::o;11263:366::-;11405:3;11426:67;11490:2;11485:3;11426:67;:::i;:::-;11419:74;;11502:93;11591:3;11502:93;:::i;:::-;11620:2;11615:3;11611:12;11604:19;;11409:220;;;:::o;11635:366::-;11777:3;11798:67;11862:2;11857:3;11798:67;:::i;:::-;11791:74;;11874:93;11963:3;11874:93;:::i;:::-;11992:2;11987:3;11983:12;11976:19;;11781:220;;;:::o;12007:366::-;12149:3;12170:67;12234:2;12229:3;12170:67;:::i;:::-;12163:74;;12246:93;12335:3;12246:93;:::i;:::-;12364:2;12359:3;12355:12;12348:19;;12153:220;;;:::o;12379:366::-;12521:3;12542:67;12606:2;12601:3;12542:67;:::i;:::-;12535:74;;12618:93;12707:3;12618:93;:::i;:::-;12736:2;12731:3;12727:12;12720:19;;12525:220;;;:::o;12751:366::-;12893:3;12914:67;12978:2;12973:3;12914:67;:::i;:::-;12907:74;;12990:93;13079:3;12990:93;:::i;:::-;13108:2;13103:3;13099:12;13092:19;;12897:220;;;:::o;13123:366::-;13265:3;13286:67;13350:2;13345:3;13286:67;:::i;:::-;13279:74;;13362:93;13451:3;13362:93;:::i;:::-;13480:2;13475:3;13471:12;13464:19;;13269:220;;;:::o;13495:366::-;13637:3;13658:67;13722:2;13717:3;13658:67;:::i;:::-;13651:74;;13734:93;13823:3;13734:93;:::i;:::-;13852:2;13847:3;13843:12;13836:19;;13641:220;;;:::o;13867:366::-;14009:3;14030:67;14094:2;14089:3;14030:67;:::i;:::-;14023:74;;14106:93;14195:3;14106:93;:::i;:::-;14224:2;14219:3;14215:12;14208:19;;14013:220;;;:::o;14239:366::-;14381:3;14402:67;14466:2;14461:3;14402:67;:::i;:::-;14395:74;;14478:93;14567:3;14478:93;:::i;:::-;14596:2;14591:3;14587:12;14580:19;;14385:220;;;:::o;14611:366::-;14753:3;14774:67;14838:2;14833:3;14774:67;:::i;:::-;14767:74;;14850:93;14939:3;14850:93;:::i;:::-;14968:2;14963:3;14959:12;14952:19;;14757:220;;;:::o;14983:366::-;15125:3;15146:67;15210:2;15205:3;15146:67;:::i;:::-;15139:74;;15222:93;15311:3;15222:93;:::i;:::-;15340:2;15335:3;15331:12;15324:19;;15129:220;;;:::o;15355:366::-;15497:3;15518:67;15582:2;15577:3;15518:67;:::i;:::-;15511:74;;15594:93;15683:3;15594:93;:::i;:::-;15712:2;15707:3;15703:12;15696:19;;15501:220;;;:::o;15727:366::-;15869:3;15890:67;15954:2;15949:3;15890:67;:::i;:::-;15883:74;;15966:93;16055:3;15966:93;:::i;:::-;16084:2;16079:3;16075:12;16068:19;;15873:220;;;:::o;16099:366::-;16241:3;16262:67;16326:2;16321:3;16262:67;:::i;:::-;16255:74;;16338:93;16427:3;16338:93;:::i;:::-;16456:2;16451:3;16447:12;16440:19;;16245:220;;;:::o;16471:366::-;16613:3;16634:67;16698:2;16693:3;16634:67;:::i;:::-;16627:74;;16710:93;16799:3;16710:93;:::i;:::-;16828:2;16823:3;16819:12;16812:19;;16617:220;;;:::o;16843:366::-;16985:3;17006:67;17070:2;17065:3;17006:67;:::i;:::-;16999:74;;17082:93;17171:3;17082:93;:::i;:::-;17200:2;17195:3;17191:12;17184:19;;16989:220;;;:::o;17215:366::-;17357:3;17378:67;17442:2;17437:3;17378:67;:::i;:::-;17371:74;;17454:93;17543:3;17454:93;:::i;:::-;17572:2;17567:3;17563:12;17556:19;;17361:220;;;:::o;17587:366::-;17729:3;17750:67;17814:2;17809:3;17750:67;:::i;:::-;17743:74;;17826:93;17915:3;17826:93;:::i;:::-;17944:2;17939:3;17935:12;17928:19;;17733:220;;;:::o;17959:108::-;18036:24;18054:5;18036:24;:::i;:::-;18031:3;18024:37;18014:53;;:::o;18073:118::-;18160:24;18178:5;18160:24;:::i;:::-;18155:3;18148:37;18138:53;;:::o;18197:435::-;18377:3;18399:95;18490:3;18481:6;18399:95;:::i;:::-;18392:102;;18511:95;18602:3;18593:6;18511:95;:::i;:::-;18504:102;;18623:3;18616:10;;18381:251;;;;;:::o;18638:222::-;18731:4;18769:2;18758:9;18754:18;18746:26;;18782:71;18850:1;18839:9;18835:17;18826:6;18782:71;:::i;:::-;18736:124;;;;:::o;18866:640::-;19061:4;19099:3;19088:9;19084:19;19076:27;;19113:71;19181:1;19170:9;19166:17;19157:6;19113:71;:::i;:::-;19194:72;19262:2;19251:9;19247:18;19238:6;19194:72;:::i;:::-;19276;19344:2;19333:9;19329:18;19320:6;19276:72;:::i;:::-;19395:9;19389:4;19385:20;19380:2;19369:9;19365:18;19358:48;19423:76;19494:4;19485:6;19423:76;:::i;:::-;19415:84;;19066:440;;;;;;;:::o;19512:373::-;19655:4;19693:2;19682:9;19678:18;19670:26;;19742:9;19736:4;19732:20;19728:1;19717:9;19713:17;19706:47;19770:108;19873:4;19864:6;19770:108;:::i;:::-;19762:116;;19660:225;;;;:::o;19891:210::-;19978:4;20016:2;20005:9;20001:18;19993:26;;20029:65;20091:1;20080:9;20076:17;20067:6;20029:65;:::i;:::-;19983:118;;;;:::o;20107:313::-;20220:4;20258:2;20247:9;20243:18;20235:26;;20307:9;20301:4;20297:20;20293:1;20282:9;20278:17;20271:47;20335:78;20408:4;20399:6;20335:78;:::i;:::-;20327:86;;20225:195;;;;:::o;20426:419::-;20592:4;20630:2;20619:9;20615:18;20607:26;;20679:9;20673:4;20669:20;20665:1;20654:9;20650:17;20643:47;20707:131;20833:4;20707:131;:::i;:::-;20699:139;;20597:248;;;:::o;20851:419::-;21017:4;21055:2;21044:9;21040:18;21032:26;;21104:9;21098:4;21094:20;21090:1;21079:9;21075:17;21068:47;21132:131;21258:4;21132:131;:::i;:::-;21124:139;;21022:248;;;:::o;21276:419::-;21442:4;21480:2;21469:9;21465:18;21457:26;;21529:9;21523:4;21519:20;21515:1;21504:9;21500:17;21493:47;21557:131;21683:4;21557:131;:::i;:::-;21549:139;;21447:248;;;:::o;21701:419::-;21867:4;21905:2;21894:9;21890:18;21882:26;;21954:9;21948:4;21944:20;21940:1;21929:9;21925:17;21918:47;21982:131;22108:4;21982:131;:::i;:::-;21974:139;;21872:248;;;:::o;22126:419::-;22292:4;22330:2;22319:9;22315:18;22307:26;;22379:9;22373:4;22369:20;22365:1;22354:9;22350:17;22343:47;22407:131;22533:4;22407:131;:::i;:::-;22399:139;;22297:248;;;:::o;22551:419::-;22717:4;22755:2;22744:9;22740:18;22732:26;;22804:9;22798:4;22794:20;22790:1;22779:9;22775:17;22768:47;22832:131;22958:4;22832:131;:::i;:::-;22824:139;;22722:248;;;:::o;22976:419::-;23142:4;23180:2;23169:9;23165:18;23157:26;;23229:9;23223:4;23219:20;23215:1;23204:9;23200:17;23193:47;23257:131;23383:4;23257:131;:::i;:::-;23249:139;;23147:248;;;:::o;23401:419::-;23567:4;23605:2;23594:9;23590:18;23582:26;;23654:9;23648:4;23644:20;23640:1;23629:9;23625:17;23618:47;23682:131;23808:4;23682:131;:::i;:::-;23674:139;;23572:248;;;:::o;23826:419::-;23992:4;24030:2;24019:9;24015:18;24007:26;;24079:9;24073:4;24069:20;24065:1;24054:9;24050:17;24043:47;24107:131;24233:4;24107:131;:::i;:::-;24099:139;;23997:248;;;:::o;24251:419::-;24417:4;24455:2;24444:9;24440:18;24432:26;;24504:9;24498:4;24494:20;24490:1;24479:9;24475:17;24468:47;24532:131;24658:4;24532:131;:::i;:::-;24524:139;;24422:248;;;:::o;24676:419::-;24842:4;24880:2;24869:9;24865:18;24857:26;;24929:9;24923:4;24919:20;24915:1;24904:9;24900:17;24893:47;24957:131;25083:4;24957:131;:::i;:::-;24949:139;;24847:248;;;:::o;25101:419::-;25267:4;25305:2;25294:9;25290:18;25282:26;;25354:9;25348:4;25344:20;25340:1;25329:9;25325:17;25318:47;25382:131;25508:4;25382:131;:::i;:::-;25374:139;;25272:248;;;:::o;25526:419::-;25692:4;25730:2;25719:9;25715:18;25707:26;;25779:9;25773:4;25769:20;25765:1;25754:9;25750:17;25743:47;25807:131;25933:4;25807:131;:::i;:::-;25799:139;;25697:248;;;:::o;25951:419::-;26117:4;26155:2;26144:9;26140:18;26132:26;;26204:9;26198:4;26194:20;26190:1;26179:9;26175:17;26168:47;26232:131;26358:4;26232:131;:::i;:::-;26224:139;;26122:248;;;:::o;26376:419::-;26542:4;26580:2;26569:9;26565:18;26557:26;;26629:9;26623:4;26619:20;26615:1;26604:9;26600:17;26593:47;26657:131;26783:4;26657:131;:::i;:::-;26649:139;;26547:248;;;:::o;26801:419::-;26967:4;27005:2;26994:9;26990:18;26982:26;;27054:9;27048:4;27044:20;27040:1;27029:9;27025:17;27018:47;27082:131;27208:4;27082:131;:::i;:::-;27074:139;;26972:248;;;:::o;27226:419::-;27392:4;27430:2;27419:9;27415:18;27407:26;;27479:9;27473:4;27469:20;27465:1;27454:9;27450:17;27443:47;27507:131;27633:4;27507:131;:::i;:::-;27499:139;;27397:248;;;:::o;27651:419::-;27817:4;27855:2;27844:9;27840:18;27832:26;;27904:9;27898:4;27894:20;27890:1;27879:9;27875:17;27868:47;27932:131;28058:4;27932:131;:::i;:::-;27924:139;;27822:248;;;:::o;28076:419::-;28242:4;28280:2;28269:9;28265:18;28257:26;;28329:9;28323:4;28319:20;28315:1;28304:9;28300:17;28293:47;28357:131;28483:4;28357:131;:::i;:::-;28349:139;;28247:248;;;:::o;28501:419::-;28667:4;28705:2;28694:9;28690:18;28682:26;;28754:9;28748:4;28744:20;28740:1;28729:9;28725:17;28718:47;28782:131;28908:4;28782:131;:::i;:::-;28774:139;;28672:248;;;:::o;28926:419::-;29092:4;29130:2;29119:9;29115:18;29107:26;;29179:9;29173:4;29169:20;29165:1;29154:9;29150:17;29143:47;29207:131;29333:4;29207:131;:::i;:::-;29199:139;;29097:248;;;:::o;29351:419::-;29517:4;29555:2;29544:9;29540:18;29532:26;;29604:9;29598:4;29594:20;29590:1;29579:9;29575:17;29568:47;29632:131;29758:4;29632:131;:::i;:::-;29624:139;;29522:248;;;:::o;29776:419::-;29942:4;29980:2;29969:9;29965:18;29957:26;;30029:9;30023:4;30019:20;30015:1;30004:9;30000:17;29993:47;30057:131;30183:4;30057:131;:::i;:::-;30049:139;;29947:248;;;:::o;30201:419::-;30367:4;30405:2;30394:9;30390:18;30382:26;;30454:9;30448:4;30444:20;30440:1;30429:9;30425:17;30418:47;30482:131;30608:4;30482:131;:::i;:::-;30474:139;;30372:248;;;:::o;30626:419::-;30792:4;30830:2;30819:9;30815:18;30807:26;;30879:9;30873:4;30869:20;30865:1;30854:9;30850:17;30843:47;30907:131;31033:4;30907:131;:::i;:::-;30899:139;;30797:248;;;:::o;31051:222::-;31144:4;31182:2;31171:9;31167:18;31159:26;;31195:71;31263:1;31252:9;31248:17;31239:6;31195:71;:::i;:::-;31149:124;;;;:::o;31279:129::-;31313:6;31340:20;;:::i;:::-;31330:30;;31369:33;31397:4;31389:6;31369:33;:::i;:::-;31320:88;;;:::o;31414:75::-;31447:6;31480:2;31474:9;31464:19;;31454:35;:::o;31495:307::-;31556:4;31646:18;31638:6;31635:30;31632:2;;;31668:18;;:::i;:::-;31632:2;31706:29;31728:6;31706:29;:::i;:::-;31698:37;;31790:4;31784;31780:15;31772:23;;31561:241;;;:::o;31808:308::-;31870:4;31960:18;31952:6;31949:30;31946:2;;;31982:18;;:::i;:::-;31946:2;32020:29;32042:6;32020:29;:::i;:::-;32012:37;;32104:4;32098;32094:15;32086:23;;31875:241;;;:::o;32122:132::-;32189:4;32212:3;32204:11;;32242:4;32237:3;32233:14;32225:22;;32194:60;;;:::o;32260:114::-;32327:6;32361:5;32355:12;32345:22;;32334:40;;;:::o;32380:98::-;32431:6;32465:5;32459:12;32449:22;;32438:40;;;:::o;32484:99::-;32536:6;32570:5;32564:12;32554:22;;32543:40;;;:::o;32589:113::-;32659:4;32691;32686:3;32682:14;32674:22;;32664:38;;;:::o;32708:184::-;32807:11;32841:6;32836:3;32829:19;32881:4;32876:3;32872:14;32857:29;;32819:73;;;;:::o;32898:168::-;32981:11;33015:6;33010:3;33003:19;33055:4;33050:3;33046:14;33031:29;;32993:73;;;;:::o;33072:169::-;33156:11;33190:6;33185:3;33178:19;33230:4;33225:3;33221:14;33206:29;;33168:73;;;;:::o;33247:148::-;33349:11;33386:3;33371:18;;33361:34;;;;:::o;33401:305::-;33441:3;33460:20;33478:1;33460:20;:::i;:::-;33455:25;;33494:20;33512:1;33494:20;:::i;:::-;33489:25;;33648:1;33580:66;33576:74;33573:1;33570:81;33567:2;;;33654:18;;:::i;:::-;33567:2;33698:1;33695;33691:9;33684:16;;33445:261;;;;:::o;33712:185::-;33752:1;33769:20;33787:1;33769:20;:::i;:::-;33764:25;;33803:20;33821:1;33803:20;:::i;:::-;33798:25;;33842:1;33832:2;;33847:18;;:::i;:::-;33832:2;33889:1;33886;33882:9;33877:14;;33754:143;;;;:::o;33903:348::-;33943:7;33966:20;33984:1;33966:20;:::i;:::-;33961:25;;34000:20;34018:1;34000:20;:::i;:::-;33995:25;;34188:1;34120:66;34116:74;34113:1;34110:81;34105:1;34098:9;34091:17;34087:105;34084:2;;;34195:18;;:::i;:::-;34084:2;34243:1;34240;34236:9;34225:20;;33951:300;;;;:::o;34257:191::-;34297:4;34317:20;34335:1;34317:20;:::i;:::-;34312:25;;34351:20;34369:1;34351:20;:::i;:::-;34346:25;;34390:1;34387;34384:8;34381:2;;;34395:18;;:::i;:::-;34381:2;34440:1;34437;34433:9;34425:17;;34302:146;;;;:::o;34454:96::-;34491:7;34520:24;34538:5;34520:24;:::i;:::-;34509:35;;34499:51;;;:::o;34556:90::-;34590:7;34633:5;34626:13;34619:21;34608:32;;34598:48;;;:::o;34652:149::-;34688:7;34728:66;34721:5;34717:78;34706:89;;34696:105;;;:::o;34807:126::-;34844:7;34884:42;34877:5;34873:54;34862:65;;34852:81;;;:::o;34939:77::-;34976:7;35005:5;34994:16;;34984:32;;;:::o;35022:154::-;35106:6;35101:3;35096;35083:30;35168:1;35159:6;35154:3;35150:16;35143:27;35073:103;;;:::o;35182:307::-;35250:1;35260:113;35274:6;35271:1;35268:13;35260:113;;;35359:1;35354:3;35350:11;35344:18;35340:1;35335:3;35331:11;35324:39;35296:2;35293:1;35289:10;35284:15;;35260:113;;;35391:6;35388:1;35385:13;35382:2;;;35471:1;35462:6;35457:3;35453:16;35446:27;35382:2;35231:258;;;;:::o;35495:320::-;35539:6;35576:1;35570:4;35566:12;35556:22;;35623:1;35617:4;35613:12;35644:18;35634:2;;35700:4;35692:6;35688:17;35678:27;;35634:2;35762;35754:6;35751:14;35731:18;35728:38;35725:2;;;35781:18;;:::i;:::-;35725:2;35546:269;;;;:::o;35821:281::-;35904:27;35926:4;35904:27;:::i;:::-;35896:6;35892:40;36034:6;36022:10;36019:22;35998:18;35986:10;35983:34;35980:62;35977:2;;;36045:18;;:::i;:::-;35977:2;36085:10;36081:2;36074:22;35864:238;;;:::o;36108:233::-;36147:3;36170:24;36188:5;36170:24;:::i;:::-;36161:33;;36216:66;36209:5;36206:77;36203:2;;;36286:18;;:::i;:::-;36203:2;36333:1;36326:5;36322:13;36315:20;;36151:190;;;:::o;36347:176::-;36379:1;36396:20;36414:1;36396:20;:::i;:::-;36391:25;;36430:20;36448:1;36430:20;:::i;:::-;36425:25;;36469:1;36459:2;;36474:18;;:::i;:::-;36459:2;36515:1;36512;36508:9;36503:14;;36381:142;;;;:::o;36529:180::-;36577:77;36574:1;36567:88;36674:4;36671:1;36664:15;36698:4;36695:1;36688:15;36715:180;36763:77;36760:1;36753:88;36860:4;36857:1;36850:15;36884:4;36881:1;36874:15;36901:180;36949:77;36946:1;36939:88;37046:4;37043:1;37036:15;37070:4;37067:1;37060:15;37087:180;37135:77;37132:1;37125:88;37232:4;37229:1;37222:15;37256:4;37253:1;37246:15;37273:102;37314:6;37365:2;37361:7;37356:2;37349:5;37345:14;37341:28;37331:38;;37321:54;;;:::o;37381:230::-;37521:34;37517:1;37509:6;37505:14;37498:58;37590:13;37585:2;37577:6;37573:15;37566:38;37487:124;:::o;37617:237::-;37757:34;37753:1;37745:6;37741:14;37734:58;37826:20;37821:2;37813:6;37809:15;37802:45;37723:131;:::o;37860:225::-;38000:34;37996:1;37988:6;37984:14;37977:58;38069:8;38064:2;38056:6;38052:15;38045:33;37966:119;:::o;38091:178::-;38231:30;38227:1;38219:6;38215:14;38208:54;38197:72;:::o;38275:173::-;38415:25;38411:1;38403:6;38399:14;38392:49;38381:67;:::o;38454:223::-;38594:34;38590:1;38582:6;38578:14;38571:58;38663:6;38658:2;38650:6;38646:15;38639:31;38560:117;:::o;38683:175::-;38823:27;38819:1;38811:6;38807:14;38800:51;38789:69;:::o;38864:231::-;39004:34;39000:1;38992:6;38988:14;38981:58;39073:14;39068:2;39060:6;39056:15;39049:39;38970:125;:::o;39101:230::-;39241:34;39237:1;39229:6;39225:14;39218:58;39310:13;39305:2;39297:6;39293:15;39286:38;39207:124;:::o;39337:243::-;39477:34;39473:1;39465:6;39461:14;39454:58;39546:26;39541:2;39533:6;39529:15;39522:51;39443:137;:::o;39586:229::-;39726:34;39722:1;39714:6;39710:14;39703:58;39795:12;39790:2;39782:6;39778:15;39771:37;39692:123;:::o;39821:228::-;39961:34;39957:1;39949:6;39945:14;39938:58;40030:11;40025:2;40017:6;40013:15;40006:36;39927:122;:::o;40055:178::-;40195:30;40191:1;40183:6;40179:14;40172:54;40161:72;:::o;40239:182::-;40379:34;40375:1;40367:6;40363:14;40356:58;40345:76;:::o;40427:231::-;40567:34;40563:1;40555:6;40551:14;40544:58;40636:14;40631:2;40623:6;40619:15;40612:39;40533:125;:::o;40664:182::-;40804:34;40800:1;40792:6;40788:14;40781:58;40770:76;:::o;40852:228::-;40992:34;40988:1;40980:6;40976:14;40969:58;41061:11;41056:2;41048:6;41044:15;41037:36;40958:122;:::o;41086:234::-;41226:34;41222:1;41214:6;41210:14;41203:58;41295:17;41290:2;41282:6;41278:15;41271:42;41192:128;:::o;41326:169::-;41466:21;41462:1;41454:6;41450:14;41443:45;41432:63;:::o;41501:220::-;41641:34;41637:1;41629:6;41625:14;41618:58;41710:3;41705:2;41697:6;41693:15;41686:28;41607:114;:::o;41727:224::-;41867:34;41863:1;41855:6;41851:14;41844:58;41936:7;41931:2;41923:6;41919:15;41912:32;41833:118;:::o;41957:236::-;42097:34;42093:1;42085:6;42081:14;42074:58;42166:19;42161:2;42153:6;42149:15;42142:44;42063:130;:::o;42199:231::-;42339:34;42335:1;42327:6;42323:14;42316:58;42408:14;42403:2;42395:6;42391:15;42384:39;42305:125;:::o;42436:231::-;42576:34;42572:1;42564:6;42560:14;42553:58;42645:14;42640:2;42632:6;42628:15;42621:39;42542:125;:::o;42673:222::-;42813:34;42809:1;42801:6;42797:14;42790:58;42882:5;42877:2;42869:6;42865:15;42858:30;42779:116;:::o;42901:122::-;42974:24;42992:5;42974:24;:::i;:::-;42967:5;42964:35;42954:2;;43013:1;43010;43003:12;42954:2;42944:79;:::o;43029:116::-;43099:21;43114:5;43099:21;:::i;:::-;43092:5;43089:32;43079:2;;43135:1;43132;43125:12;43079:2;43069:76;:::o;43151:120::-;43223:23;43240:5;43223:23;:::i;:::-;43216:5;43213:34;43203:2;;43261:1;43258;43251:12;43203:2;43193:78;:::o;43277:122::-;43350:24;43368:5;43350:24;:::i;:::-;43343:5;43340:35;43330:2;;43389:1;43386;43379:12;43330:2;43320:79;:::o
Swarm Source
ipfs://1ddf8e8ff6ff85d2cba91a1e845d84fb32cef260b97378cf9d51d53c2e933a09
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.