Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
173 JB
Holders
12
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
28 JBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
JackpotBlocks
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-19 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); 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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/JackpotBlocks.sol pragma solidity >=0.7.0 <0.9.0; contract JackpotBlocks is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.025 ether; uint256 public maxSupply = 5000; uint256 public maxMintAmount = 20; bool public paused = false; mapping(address => bool) public whitelisted; constructor(string memory _initBaseURI) ERC721("Jackpot Blocks", "JB") { setBaseURI(_initBaseURI); mint(msg.sender, 5); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner)public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner() { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() public onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000ea8565b506658d15e17628000600d55611388600e556014600f556000601060006101000a81548160ff0219169083151502179055503480156200009057600080fd5b5060405162005c1438038062005c148339818101604052810190620000b69190620010f5565b6040518060400160405280600e81526020017f4a61636b706f7420426c6f636b730000000000000000000000000000000000008152506040518060400160405280600281526020017f4a4200000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013a92919062000ea8565b5080600190805190602001906200015392919062000ea8565b505050620001766200016a620001a160201b60201c565b620001a960201b60201c565b62000187816200026f60201b60201c565b6200019a3360056200031a60201b60201c565b50620017b6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200027f620001a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a56200048960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f590620011a7565b60405180910390fd5b80600b90805190602001906200031692919062000ea8565b5050565b60006200032c620004b360201b60201c565b9050601060009054906101000a900460ff16156200034957600080fd5b600082116200035757600080fd5b600f548211156200036757600080fd5b600e54828262000378919062001202565b11156200038457600080fd5b620003946200048960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200043f5760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146200043e5781600d546200043091906200125f565b3410156200043d57600080fd5b5b5b6000600190505b82811162000483576200046d84828462000461919062001202565b620004c060201b60201c565b80806200047a90620012c0565b91505062000446565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b620004e2828260405180602001604052806000815250620004e660201b60201c565b5050565b620004f883836200055460201b60201c565b6200050d60008484846200073a60201b60201c565b6200054f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005469062001384565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005be90620013f6565b60405180910390fd5b620005d881620008f460201b60201c565b156200061b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006129062001468565b60405180910390fd5b6200062f600083836200096060201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000681919062001202565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620007688473ffffffffffffffffffffffffffffffffffffffff1662000aa760201b62001af41760201c565b15620008e7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200079a620001a160201b60201c565b8786866040518563ffffffff1660e01b8152600401620007be94939291906200153d565b602060405180830381600087803b158015620007d957600080fd5b505af19250505080156200080d57506040513d601f19601f820116820180604052508101906200080a9190620015ee565b60015b62000896573d806000811462000840576040519150601f19603f3d011682016040523d82523d6000602084013e62000845565b606091505b506000815114156200088e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008859062001384565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008ec565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200097883838362000aba60201b62001b071760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009c557620009bf8162000abf60201b60201c565b62000a0d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000a0c5762000a0b838262000b0860201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a5a5762000a548162000c8560201b60201c565b62000aa2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000aa15762000aa0828262000d6160201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000b228462000ded60201b6200147a1760201c565b62000b2e919062001620565b905060006007600084815260200190815260200160002054905081811462000c14576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c9b919062001620565b905060006009600084815260200190815260200160002054905060006008838154811062000cce5762000ccd6200165b565b5b90600052602060002001549050806008838154811062000cf35762000cf26200165b565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000d455762000d446200168a565b5b6001900381819060005260206000200160009055905550505050565b600062000d798362000ded60201b6200147a1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e58906200172f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000eb69062001780565b90600052602060002090601f01602090048101928262000eda576000855562000f26565b82601f1062000ef557805160ff191683800117855562000f26565b8280016001018555821562000f26579182015b8281111562000f2557825182559160200191906001019062000f08565b5b50905062000f35919062000f39565b5090565b5b8082111562000f5457600081600090555060010162000f3a565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000fc18262000f76565b810181811067ffffffffffffffff8211171562000fe35762000fe262000f87565b5b80604052505050565b600062000ff862000f58565b905062001006828262000fb6565b919050565b600067ffffffffffffffff82111562001029576200102862000f87565b5b620010348262000f76565b9050602081019050919050565b60005b838110156200106157808201518184015260208101905062001044565b8381111562001071576000848401525b50505050565b60006200108e62001088846200100b565b62000fec565b905082815260208101848484011115620010ad57620010ac62000f71565b5b620010ba84828562001041565b509392505050565b600082601f830112620010da57620010d962000f6c565b5b8151620010ec84826020860162001077565b91505092915050565b6000602082840312156200110e576200110d62000f62565b5b600082015167ffffffffffffffff8111156200112f576200112e62000f67565b5b6200113d84828501620010c2565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200118f60208362001146565b91506200119c8262001157565b602082019050919050565b60006020820190508181036000830152620011c28162001180565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200120f82620011c9565b91506200121c83620011c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012545762001253620011d3565b5b828201905092915050565b60006200126c82620011c9565b91506200127983620011c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620012b557620012b4620011d3565b5b828202905092915050565b6000620012cd82620011c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620013035762001302620011d3565b5b600182019050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006200136c60328362001146565b915062001379826200130e565b604082019050919050565b600060208201905081810360008301526200139f816200135d565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000620013de60208362001146565b9150620013eb82620013a6565b602082019050919050565b600060208201905081810360008301526200141181620013cf565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062001450601c8362001146565b91506200145d8262001418565b602082019050919050565b60006020820190508181036000830152620014838162001441565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620014b7826200148a565b9050919050565b620014c981620014aa565b82525050565b620014da81620011c9565b82525050565b600081519050919050565b600082825260208201905092915050565b60006200150982620014e0565b620015158185620014eb565b93506200152781856020860162001041565b620015328162000f76565b840191505092915050565b6000608082019050620015546000830187620014be565b620015636020830186620014be565b620015726040830185620014cf565b8181036060830152620015868184620014fc565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620015c88162001591565b8114620015d457600080fd5b50565b600081519050620015e881620015bd565b92915050565b60006020828403121562001607576200160662000f62565b5b60006200161784828501620015d7565b91505092915050565b60006200162d82620011c9565b91506200163a83620011c9565b92508282101562001650576200164f620011d3565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600062001717602a8362001146565b91506200172482620016b9565b604082019050919050565b600060208201905081810360008301526200174a8162001708565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200179957607f821691505b60208210811415620017b057620017af62001751565b5b50919050565b61444e80620017c66000396000f3fe60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461078c578063d936547e146107b7578063da3ef23f146107f4578063e985e9c51461081d578063f2fde38b1461085a5761020f565b8063a22cb465146106d2578063b88d4fde146106fb578063c668286214610724578063c87b56dd1461074f5761020f565b806370a08231116100e757806370a08231146105ff578063715018a61461063c5780637f00c7a6146106535780638da5cb5b1461067c57806395d89b41146106a75761020f565b806355f804b3146105435780635c975abb1461056c5780636352211e146105975780636c0360eb146105d45761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e1461044e578063438b63001461047757806344a0d68a146104b45780634a4c560d146104dd5780634f6ccce7146105065761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104325761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612e48565b610883565b6040516102489190612e90565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190612ed7565b6108fd565b005b34801561028657600080fd5b5061028f610996565b60405161029c9190612f9d565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612ff5565b610a28565b6040516102d99190613063565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906130aa565b610aad565b005b34801561031757600080fd5b50610320610bc5565b60405161032d91906130f9565b60405180910390f35b34801561034257600080fd5b5061034b610bcb565b60405161035891906130f9565b60405180910390f35b34801561036d57600080fd5b50610376610bd8565b60405161038391906130f9565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613114565b610bde565b005b3480156103c157600080fd5b506103dc60048036038101906103d791906130aa565b610c3e565b6040516103e991906130f9565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190613167565b610ce3565b005b34801561042757600080fd5b50610430610dba565b005b61044c600480360381019061044791906130aa565b610eaf565b005b34801561045a57600080fd5b5061047560048036038101906104709190613114565b610ff5565b005b34801561048357600080fd5b5061049e60048036038101906104999190613167565b611015565b6040516104ab9190613252565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190612ff5565b6110c3565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613167565b611149565b005b34801561051257600080fd5b5061052d60048036038101906105289190612ff5565b611220565b60405161053a91906130f9565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906133a9565b611291565b005b34801561057857600080fd5b50610581611327565b60405161058e9190612e90565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190612ff5565b61133a565b6040516105cb9190613063565b60405180910390f35b3480156105e057600080fd5b506105e96113ec565b6040516105f69190612f9d565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613167565b61147a565b60405161063391906130f9565b60405180910390f35b34801561064857600080fd5b50610651611532565b005b34801561065f57600080fd5b5061067a60048036038101906106759190612ff5565b6115ba565b005b34801561068857600080fd5b50610691611640565b60405161069e9190613063565b60405180910390f35b3480156106b357600080fd5b506106bc61166a565b6040516106c99190612f9d565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906133f2565b6116fc565b005b34801561070757600080fd5b50610722600480360381019061071d91906134d3565b611712565b005b34801561073057600080fd5b50610739611774565b6040516107469190612f9d565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190612ff5565b611802565b6040516107839190612f9d565b60405180910390f35b34801561079857600080fd5b506107a16118ac565b6040516107ae91906130f9565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613167565b6118b2565b6040516107eb9190612e90565b60405180910390f35b34801561080057600080fd5b5061081b600480360381019061081691906133a9565b6118d2565b005b34801561082957600080fd5b50610844600480360381019061083f9190613556565b611968565b6040516108519190612e90565b60405180910390f35b34801561086657600080fd5b50610881600480360381019061087c9190613167565b6119fc565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f657506108f582611b0c565b5b9050919050565b610905611bee565b73ffffffffffffffffffffffffffffffffffffffff16610923611640565b73ffffffffffffffffffffffffffffffffffffffff1614610979576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610970906135e2565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109a590613631565b80601f01602080910402602001604051908101604052809291908181526020018280546109d190613631565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b5050505050905090565b6000610a3382611bf6565b610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a69906136d5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab88261133a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090613767565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b48611bee565b73ffffffffffffffffffffffffffffffffffffffff161480610b775750610b7681610b71611bee565b611968565b5b610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad906137f9565b60405180910390fd5b610bc08383611c62565b505050565b600d5481565b6000600880549050905090565b600f5481565b610bef610be9611bee565b82611d1b565b610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c259061388b565b60405180910390fd5b610c39838383611df9565b505050565b6000610c498361147a565b8210610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c819061391d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ceb611bee565b73ffffffffffffffffffffffffffffffffffffffff16610d09611640565b73ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d56906135e2565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610dc2611bee565b73ffffffffffffffffffffffffffffffffffffffff16610de0611640565b73ffffffffffffffffffffffffffffffffffffffff1614610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d906135e2565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e5c9061396e565b60006040518083038185875af1925050503d8060008114610e99576040519150601f19603f3d011682016040523d82523d6000602084013e610e9e565b606091505b5050905080610eac57600080fd5b50565b6000610eb9610bcb565b9050601060009054906101000a900460ff1615610ed557600080fd5b60008211610ee257600080fd5b600f54821115610ef157600080fd5b600e548282610f0091906139b2565b1115610f0b57600080fd5b610f13611640565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb95760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610fb85781600d54610fab9190613a08565b341015610fb757600080fd5b5b5b6000600190505b828111610fef57610fdc848284610fd791906139b2565b612055565b8080610fe790613a62565b915050610fc0565b50505050565b61101083838360405180602001604052806000815250611712565b505050565b606060006110228361147a565b905060008167ffffffffffffffff8111156110405761103f61327e565b5b60405190808252806020026020018201604052801561106e5781602001602082028036833780820191505090505b50905060005b828110156110b8576110868582610c3e565b82828151811061109957611098613aab565b5b60200260200101818152505080806110b090613a62565b915050611074565b508092505050919050565b6110cb611bee565b73ffffffffffffffffffffffffffffffffffffffff166110e9611640565b73ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611136906135e2565b60405180910390fd5b80600d8190555050565b611151611bee565b73ffffffffffffffffffffffffffffffffffffffff1661116f611640565b73ffffffffffffffffffffffffffffffffffffffff16146111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc906135e2565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061122a610bcb565b821061126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290613b4c565b60405180910390fd5b6008828154811061127f5761127e613aab565b5b90600052602060002001549050919050565b611299611bee565b73ffffffffffffffffffffffffffffffffffffffff166112b7611640565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906135e2565b60405180910390fd5b80600b9080519060200190611323929190612d39565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90613bde565b60405180910390fd5b80915050919050565b600b80546113f990613631565b80601f016020809104026020016040519081016040528092919081815260200182805461142590613631565b80156114725780601f1061144757610100808354040283529160200191611472565b820191906000526020600020905b81548152906001019060200180831161145557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290613c70565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153a611bee565b73ffffffffffffffffffffffffffffffffffffffff16611558611640565b73ffffffffffffffffffffffffffffffffffffffff16146115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a5906135e2565b60405180910390fd5b6115b86000612073565b565b6115c2611bee565b73ffffffffffffffffffffffffffffffffffffffff166115e0611640565b73ffffffffffffffffffffffffffffffffffffffff1614611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d906135e2565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461167990613631565b80601f01602080910402602001604051908101604052809291908181526020018280546116a590613631565b80156116f25780601f106116c7576101008083540402835291602001916116f2565b820191906000526020600020905b8154815290600101906020018083116116d557829003601f168201915b5050505050905090565b61170e611707611bee565b8383612139565b5050565b61172361171d611bee565b83611d1b565b611762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117599061388b565b60405180910390fd5b61176e848484846122a6565b50505050565b600c805461178190613631565b80601f01602080910402602001604051908101604052809291908181526020018280546117ad90613631565b80156117fa5780601f106117cf576101008083540402835291602001916117fa565b820191906000526020600020905b8154815290600101906020018083116117dd57829003601f168201915b505050505081565b606061180d82611bf6565b61184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613d02565b60405180910390fd5b6000611856612302565b9050600081511161187657604051806020016040528060008152506118a4565b8061188084612394565b600c60405160200161189493929190613df2565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6118da611bee565b73ffffffffffffffffffffffffffffffffffffffff166118f8611640565b73ffffffffffffffffffffffffffffffffffffffff161461194e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611945906135e2565b60405180910390fd5b80600c9080519060200190611964929190612d39565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a04611bee565b73ffffffffffffffffffffffffffffffffffffffff16611a22611640565b73ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f906135e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90613e95565b60405180910390fd5b611af181612073565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bd757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611be75750611be6826124f5565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cd58361133a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d2682611bf6565b611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90613f27565b60405180910390fd5b6000611d708361133a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ddf57508373ffffffffffffffffffffffffffffffffffffffff16611dc784610a28565b73ffffffffffffffffffffffffffffffffffffffff16145b80611df05750611def8185611968565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e198261133a565b73ffffffffffffffffffffffffffffffffffffffff1614611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6690613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed69061404b565b60405180910390fd5b611eea83838361255f565b611ef5600082611c62565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f45919061406b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f9c91906139b2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61206f828260405180602001604052806000815250612673565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219f906140eb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122999190612e90565b60405180910390a3505050565b6122b1848484611df9565b6122bd848484846126ce565b6122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f39061417d565b60405180910390fd5b50505050565b6060600b805461231190613631565b80601f016020809104026020016040519081016040528092919081815260200182805461233d90613631565b801561238a5780601f1061235f5761010080835404028352916020019161238a565b820191906000526020600020905b81548152906001019060200180831161236d57829003601f168201915b5050505050905090565b606060008214156123dc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124f0565b600082905060005b6000821461240e5780806123f790613a62565b915050600a8261240791906141cc565b91506123e4565b60008167ffffffffffffffff81111561242a5761242961327e565b5b6040519080825280601f01601f19166020018201604052801561245c5781602001600182028036833780820191505090505b5090505b600085146124e957600182612475919061406b565b9150600a8561248491906141fd565b603061249091906139b2565b60f81b8183815181106124a6576124a5613aab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124e291906141cc565b9450612460565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61256a838383611b07565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125ad576125a881612865565b6125ec565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125eb576125ea83826128ae565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561262f5761262a81612a1b565b61266e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461266d5761266c8282612aec565b5b5b505050565b61267d8383612b6b565b61268a60008484846126ce565b6126c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c09061417d565b60405180910390fd5b505050565b60006126ef8473ffffffffffffffffffffffffffffffffffffffff16611af4565b15612858578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612718611bee565b8786866040518563ffffffff1660e01b815260040161273a9493929190614283565b602060405180830381600087803b15801561275457600080fd5b505af192505050801561278557506040513d601f19601f8201168201806040525081019061278291906142e4565b60015b612808573d80600081146127b5576040519150601f19603f3d011682016040523d82523d6000602084013e6127ba565b606091505b50600081511415612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f79061417d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061285d565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016128bb8461147a565b6128c5919061406b565b90506000600760008481526020019081526020016000205490508181146129aa576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612a2f919061406b565b9050600060096000848152602001908152602001600020549050600060088381548110612a5f57612a5e613aab565b5b906000526020600020015490508060088381548110612a8157612a80613aab565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ad057612acf614311565b5b6001900381819060005260206000200160009055905550505050565b6000612af78361147a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd29061438c565b60405180910390fd5b612be481611bf6565b15612c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1b906143f8565b60405180910390fd5b612c306000838361255f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c8091906139b2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612d4590613631565b90600052602060002090601f016020900481019282612d675760008555612dae565b82601f10612d8057805160ff1916838001178555612dae565b82800160010185558215612dae579182015b82811115612dad578251825591602001919060010190612d92565b5b509050612dbb9190612dbf565b5090565b5b80821115612dd8576000816000905550600101612dc0565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e2581612df0565b8114612e3057600080fd5b50565b600081359050612e4281612e1c565b92915050565b600060208284031215612e5e57612e5d612de6565b5b6000612e6c84828501612e33565b91505092915050565b60008115159050919050565b612e8a81612e75565b82525050565b6000602082019050612ea56000830184612e81565b92915050565b612eb481612e75565b8114612ebf57600080fd5b50565b600081359050612ed181612eab565b92915050565b600060208284031215612eed57612eec612de6565b5b6000612efb84828501612ec2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f3e578082015181840152602081019050612f23565b83811115612f4d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f6f82612f04565b612f798185612f0f565b9350612f89818560208601612f20565b612f9281612f53565b840191505092915050565b60006020820190508181036000830152612fb78184612f64565b905092915050565b6000819050919050565b612fd281612fbf565b8114612fdd57600080fd5b50565b600081359050612fef81612fc9565b92915050565b60006020828403121561300b5761300a612de6565b5b600061301984828501612fe0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061304d82613022565b9050919050565b61305d81613042565b82525050565b60006020820190506130786000830184613054565b92915050565b61308781613042565b811461309257600080fd5b50565b6000813590506130a48161307e565b92915050565b600080604083850312156130c1576130c0612de6565b5b60006130cf85828601613095565b92505060206130e085828601612fe0565b9150509250929050565b6130f381612fbf565b82525050565b600060208201905061310e60008301846130ea565b92915050565b60008060006060848603121561312d5761312c612de6565b5b600061313b86828701613095565b935050602061314c86828701613095565b925050604061315d86828701612fe0565b9150509250925092565b60006020828403121561317d5761317c612de6565b5b600061318b84828501613095565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131c981612fbf565b82525050565b60006131db83836131c0565b60208301905092915050565b6000602082019050919050565b60006131ff82613194565b613209818561319f565b9350613214836131b0565b8060005b8381101561324557815161322c88826131cf565b9750613237836131e7565b925050600181019050613218565b5085935050505092915050565b6000602082019050818103600083015261326c81846131f4565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132b682612f53565b810181811067ffffffffffffffff821117156132d5576132d461327e565b5b80604052505050565b60006132e8612ddc565b90506132f482826132ad565b919050565b600067ffffffffffffffff8211156133145761331361327e565b5b61331d82612f53565b9050602081019050919050565b82818337600083830152505050565b600061334c613347846132f9565b6132de565b90508281526020810184848401111561336857613367613279565b5b61337384828561332a565b509392505050565b600082601f8301126133905761338f613274565b5b81356133a0848260208601613339565b91505092915050565b6000602082840312156133bf576133be612de6565b5b600082013567ffffffffffffffff8111156133dd576133dc612deb565b5b6133e98482850161337b565b91505092915050565b6000806040838503121561340957613408612de6565b5b600061341785828601613095565b925050602061342885828601612ec2565b9150509250929050565b600067ffffffffffffffff82111561344d5761344c61327e565b5b61345682612f53565b9050602081019050919050565b600061347661347184613432565b6132de565b90508281526020810184848401111561349257613491613279565b5b61349d84828561332a565b509392505050565b600082601f8301126134ba576134b9613274565b5b81356134ca848260208601613463565b91505092915050565b600080600080608085870312156134ed576134ec612de6565b5b60006134fb87828801613095565b945050602061350c87828801613095565b935050604061351d87828801612fe0565b925050606085013567ffffffffffffffff81111561353e5761353d612deb565b5b61354a878288016134a5565b91505092959194509250565b6000806040838503121561356d5761356c612de6565b5b600061357b85828601613095565b925050602061358c85828601613095565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135cc602083612f0f565b91506135d782613596565b602082019050919050565b600060208201905081810360008301526135fb816135bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061364957607f821691505b6020821081141561365d5761365c613602565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006136bf602c83612f0f565b91506136ca82613663565b604082019050919050565b600060208201905081810360008301526136ee816136b2565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613751602183612f0f565b915061375c826136f5565b604082019050919050565b6000602082019050818103600083015261378081613744565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006137e3603883612f0f565b91506137ee82613787565b604082019050919050565b60006020820190508181036000830152613812816137d6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613875603183612f0f565b915061388082613819565b604082019050919050565b600060208201905081810360008301526138a481613868565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613907602b83612f0f565b9150613912826138ab565b604082019050919050565b60006020820190508181036000830152613936816138fa565b9050919050565b600081905092915050565b50565b600061395860008361393d565b915061396382613948565b600082019050919050565b60006139798261394b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139bd82612fbf565b91506139c883612fbf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139fd576139fc613983565b5b828201905092915050565b6000613a1382612fbf565b9150613a1e83612fbf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5757613a56613983565b5b828202905092915050565b6000613a6d82612fbf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613aa057613a9f613983565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613b36602c83612f0f565b9150613b4182613ada565b604082019050919050565b60006020820190508181036000830152613b6581613b29565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613bc8602983612f0f565b9150613bd382613b6c565b604082019050919050565b60006020820190508181036000830152613bf781613bbb565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613c5a602a83612f0f565b9150613c6582613bfe565b604082019050919050565b60006020820190508181036000830152613c8981613c4d565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613cec602f83612f0f565b9150613cf782613c90565b604082019050919050565b60006020820190508181036000830152613d1b81613cdf565b9050919050565b600081905092915050565b6000613d3882612f04565b613d428185613d22565b9350613d52818560208601612f20565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613d8081613631565b613d8a8186613d22565b94506001821660008114613da55760018114613db657613de9565b60ff19831686528186019350613de9565b613dbf85613d5e565b60005b83811015613de157815481890152600182019150602081019050613dc2565b838801955050505b50505092915050565b6000613dfe8286613d2d565b9150613e0a8285613d2d565b9150613e168284613d73565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602683612f0f565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613f11602c83612f0f565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613fa3602983612f0f565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614035602483612f0f565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b600061407682612fbf565b915061408183612fbf565b92508282101561409457614093613983565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006140d5601983612f0f565b91506140e08261409f565b602082019050919050565b60006020820190508181036000830152614104816140c8565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614167603283612f0f565b91506141728261410b565b604082019050919050565b600060208201905081810360008301526141968161415a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d782612fbf565b91506141e283612fbf565b9250826141f2576141f161419d565b5b828204905092915050565b600061420882612fbf565b915061421383612fbf565b9250826142235761422261419d565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006142558261422e565b61425f8185614239565b935061426f818560208601612f20565b61427881612f53565b840191505092915050565b60006080820190506142986000830187613054565b6142a56020830186613054565b6142b260408301856130ea565b81810360608301526142c4818461424a565b905095945050505050565b6000815190506142de81612e1c565b92915050565b6000602082840312156142fa576142f9612de6565b5b6000614308848285016142cf565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614376602083612f0f565b915061438182614340565b602082019050919050565b600060208201905081810360008301526143a581614369565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006143e2601c83612f0f565b91506143ed826143ac565b602082019050919050565b60006020820190508181036000830152614411816143d5565b905091905056fea26469706673582212208b8711093d4bbb69cb7b859740b2fbde81615d38bd44b4aee202867006e6113964736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a6f73417a4259386a5155457459396a5542484557417941547473776b476472423235367a564155425136652f00000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461078c578063d936547e146107b7578063da3ef23f146107f4578063e985e9c51461081d578063f2fde38b1461085a5761020f565b8063a22cb465146106d2578063b88d4fde146106fb578063c668286214610724578063c87b56dd1461074f5761020f565b806370a08231116100e757806370a08231146105ff578063715018a61461063c5780637f00c7a6146106535780638da5cb5b1461067c57806395d89b41146106a75761020f565b806355f804b3146105435780635c975abb1461056c5780636352211e146105975780636c0360eb146105d45761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e1461044e578063438b63001461047757806344a0d68a146104b45780634a4c560d146104dd5780634f6ccce7146105065761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104325761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612e48565b610883565b6040516102489190612e90565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190612ed7565b6108fd565b005b34801561028657600080fd5b5061028f610996565b60405161029c9190612f9d565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612ff5565b610a28565b6040516102d99190613063565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906130aa565b610aad565b005b34801561031757600080fd5b50610320610bc5565b60405161032d91906130f9565b60405180910390f35b34801561034257600080fd5b5061034b610bcb565b60405161035891906130f9565b60405180910390f35b34801561036d57600080fd5b50610376610bd8565b60405161038391906130f9565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613114565b610bde565b005b3480156103c157600080fd5b506103dc60048036038101906103d791906130aa565b610c3e565b6040516103e991906130f9565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190613167565b610ce3565b005b34801561042757600080fd5b50610430610dba565b005b61044c600480360381019061044791906130aa565b610eaf565b005b34801561045a57600080fd5b5061047560048036038101906104709190613114565b610ff5565b005b34801561048357600080fd5b5061049e60048036038101906104999190613167565b611015565b6040516104ab9190613252565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190612ff5565b6110c3565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613167565b611149565b005b34801561051257600080fd5b5061052d60048036038101906105289190612ff5565b611220565b60405161053a91906130f9565b60405180910390f35b34801561054f57600080fd5b5061056a600480360381019061056591906133a9565b611291565b005b34801561057857600080fd5b50610581611327565b60405161058e9190612e90565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190612ff5565b61133a565b6040516105cb9190613063565b60405180910390f35b3480156105e057600080fd5b506105e96113ec565b6040516105f69190612f9d565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613167565b61147a565b60405161063391906130f9565b60405180910390f35b34801561064857600080fd5b50610651611532565b005b34801561065f57600080fd5b5061067a60048036038101906106759190612ff5565b6115ba565b005b34801561068857600080fd5b50610691611640565b60405161069e9190613063565b60405180910390f35b3480156106b357600080fd5b506106bc61166a565b6040516106c99190612f9d565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906133f2565b6116fc565b005b34801561070757600080fd5b50610722600480360381019061071d91906134d3565b611712565b005b34801561073057600080fd5b50610739611774565b6040516107469190612f9d565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190612ff5565b611802565b6040516107839190612f9d565b60405180910390f35b34801561079857600080fd5b506107a16118ac565b6040516107ae91906130f9565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613167565b6118b2565b6040516107eb9190612e90565b60405180910390f35b34801561080057600080fd5b5061081b600480360381019061081691906133a9565b6118d2565b005b34801561082957600080fd5b50610844600480360381019061083f9190613556565b611968565b6040516108519190612e90565b60405180910390f35b34801561086657600080fd5b50610881600480360381019061087c9190613167565b6119fc565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f657506108f582611b0c565b5b9050919050565b610905611bee565b73ffffffffffffffffffffffffffffffffffffffff16610923611640565b73ffffffffffffffffffffffffffffffffffffffff1614610979576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610970906135e2565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109a590613631565b80601f01602080910402602001604051908101604052809291908181526020018280546109d190613631565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b5050505050905090565b6000610a3382611bf6565b610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a69906136d5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab88261133a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090613767565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b48611bee565b73ffffffffffffffffffffffffffffffffffffffff161480610b775750610b7681610b71611bee565b611968565b5b610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad906137f9565b60405180910390fd5b610bc08383611c62565b505050565b600d5481565b6000600880549050905090565b600f5481565b610bef610be9611bee565b82611d1b565b610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c259061388b565b60405180910390fd5b610c39838383611df9565b505050565b6000610c498361147a565b8210610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c819061391d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ceb611bee565b73ffffffffffffffffffffffffffffffffffffffff16610d09611640565b73ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d56906135e2565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610dc2611bee565b73ffffffffffffffffffffffffffffffffffffffff16610de0611640565b73ffffffffffffffffffffffffffffffffffffffff1614610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d906135e2565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e5c9061396e565b60006040518083038185875af1925050503d8060008114610e99576040519150601f19603f3d011682016040523d82523d6000602084013e610e9e565b606091505b5050905080610eac57600080fd5b50565b6000610eb9610bcb565b9050601060009054906101000a900460ff1615610ed557600080fd5b60008211610ee257600080fd5b600f54821115610ef157600080fd5b600e548282610f0091906139b2565b1115610f0b57600080fd5b610f13611640565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb95760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610fb85781600d54610fab9190613a08565b341015610fb757600080fd5b5b5b6000600190505b828111610fef57610fdc848284610fd791906139b2565b612055565b8080610fe790613a62565b915050610fc0565b50505050565b61101083838360405180602001604052806000815250611712565b505050565b606060006110228361147a565b905060008167ffffffffffffffff8111156110405761103f61327e565b5b60405190808252806020026020018201604052801561106e5781602001602082028036833780820191505090505b50905060005b828110156110b8576110868582610c3e565b82828151811061109957611098613aab565b5b60200260200101818152505080806110b090613a62565b915050611074565b508092505050919050565b6110cb611bee565b73ffffffffffffffffffffffffffffffffffffffff166110e9611640565b73ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611136906135e2565b60405180910390fd5b80600d8190555050565b611151611bee565b73ffffffffffffffffffffffffffffffffffffffff1661116f611640565b73ffffffffffffffffffffffffffffffffffffffff16146111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc906135e2565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061122a610bcb565b821061126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290613b4c565b60405180910390fd5b6008828154811061127f5761127e613aab565b5b90600052602060002001549050919050565b611299611bee565b73ffffffffffffffffffffffffffffffffffffffff166112b7611640565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906135e2565b60405180910390fd5b80600b9080519060200190611323929190612d39565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90613bde565b60405180910390fd5b80915050919050565b600b80546113f990613631565b80601f016020809104026020016040519081016040528092919081815260200182805461142590613631565b80156114725780601f1061144757610100808354040283529160200191611472565b820191906000526020600020905b81548152906001019060200180831161145557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290613c70565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153a611bee565b73ffffffffffffffffffffffffffffffffffffffff16611558611640565b73ffffffffffffffffffffffffffffffffffffffff16146115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a5906135e2565b60405180910390fd5b6115b86000612073565b565b6115c2611bee565b73ffffffffffffffffffffffffffffffffffffffff166115e0611640565b73ffffffffffffffffffffffffffffffffffffffff1614611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d906135e2565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461167990613631565b80601f01602080910402602001604051908101604052809291908181526020018280546116a590613631565b80156116f25780601f106116c7576101008083540402835291602001916116f2565b820191906000526020600020905b8154815290600101906020018083116116d557829003601f168201915b5050505050905090565b61170e611707611bee565b8383612139565b5050565b61172361171d611bee565b83611d1b565b611762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117599061388b565b60405180910390fd5b61176e848484846122a6565b50505050565b600c805461178190613631565b80601f01602080910402602001604051908101604052809291908181526020018280546117ad90613631565b80156117fa5780601f106117cf576101008083540402835291602001916117fa565b820191906000526020600020905b8154815290600101906020018083116117dd57829003601f168201915b505050505081565b606061180d82611bf6565b61184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613d02565b60405180910390fd5b6000611856612302565b9050600081511161187657604051806020016040528060008152506118a4565b8061188084612394565b600c60405160200161189493929190613df2565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6118da611bee565b73ffffffffffffffffffffffffffffffffffffffff166118f8611640565b73ffffffffffffffffffffffffffffffffffffffff161461194e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611945906135e2565b60405180910390fd5b80600c9080519060200190611964929190612d39565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a04611bee565b73ffffffffffffffffffffffffffffffffffffffff16611a22611640565b73ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f906135e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90613e95565b60405180910390fd5b611af181612073565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bd757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611be75750611be6826124f5565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cd58361133a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d2682611bf6565b611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90613f27565b60405180910390fd5b6000611d708361133a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ddf57508373ffffffffffffffffffffffffffffffffffffffff16611dc784610a28565b73ffffffffffffffffffffffffffffffffffffffff16145b80611df05750611def8185611968565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e198261133a565b73ffffffffffffffffffffffffffffffffffffffff1614611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6690613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed69061404b565b60405180910390fd5b611eea83838361255f565b611ef5600082611c62565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f45919061406b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f9c91906139b2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61206f828260405180602001604052806000815250612673565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219f906140eb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122999190612e90565b60405180910390a3505050565b6122b1848484611df9565b6122bd848484846126ce565b6122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f39061417d565b60405180910390fd5b50505050565b6060600b805461231190613631565b80601f016020809104026020016040519081016040528092919081815260200182805461233d90613631565b801561238a5780601f1061235f5761010080835404028352916020019161238a565b820191906000526020600020905b81548152906001019060200180831161236d57829003601f168201915b5050505050905090565b606060008214156123dc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124f0565b600082905060005b6000821461240e5780806123f790613a62565b915050600a8261240791906141cc565b91506123e4565b60008167ffffffffffffffff81111561242a5761242961327e565b5b6040519080825280601f01601f19166020018201604052801561245c5781602001600182028036833780820191505090505b5090505b600085146124e957600182612475919061406b565b9150600a8561248491906141fd565b603061249091906139b2565b60f81b8183815181106124a6576124a5613aab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124e291906141cc565b9450612460565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61256a838383611b07565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125ad576125a881612865565b6125ec565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125eb576125ea83826128ae565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561262f5761262a81612a1b565b61266e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461266d5761266c8282612aec565b5b5b505050565b61267d8383612b6b565b61268a60008484846126ce565b6126c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c09061417d565b60405180910390fd5b505050565b60006126ef8473ffffffffffffffffffffffffffffffffffffffff16611af4565b15612858578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612718611bee565b8786866040518563ffffffff1660e01b815260040161273a9493929190614283565b602060405180830381600087803b15801561275457600080fd5b505af192505050801561278557506040513d601f19601f8201168201806040525081019061278291906142e4565b60015b612808573d80600081146127b5576040519150601f19603f3d011682016040523d82523d6000602084013e6127ba565b606091505b50600081511415612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f79061417d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061285d565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016128bb8461147a565b6128c5919061406b565b90506000600760008481526020019081526020016000205490508181146129aa576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612a2f919061406b565b9050600060096000848152602001908152602001600020549050600060088381548110612a5f57612a5e613aab565b5b906000526020600020015490508060088381548110612a8157612a80613aab565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ad057612acf614311565b5b6001900381819060005260206000200160009055905550505050565b6000612af78361147a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd29061438c565b60405180910390fd5b612be481611bf6565b15612c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1b906143f8565b60405180910390fd5b612c306000838361255f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c8091906139b2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612d4590613631565b90600052602060002090601f016020900481019282612d675760008555612dae565b82601f10612d8057805160ff1916838001178555612dae565b82800160010185558215612dae579182015b82811115612dad578251825591602001919060010190612d92565b5b509050612dbb9190612dbf565b5090565b5b80821115612dd8576000816000905550600101612dc0565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e2581612df0565b8114612e3057600080fd5b50565b600081359050612e4281612e1c565b92915050565b600060208284031215612e5e57612e5d612de6565b5b6000612e6c84828501612e33565b91505092915050565b60008115159050919050565b612e8a81612e75565b82525050565b6000602082019050612ea56000830184612e81565b92915050565b612eb481612e75565b8114612ebf57600080fd5b50565b600081359050612ed181612eab565b92915050565b600060208284031215612eed57612eec612de6565b5b6000612efb84828501612ec2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f3e578082015181840152602081019050612f23565b83811115612f4d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f6f82612f04565b612f798185612f0f565b9350612f89818560208601612f20565b612f9281612f53565b840191505092915050565b60006020820190508181036000830152612fb78184612f64565b905092915050565b6000819050919050565b612fd281612fbf565b8114612fdd57600080fd5b50565b600081359050612fef81612fc9565b92915050565b60006020828403121561300b5761300a612de6565b5b600061301984828501612fe0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061304d82613022565b9050919050565b61305d81613042565b82525050565b60006020820190506130786000830184613054565b92915050565b61308781613042565b811461309257600080fd5b50565b6000813590506130a48161307e565b92915050565b600080604083850312156130c1576130c0612de6565b5b60006130cf85828601613095565b92505060206130e085828601612fe0565b9150509250929050565b6130f381612fbf565b82525050565b600060208201905061310e60008301846130ea565b92915050565b60008060006060848603121561312d5761312c612de6565b5b600061313b86828701613095565b935050602061314c86828701613095565b925050604061315d86828701612fe0565b9150509250925092565b60006020828403121561317d5761317c612de6565b5b600061318b84828501613095565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131c981612fbf565b82525050565b60006131db83836131c0565b60208301905092915050565b6000602082019050919050565b60006131ff82613194565b613209818561319f565b9350613214836131b0565b8060005b8381101561324557815161322c88826131cf565b9750613237836131e7565b925050600181019050613218565b5085935050505092915050565b6000602082019050818103600083015261326c81846131f4565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132b682612f53565b810181811067ffffffffffffffff821117156132d5576132d461327e565b5b80604052505050565b60006132e8612ddc565b90506132f482826132ad565b919050565b600067ffffffffffffffff8211156133145761331361327e565b5b61331d82612f53565b9050602081019050919050565b82818337600083830152505050565b600061334c613347846132f9565b6132de565b90508281526020810184848401111561336857613367613279565b5b61337384828561332a565b509392505050565b600082601f8301126133905761338f613274565b5b81356133a0848260208601613339565b91505092915050565b6000602082840312156133bf576133be612de6565b5b600082013567ffffffffffffffff8111156133dd576133dc612deb565b5b6133e98482850161337b565b91505092915050565b6000806040838503121561340957613408612de6565b5b600061341785828601613095565b925050602061342885828601612ec2565b9150509250929050565b600067ffffffffffffffff82111561344d5761344c61327e565b5b61345682612f53565b9050602081019050919050565b600061347661347184613432565b6132de565b90508281526020810184848401111561349257613491613279565b5b61349d84828561332a565b509392505050565b600082601f8301126134ba576134b9613274565b5b81356134ca848260208601613463565b91505092915050565b600080600080608085870312156134ed576134ec612de6565b5b60006134fb87828801613095565b945050602061350c87828801613095565b935050604061351d87828801612fe0565b925050606085013567ffffffffffffffff81111561353e5761353d612deb565b5b61354a878288016134a5565b91505092959194509250565b6000806040838503121561356d5761356c612de6565b5b600061357b85828601613095565b925050602061358c85828601613095565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135cc602083612f0f565b91506135d782613596565b602082019050919050565b600060208201905081810360008301526135fb816135bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061364957607f821691505b6020821081141561365d5761365c613602565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006136bf602c83612f0f565b91506136ca82613663565b604082019050919050565b600060208201905081810360008301526136ee816136b2565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613751602183612f0f565b915061375c826136f5565b604082019050919050565b6000602082019050818103600083015261378081613744565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006137e3603883612f0f565b91506137ee82613787565b604082019050919050565b60006020820190508181036000830152613812816137d6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613875603183612f0f565b915061388082613819565b604082019050919050565b600060208201905081810360008301526138a481613868565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613907602b83612f0f565b9150613912826138ab565b604082019050919050565b60006020820190508181036000830152613936816138fa565b9050919050565b600081905092915050565b50565b600061395860008361393d565b915061396382613948565b600082019050919050565b60006139798261394b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139bd82612fbf565b91506139c883612fbf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139fd576139fc613983565b5b828201905092915050565b6000613a1382612fbf565b9150613a1e83612fbf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5757613a56613983565b5b828202905092915050565b6000613a6d82612fbf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613aa057613a9f613983565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613b36602c83612f0f565b9150613b4182613ada565b604082019050919050565b60006020820190508181036000830152613b6581613b29565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613bc8602983612f0f565b9150613bd382613b6c565b604082019050919050565b60006020820190508181036000830152613bf781613bbb565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613c5a602a83612f0f565b9150613c6582613bfe565b604082019050919050565b60006020820190508181036000830152613c8981613c4d565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613cec602f83612f0f565b9150613cf782613c90565b604082019050919050565b60006020820190508181036000830152613d1b81613cdf565b9050919050565b600081905092915050565b6000613d3882612f04565b613d428185613d22565b9350613d52818560208601612f20565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613d8081613631565b613d8a8186613d22565b94506001821660008114613da55760018114613db657613de9565b60ff19831686528186019350613de9565b613dbf85613d5e565b60005b83811015613de157815481890152600182019150602081019050613dc2565b838801955050505b50505092915050565b6000613dfe8286613d2d565b9150613e0a8285613d2d565b9150613e168284613d73565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602683612f0f565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613f11602c83612f0f565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613fa3602983612f0f565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614035602483612f0f565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b600061407682612fbf565b915061408183612fbf565b92508282101561409457614093613983565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006140d5601983612f0f565b91506140e08261409f565b602082019050919050565b60006020820190508181036000830152614104816140c8565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614167603283612f0f565b91506141728261410b565b604082019050919050565b600060208201905081810360008301526141968161415a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d782612fbf565b91506141e283612fbf565b9250826141f2576141f161419d565b5b828204905092915050565b600061420882612fbf565b915061421383612fbf565b9250826142235761422261419d565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006142558261422e565b61425f8185614239565b935061426f818560208601612f20565b61427881612f53565b840191505092915050565b60006080820190506142986000830187613054565b6142a56020830186613054565b6142b260408301856130ea565b81810360608301526142c4818461424a565b905095945050505050565b6000815190506142de81612e1c565b92915050565b6000602082840312156142fa576142f9612de6565b5b6000614308848285016142cf565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614376602083612f0f565b915061438182614340565b602082019050919050565b600060208201905081810360008301526143a581614369565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006143e2601c83612f0f565b91506143ed826143ac565b602082019050919050565b60006020820190508181036000830152614411816143d5565b905091905056fea26469706673582212208b8711093d4bbb69cb7b859740b2fbde81615d38bd44b4aee202867006e6113964736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a6f73417a4259386a5155457459396a5542484557417941547473776b476472423235367a564155425136652f00000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmZosAzBY8jQUEtY9jUBHEWAyATtswkGdrB256zVAUBQ6e/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d5a6f73417a4259386a5155457459396a55424845574179
Arg [3] : 41547473776b476472423235367a564155425136652f00000000000000000000
Deployed Bytecode Sourcemap
44497:2747:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38266:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46804:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27319:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26842:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44654:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38906:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44728:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28069:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38574:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46983:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47091:150;;;;;;;;;;;;;:::i;:::-;;45123:501;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28479:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45630:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46360:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46883:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39096:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46572:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44766:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25454:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44586:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25184:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;46448:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27612:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28735:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44612:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45965:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44692:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44797:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46676:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27838:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38266:224;38368:4;38407:35;38392:50;;;:11;:50;;;;:90;;;;38446:36;38470:11;38446:23;:36::i;:::-;38392:90;38385:97;;38266:224;;;:::o;46804:73::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46865:6:::1;46856;;:15;;;;;;;;;;;;;;;;;;46804:73:::0;:::o;25760:100::-;25814:13;25847:5;25840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25760:100;:::o;27319:221::-;27395:7;27423:16;27431:7;27423;:16::i;:::-;27415:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27508:15;:24;27524:7;27508:24;;;;;;;;;;;;;;;;;;;;;27501:31;;27319:221;;;:::o;26842:411::-;26923:13;26939:23;26954:7;26939:14;:23::i;:::-;26923:39;;26987:5;26981:11;;:2;:11;;;;26973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27081:5;27065:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27090:37;27107:5;27114:12;:10;:12::i;:::-;27090:16;:37::i;:::-;27065:62;27043:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27224:21;27233:2;27237:7;27224:8;:21::i;:::-;26912:341;26842:411;;:::o;44654:33::-;;;;:::o;38906:113::-;38967:7;38994:10;:17;;;;38987:24;;38906:113;:::o;44728:33::-;;;;:::o;28069:339::-;28264:41;28283:12;:10;:12::i;:::-;28297:7;28264:18;:41::i;:::-;28256:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28372:28;28382:4;28388:2;28392:7;28372:9;:28::i;:::-;28069:339;;;:::o;38574:256::-;38671:7;38707:23;38724:5;38707:16;:23::i;:::-;38699:5;:31;38691:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38796:12;:19;38809:5;38796:19;;;;;;;;;;;;;;;:26;38816:5;38796:26;;;;;;;;;;;;38789:33;;38574:256;;;;:::o;46983:100::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47072:5:::1;47051:11;:18;47063:5;47051:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;46983:100:::0;:::o;47091:150::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47136:12:::1;47162:10;47154:24;;47186:21;47154:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47135:77;;;47227:7;47219:16;;;::::0;::::1;;47128:113;47091:150::o:0;45123:501::-;45193:14;45210:13;:11;:13::i;:::-;45193:30;;45239:6;;;;;;;;;;;45238:7;45230:16;;;;;;45275:1;45261:11;:15;45253:24;;;;;;45307:13;;45292:11;:28;;45284:37;;;;;;45360:9;;45345:11;45336:6;:20;;;;:::i;:::-;:33;;45328:42;;;;;;45397:7;:5;:7::i;:::-;45383:21;;:10;:21;;;45379:146;;45447:4;45420:31;;:11;:23;45432:10;45420:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;45417:101;;45494:11;45487:4;;:18;;;;:::i;:::-;45474:9;:31;;45466:40;;;;;;45417:101;45379:146;45538:9;45550:1;45538:13;;45533:86;45558:11;45553:1;:16;45533:86;;45585:26;45595:3;45609:1;45600:6;:10;;;;:::i;:::-;45585:9;:26::i;:::-;45571:3;;;;;:::i;:::-;;;;45533:86;;;;45186:438;45123:501;;:::o;28479:185::-;28617:39;28634:4;28640:2;28644:7;28617:39;;;;;;;;;;;;:16;:39::i;:::-;28479:185;;;:::o;45630:329::-;45689:16;45714:23;45740:17;45750:6;45740:9;:17::i;:::-;45714:43;;45764:25;45806:15;45792:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45764:58;;45834:9;45829:103;45849:15;45845:1;:19;45829:103;;;45894:30;45914:6;45922:1;45894:19;:30::i;:::-;45880:8;45889:1;45880:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45866:3;;;;;:::i;:::-;;;;45829:103;;;;45945:8;45938:15;;;;45630:329;;;:::o;46360:82::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46428:8:::1;46421:4;:15;;;;46360:82:::0;:::o;46883:93::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46966:4:::1;46945:11;:18;46957:5;46945:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;46883:93:::0;:::o;39096:233::-;39171:7;39207:30;:28;:30::i;:::-;39199:5;:38;39191:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:10;39315:5;39304:17;;;;;;;;:::i;:::-;;;;;;;;;;39297:24;;39096:233;;;:::o;46572:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46653:11:::1;46643:7;:21;;;;;;;;;;;;:::i;:::-;;46572:98:::0;:::o;44766:26::-;;;;;;;;;;;;;:::o;25454:239::-;25526:7;25546:13;25562:7;:16;25570:7;25562:16;;;;;;;;;;;;;;;;;;;;;25546:32;;25614:1;25597:19;;:5;:19;;;;25589:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25680:5;25673:12;;;25454:239;;;:::o;44586:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25184:208::-;25256:7;25301:1;25284:19;;:5;:19;;;;25276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25368:9;:16;25378:5;25368:16;;;;;;;;;;;;;;;;25361:23;;25184:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;46448:118::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46543:17:::1;46527:13;:33;;;;46448:118:::0;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;25929:104::-;25985:13;26018:7;26011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25929:104;:::o;27612:155::-;27707:52;27726:12;:10;:12::i;:::-;27740:8;27750;27707:18;:52::i;:::-;27612:155;;:::o;28735:328::-;28910:41;28929:12;:10;:12::i;:::-;28943:7;28910:18;:41::i;:::-;28902:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29016:39;29030:4;29036:2;29040:7;29049:5;29016:13;:39::i;:::-;28735:328;;;;:::o;44612:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45965:373::-;46038:13;46068:16;46076:7;46068;:16::i;:::-;46060:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46144:28;46175:10;:8;:10::i;:::-;46144:41;;46230:1;46205:14;46199:28;:32;:133;;;;;;;;;;;;;;;;;46267:14;46283:18;:7;:16;:18::i;:::-;46303:13;46250:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46199:133;46192:140;;;45965:373;;;:::o;44692:31::-;;;;:::o;44797:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;46676:122::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46775:17:::1;46759:13;:33;;;;;;;;;;;;:::i;:::-;;46676:122:::0;:::o;27838:164::-;27935:4;27959:18;:25;27978:5;27959:25;;;;;;;;;;;;;;;:35;27985:8;27959:35;;;;;;;;;;;;;;;;;;;;;;;;;27952:42;;27838:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;37122:126::-;;;;:::o;24815:305::-;24917:4;24969:25;24954:40;;;:11;:40;;;;:105;;;;25026:33;25011:48;;;:11;:48;;;;24954:105;:158;;;;25076:36;25100:11;25076:23;:36::i;:::-;24954:158;24934:178;;24815:305;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;30573:127::-;30638:4;30690:1;30662:30;;:7;:16;30670:7;30662:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30655:37;;30573:127;;;:::o;34555:174::-;34657:2;34630:15;:24;34646:7;34630:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34713:7;34709:2;34675:46;;34684:23;34699:7;34684:14;:23::i;:::-;34675:46;;;;;;;;;;;;34555:174;;:::o;30867:348::-;30960:4;30985:16;30993:7;30985;:16::i;:::-;30977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31061:13;31077:23;31092:7;31077:14;:23::i;:::-;31061:39;;31130:5;31119:16;;:7;:16;;;:51;;;;31163:7;31139:31;;:20;31151:7;31139:11;:20::i;:::-;:31;;;31119:51;:87;;;;31174:32;31191:5;31198:7;31174:16;:32::i;:::-;31119:87;31111:96;;;30867:348;;;;:::o;33859:578::-;34018:4;33991:31;;:23;34006:7;33991:14;:23::i;:::-;:31;;;33983:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:1;34087:16;;:2;:16;;;;34079:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:39;34178:4;34184:2;34188:7;34157:20;:39::i;:::-;34261:29;34278:1;34282:7;34261:8;:29::i;:::-;34322:1;34303:9;:15;34313:4;34303:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34351:1;34334:9;:13;34344:2;34334:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34382:2;34363:7;:16;34371:7;34363:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34421:7;34417:2;34402:27;;34411:4;34402:27;;;;;;;;;;;;33859:578;;;:::o;31557:110::-;31633:26;31643:2;31647:7;31633:26;;;;;;;;;;;;:9;:26::i;:::-;31557:110;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;34871:315::-;35026:8;35017:17;;:5;:17;;;;35009:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:8;35075:18;:25;35094:5;35075:25;;;;;;;;;;;;;;;:35;35101:8;35075:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35159:8;35137:41;;35152:5;35137:41;;;35169:8;35137:41;;;;;;:::i;:::-;;;;;;;;34871:315;;;:::o;29945:::-;30102:28;30112:4;30118:2;30122:7;30102:9;:28::i;:::-;30149:48;30172:4;30178:2;30182:7;30191:5;30149:22;:48::i;:::-;30141:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29945:315;;;;:::o;45002:102::-;45062:13;45091:7;45084:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45002:102;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;16511:157::-;16596:4;16635:25;16620:40;;;:11;:40;;;;16613:47;;16511:157;;;:::o;39942:589::-;40086:45;40113:4;40119:2;40123:7;40086:26;:45::i;:::-;40164:1;40148:18;;:4;:18;;;40144:187;;;40183:40;40215:7;40183:31;:40::i;:::-;40144:187;;;40253:2;40245:10;;:4;:10;;;40241:90;;40272:47;40305:4;40311:7;40272:32;:47::i;:::-;40241:90;40144:187;40359:1;40345:16;;:2;:16;;;40341:183;;;40378:45;40415:7;40378:36;:45::i;:::-;40341:183;;;40451:4;40445:10;;:2;:10;;;40441:83;;40472:40;40500:2;40504:7;40472:27;:40::i;:::-;40441:83;40341:183;39942:589;;;:::o;31894:321::-;32024:18;32030:2;32034:7;32024:5;:18::i;:::-;32075:54;32106:1;32110:2;32114:7;32123:5;32075:22;:54::i;:::-;32053:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:321;;;:::o;35751:799::-;35906:4;35927:15;:2;:13;;;:15::i;:::-;35923:620;;;35979:2;35963:36;;;36000:12;:10;:12::i;:::-;36014:4;36020:7;36029:5;35963:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35959:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36222:1;36205:6;:13;:18;36201:272;;;36248:60;;;;;;;;;;:::i;:::-;;;;;;;;36201:272;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35959:529;36096:41;;;36086:51;;;:6;:51;;;;36079:58;;;;;35923:620;36527:4;36520:11;;35751:799;;;;;;;:::o;41254:164::-;41358:10;:17;;;;41331:15;:24;41347:7;41331:24;;;;;;;;;;;:44;;;;41386:10;41402:7;41386:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41254:164;:::o;42045:988::-;42311:22;42361:1;42336:22;42353:4;42336:16;:22::i;:::-;:26;;;;:::i;:::-;42311:51;;42373:18;42394:17;:26;42412:7;42394:26;;;;;;;;;;;;42373:47;;42541:14;42527:10;:28;42523:328;;42572:19;42594:12;:18;42607:4;42594:18;;;;;;;;;;;;;;;:34;42613:14;42594:34;;;;;;;;;;;;42572:56;;42678:11;42645:12;:18;42658:4;42645:18;;;;;;;;;;;;;;;:30;42664:10;42645:30;;;;;;;;;;;:44;;;;42795:10;42762:17;:30;42780:11;42762:30;;;;;;;;;;;:43;;;;42557:294;42523:328;42947:17;:26;42965:7;42947:26;;;;;;;;;;;42940:33;;;42991:12;:18;43004:4;42991:18;;;;;;;;;;;;;;;:34;43010:14;42991:34;;;;;;;;;;;42984:41;;;42126:907;;42045:988;;:::o;43328:1079::-;43581:22;43626:1;43606:10;:17;;;;:21;;;;:::i;:::-;43581:46;;43638:18;43659:15;:24;43675:7;43659:24;;;;;;;;;;;;43638:45;;44010:19;44032:10;44043:14;44032:26;;;;;;;;:::i;:::-;;;;;;;;;;44010:48;;44096:11;44071:10;44082;44071:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44207:10;44176:15;:28;44192:11;44176:28;;;;;;;;;;;:41;;;;44348:15;:24;44364:7;44348:24;;;;;;;;;;;44341:31;;;44383:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43399:1008;;;43328:1079;:::o;40832:221::-;40917:14;40934:20;40951:2;40934:16;:20::i;:::-;40917:37;;40992:7;40965:12;:16;40978:2;40965:16;;;;;;;;;;;;;;;:24;40982:6;40965:24;;;;;;;;;;;:34;;;;41039:6;41010:17;:26;41028:7;41010:26;;;;;;;;;;;:35;;;;40906:147;40832:221;;:::o;32551:382::-;32645:1;32631:16;;:2;:16;;;;32623:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32704:16;32712:7;32704;:16::i;:::-;32703:17;32695:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32766:45;32795:1;32799:2;32803:7;32766:20;:45::i;:::-;32841:1;32824:9;:13;32834:2;32824:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32872:2;32853:7;:16;32861:7;32853:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32917:7;32913:2;32892:33;;32909:1;32892:33;;;;;;;;;;;;32551:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:182::-;14603:34;14599:1;14591:6;14587:14;14580:58;14463:182;:::o;14651:366::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:419::-;15189:4;15227:2;15216:9;15212:18;15204:26;;15276:9;15270:4;15266:20;15262:1;15251:9;15247:17;15240:47;15304:131;15430:4;15304:131;:::i;:::-;15296:139;;15023:419;;;:::o;15448:180::-;15496:77;15493:1;15486:88;15593:4;15590:1;15583:15;15617:4;15614:1;15607:15;15634:320;15678:6;15715:1;15709:4;15705:12;15695:22;;15762:1;15756:4;15752:12;15783:18;15773:81;;15839:4;15831:6;15827:17;15817:27;;15773:81;15901:2;15893:6;15890:14;15870:18;15867:38;15864:84;;;15920:18;;:::i;:::-;15864:84;15685:269;15634:320;;;:::o;15960:231::-;16100:34;16096:1;16088:6;16084:14;16077:58;16169:14;16164:2;16156:6;16152:15;16145:39;15960:231;:::o;16197:366::-;16339:3;16360:67;16424:2;16419:3;16360:67;:::i;:::-;16353:74;;16436:93;16525:3;16436:93;:::i;:::-;16554:2;16549:3;16545:12;16538:19;;16197:366;;;:::o;16569:419::-;16735:4;16773:2;16762:9;16758:18;16750:26;;16822:9;16816:4;16812:20;16808:1;16797:9;16793:17;16786:47;16850:131;16976:4;16850:131;:::i;:::-;16842:139;;16569:419;;;:::o;16994:220::-;17134:34;17130:1;17122:6;17118:14;17111:58;17203:3;17198:2;17190:6;17186:15;17179:28;16994:220;:::o;17220:366::-;17362:3;17383:67;17447:2;17442:3;17383:67;:::i;:::-;17376:74;;17459:93;17548:3;17459:93;:::i;:::-;17577:2;17572:3;17568:12;17561:19;;17220:366;;;:::o;17592:419::-;17758:4;17796:2;17785:9;17781:18;17773:26;;17845:9;17839:4;17835:20;17831:1;17820:9;17816:17;17809:47;17873:131;17999:4;17873:131;:::i;:::-;17865:139;;17592:419;;;:::o;18017:243::-;18157:34;18153:1;18145:6;18141:14;18134:58;18226:26;18221:2;18213:6;18209:15;18202:51;18017:243;:::o;18266:366::-;18408:3;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18266:366;;;:::o;18638:419::-;18804:4;18842:2;18831:9;18827:18;18819:26;;18891:9;18885:4;18881:20;18877:1;18866:9;18862:17;18855:47;18919:131;19045:4;18919:131;:::i;:::-;18911:139;;18638:419;;;:::o;19063:236::-;19203:34;19199:1;19191:6;19187:14;19180:58;19272:19;19267:2;19259:6;19255:15;19248:44;19063:236;:::o;19305:366::-;19447:3;19468:67;19532:2;19527:3;19468:67;:::i;:::-;19461:74;;19544:93;19633:3;19544:93;:::i;:::-;19662:2;19657:3;19653:12;19646:19;;19305:366;;;:::o;19677:419::-;19843:4;19881:2;19870:9;19866:18;19858:26;;19930:9;19924:4;19920:20;19916:1;19905:9;19901:17;19894:47;19958:131;20084:4;19958:131;:::i;:::-;19950:139;;19677:419;;;:::o;20102:230::-;20242:34;20238:1;20230:6;20226:14;20219:58;20311:13;20306:2;20298:6;20294:15;20287:38;20102:230;:::o;20338:366::-;20480:3;20501:67;20565:2;20560:3;20501:67;:::i;:::-;20494:74;;20577:93;20666:3;20577:93;:::i;:::-;20695:2;20690:3;20686:12;20679:19;;20338:366;;;:::o;20710:419::-;20876:4;20914:2;20903:9;20899:18;20891:26;;20963:9;20957:4;20953:20;20949:1;20938:9;20934:17;20927:47;20991:131;21117:4;20991:131;:::i;:::-;20983:139;;20710:419;;;:::o;21135:147::-;21236:11;21273:3;21258:18;;21135:147;;;;:::o;21288:114::-;;:::o;21408:398::-;21567:3;21588:83;21669:1;21664:3;21588:83;:::i;:::-;21581:90;;21680:93;21769:3;21680:93;:::i;:::-;21798:1;21793:3;21789:11;21782:18;;21408:398;;;:::o;21812:379::-;21996:3;22018:147;22161:3;22018:147;:::i;:::-;22011:154;;22182:3;22175:10;;21812:379;;;:::o;22197:180::-;22245:77;22242:1;22235:88;22342:4;22339:1;22332:15;22366:4;22363:1;22356:15;22383:305;22423:3;22442:20;22460:1;22442:20;:::i;:::-;22437:25;;22476:20;22494:1;22476:20;:::i;:::-;22471:25;;22630:1;22562:66;22558:74;22555:1;22552:81;22549:107;;;22636:18;;:::i;:::-;22549:107;22680:1;22677;22673:9;22666:16;;22383:305;;;;:::o;22694:348::-;22734:7;22757:20;22775:1;22757:20;:::i;:::-;22752:25;;22791:20;22809:1;22791:20;:::i;:::-;22786:25;;22979:1;22911:66;22907:74;22904:1;22901:81;22896:1;22889:9;22882:17;22878:105;22875:131;;;22986:18;;:::i;:::-;22875:131;23034:1;23031;23027:9;23016:20;;22694:348;;;;:::o;23048:233::-;23087:3;23110:24;23128:5;23110:24;:::i;:::-;23101:33;;23156:66;23149:5;23146:77;23143:103;;;23226:18;;:::i;:::-;23143:103;23273:1;23266:5;23262:13;23255:20;;23048:233;;;:::o;23287:180::-;23335:77;23332:1;23325:88;23432:4;23429:1;23422:15;23456:4;23453:1;23446:15;23473:231;23613:34;23609:1;23601:6;23597:14;23590:58;23682:14;23677:2;23669:6;23665:15;23658:39;23473:231;:::o;23710:366::-;23852:3;23873:67;23937:2;23932:3;23873:67;:::i;:::-;23866:74;;23949:93;24038:3;23949:93;:::i;:::-;24067:2;24062:3;24058:12;24051:19;;23710:366;;;:::o;24082:419::-;24248:4;24286:2;24275:9;24271:18;24263:26;;24335:9;24329:4;24325:20;24321:1;24310:9;24306:17;24299:47;24363:131;24489:4;24363:131;:::i;:::-;24355:139;;24082:419;;;:::o;24507:228::-;24647:34;24643:1;24635:6;24631:14;24624:58;24716:11;24711:2;24703:6;24699:15;24692:36;24507:228;:::o;24741:366::-;24883:3;24904:67;24968:2;24963:3;24904:67;:::i;:::-;24897:74;;24980:93;25069:3;24980:93;:::i;:::-;25098:2;25093:3;25089:12;25082:19;;24741:366;;;:::o;25113:419::-;25279:4;25317:2;25306:9;25302:18;25294:26;;25366:9;25360:4;25356:20;25352:1;25341:9;25337:17;25330:47;25394:131;25520:4;25394:131;:::i;:::-;25386:139;;25113:419;;;:::o;25538:229::-;25678:34;25674:1;25666:6;25662:14;25655:58;25747:12;25742:2;25734:6;25730:15;25723:37;25538:229;:::o;25773:366::-;25915:3;25936:67;26000:2;25995:3;25936:67;:::i;:::-;25929:74;;26012:93;26101:3;26012:93;:::i;:::-;26130:2;26125:3;26121:12;26114:19;;25773:366;;;:::o;26145:419::-;26311:4;26349:2;26338:9;26334:18;26326:26;;26398:9;26392:4;26388:20;26384:1;26373:9;26369:17;26362:47;26426:131;26552:4;26426:131;:::i;:::-;26418:139;;26145:419;;;:::o;26570:234::-;26710:34;26706:1;26698:6;26694:14;26687:58;26779:17;26774:2;26766:6;26762:15;26755:42;26570:234;:::o;26810:366::-;26952:3;26973:67;27037:2;27032:3;26973:67;:::i;:::-;26966:74;;27049:93;27138:3;27049:93;:::i;:::-;27167:2;27162:3;27158:12;27151:19;;26810:366;;;:::o;27182:419::-;27348:4;27386:2;27375:9;27371:18;27363:26;;27435:9;27429:4;27425:20;27421:1;27410:9;27406:17;27399:47;27463:131;27589:4;27463:131;:::i;:::-;27455:139;;27182:419;;;:::o;27607:148::-;27709:11;27746:3;27731:18;;27607:148;;;;:::o;27761:377::-;27867:3;27895:39;27928:5;27895:39;:::i;:::-;27950:89;28032:6;28027:3;27950:89;:::i;:::-;27943:96;;28048:52;28093:6;28088:3;28081:4;28074:5;28070:16;28048:52;:::i;:::-;28125:6;28120:3;28116:16;28109:23;;27871:267;27761:377;;;;:::o;28144:141::-;28193:4;28216:3;28208:11;;28239:3;28236:1;28229:14;28273:4;28270:1;28260:18;28252:26;;28144:141;;;:::o;28315:845::-;28418:3;28455:5;28449:12;28484:36;28510:9;28484:36;:::i;:::-;28536:89;28618:6;28613:3;28536:89;:::i;:::-;28529:96;;28656:1;28645:9;28641:17;28672:1;28667:137;;;;28818:1;28813:341;;;;28634:520;;28667:137;28751:4;28747:9;28736;28732:25;28727:3;28720:38;28787:6;28782:3;28778:16;28771:23;;28667:137;;28813:341;28880:38;28912:5;28880:38;:::i;:::-;28940:1;28954:154;28968:6;28965:1;28962:13;28954:154;;;29042:7;29036:14;29032:1;29027:3;29023:11;29016:35;29092:1;29083:7;29079:15;29068:26;;28990:4;28987:1;28983:12;28978:17;;28954:154;;;29137:6;29132:3;29128:16;29121:23;;28820:334;;28634:520;;28422:738;;28315:845;;;;:::o;29166:589::-;29391:3;29413:95;29504:3;29495:6;29413:95;:::i;:::-;29406:102;;29525:95;29616:3;29607:6;29525:95;:::i;:::-;29518:102;;29637:92;29725:3;29716:6;29637:92;:::i;:::-;29630:99;;29746:3;29739:10;;29166:589;;;;;;:::o;29761:225::-;29901:34;29897:1;29889:6;29885:14;29878:58;29970:8;29965:2;29957:6;29953:15;29946:33;29761:225;:::o;29992:366::-;30134:3;30155:67;30219:2;30214:3;30155:67;:::i;:::-;30148:74;;30231:93;30320:3;30231:93;:::i;:::-;30349:2;30344:3;30340:12;30333:19;;29992:366;;;:::o;30364:419::-;30530:4;30568:2;30557:9;30553:18;30545:26;;30617:9;30611:4;30607:20;30603:1;30592:9;30588:17;30581:47;30645:131;30771:4;30645:131;:::i;:::-;30637:139;;30364:419;;;:::o;30789:231::-;30929:34;30925:1;30917:6;30913:14;30906:58;30998:14;30993:2;30985:6;30981:15;30974:39;30789:231;:::o;31026:366::-;31168:3;31189:67;31253:2;31248:3;31189:67;:::i;:::-;31182:74;;31265:93;31354:3;31265:93;:::i;:::-;31383:2;31378:3;31374:12;31367:19;;31026:366;;;:::o;31398:419::-;31564:4;31602:2;31591:9;31587:18;31579:26;;31651:9;31645:4;31641:20;31637:1;31626:9;31622:17;31615:47;31679:131;31805:4;31679:131;:::i;:::-;31671:139;;31398:419;;;:::o;31823:228::-;31963:34;31959:1;31951:6;31947:14;31940:58;32032:11;32027:2;32019:6;32015:15;32008:36;31823:228;:::o;32057:366::-;32199:3;32220:67;32284:2;32279:3;32220:67;:::i;:::-;32213:74;;32296:93;32385:3;32296:93;:::i;:::-;32414:2;32409:3;32405:12;32398:19;;32057:366;;;:::o;32429:419::-;32595:4;32633:2;32622:9;32618:18;32610:26;;32682:9;32676:4;32672:20;32668:1;32657:9;32653:17;32646:47;32710:131;32836:4;32710:131;:::i;:::-;32702:139;;32429:419;;;:::o;32854:223::-;32994:34;32990:1;32982:6;32978:14;32971:58;33063:6;33058:2;33050:6;33046:15;33039:31;32854:223;:::o;33083:366::-;33225:3;33246:67;33310:2;33305:3;33246:67;:::i;:::-;33239:74;;33322:93;33411:3;33322:93;:::i;:::-;33440:2;33435:3;33431:12;33424:19;;33083:366;;;:::o;33455:419::-;33621:4;33659:2;33648:9;33644:18;33636:26;;33708:9;33702:4;33698:20;33694:1;33683:9;33679:17;33672:47;33736:131;33862:4;33736:131;:::i;:::-;33728:139;;33455:419;;;:::o;33880:191::-;33920:4;33940:20;33958:1;33940:20;:::i;:::-;33935:25;;33974:20;33992:1;33974:20;:::i;:::-;33969:25;;34013:1;34010;34007:8;34004:34;;;34018:18;;:::i;:::-;34004:34;34063:1;34060;34056:9;34048:17;;33880:191;;;;:::o;34077:175::-;34217:27;34213:1;34205:6;34201:14;34194:51;34077:175;:::o;34258:366::-;34400:3;34421:67;34485:2;34480:3;34421:67;:::i;:::-;34414:74;;34497:93;34586:3;34497:93;:::i;:::-;34615:2;34610:3;34606:12;34599:19;;34258:366;;;:::o;34630:419::-;34796:4;34834:2;34823:9;34819:18;34811:26;;34883:9;34877:4;34873:20;34869:1;34858:9;34854:17;34847:47;34911:131;35037:4;34911:131;:::i;:::-;34903:139;;34630:419;;;:::o;35055:237::-;35195:34;35191:1;35183:6;35179:14;35172:58;35264:20;35259:2;35251:6;35247:15;35240:45;35055:237;:::o;35298:366::-;35440:3;35461:67;35525:2;35520:3;35461:67;:::i;:::-;35454:74;;35537:93;35626:3;35537:93;:::i;:::-;35655:2;35650:3;35646:12;35639:19;;35298:366;;;:::o;35670:419::-;35836:4;35874:2;35863:9;35859:18;35851:26;;35923:9;35917:4;35913:20;35909:1;35898:9;35894:17;35887:47;35951:131;36077:4;35951:131;:::i;:::-;35943:139;;35670:419;;;:::o;36095:180::-;36143:77;36140:1;36133:88;36240:4;36237:1;36230:15;36264:4;36261:1;36254:15;36281:185;36321:1;36338:20;36356:1;36338:20;:::i;:::-;36333:25;;36372:20;36390:1;36372:20;:::i;:::-;36367:25;;36411:1;36401:35;;36416:18;;:::i;:::-;36401:35;36458:1;36455;36451:9;36446:14;;36281:185;;;;:::o;36472:176::-;36504:1;36521:20;36539:1;36521:20;:::i;:::-;36516:25;;36555:20;36573:1;36555:20;:::i;:::-;36550:25;;36594:1;36584:35;;36599:18;;:::i;:::-;36584:35;36640:1;36637;36633:9;36628:14;;36472:176;;;;:::o;36654:98::-;36705:6;36739:5;36733:12;36723:22;;36654:98;;;:::o;36758:168::-;36841:11;36875:6;36870:3;36863:19;36915:4;36910:3;36906:14;36891:29;;36758:168;;;;:::o;36932:360::-;37018:3;37046:38;37078:5;37046:38;:::i;:::-;37100:70;37163:6;37158:3;37100:70;:::i;:::-;37093:77;;37179:52;37224:6;37219:3;37212:4;37205:5;37201:16;37179:52;:::i;:::-;37256:29;37278:6;37256:29;:::i;:::-;37251:3;37247:39;37240:46;;37022:270;36932:360;;;;:::o;37298:640::-;37493:4;37531:3;37520:9;37516:19;37508:27;;37545:71;37613:1;37602:9;37598:17;37589:6;37545:71;:::i;:::-;37626:72;37694:2;37683:9;37679:18;37670:6;37626:72;:::i;:::-;37708;37776:2;37765:9;37761:18;37752:6;37708:72;:::i;:::-;37827:9;37821:4;37817:20;37812:2;37801:9;37797:18;37790:48;37855:76;37926:4;37917:6;37855:76;:::i;:::-;37847:84;;37298:640;;;;;;;:::o;37944:141::-;38000:5;38031:6;38025:13;38016:22;;38047:32;38073:5;38047:32;:::i;:::-;37944:141;;;;:::o;38091:349::-;38160:6;38209:2;38197:9;38188:7;38184:23;38180:32;38177:119;;;38215:79;;:::i;:::-;38177:119;38335:1;38360:63;38415:7;38406:6;38395:9;38391:22;38360:63;:::i;:::-;38350:73;;38306:127;38091:349;;;;:::o;38446:180::-;38494:77;38491:1;38484:88;38591:4;38588:1;38581:15;38615:4;38612:1;38605:15;38632:182;38772:34;38768:1;38760:6;38756:14;38749:58;38632:182;:::o;38820:366::-;38962:3;38983:67;39047:2;39042:3;38983:67;:::i;:::-;38976:74;;39059:93;39148:3;39059:93;:::i;:::-;39177:2;39172:3;39168:12;39161:19;;38820:366;;;:::o;39192:419::-;39358:4;39396:2;39385:9;39381:18;39373:26;;39445:9;39439:4;39435:20;39431:1;39420:9;39416:17;39409:47;39473:131;39599:4;39473:131;:::i;:::-;39465:139;;39192:419;;;:::o;39617:178::-;39757:30;39753:1;39745:6;39741:14;39734:54;39617:178;:::o;39801:366::-;39943:3;39964:67;40028:2;40023:3;39964:67;:::i;:::-;39957:74;;40040:93;40129:3;40040:93;:::i;:::-;40158:2;40153:3;40149:12;40142:19;;39801:366;;;:::o;40173:419::-;40339:4;40377:2;40366:9;40362:18;40354:26;;40426:9;40420:4;40416:20;40412:1;40401:9;40397:17;40390:47;40454:131;40580:4;40454:131;:::i;:::-;40446:139;;40173:419;;;:::o
Swarm Source
ipfs://8b8711093d4bbb69cb7b859740b2fbde81615d38bd44b4aee202867006e61139
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.