Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
7,777 SPW
Holders
4,049
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SPWLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SpaceWarriors
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-25 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // 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: SpaceWarriors.sol pragma solidity 0.8.1; /** * @title Mint Space warrior collection * @notice This contract mint NFT linked to an IPFS file */ contract SpaceWarriors is ERC721Enumerable, Ownable { using Strings for uint256; // Merkle root of the whitelist bytes32 public _merkleRoot; // Max supply uint public _maxSupply = 7777; // Amount of reserved token uint public _reserved = 100; // Price token in ether uint public _price = 0.2 ether; // Max token by wallet uint public _maxNftByWallet = 2; // Contract status. If paused, no one can mint bool public _paused = true; // Sell status. Presale if true and public sale if false bool public _presale = true; // Address of the team wallet address payable _team; //Flag allowing the set of the base URI only once bool public _baseURIset = false; /** * @dev NFT configuration * _revealed: Lock/Unlock the final URI. Link to the hidden URI if false * baseURI : URI of the revealed NFT * _hideURI : URI of the non revealed NFT */ bool public _revealed = false; string public baseURI; string public _hideURI; /** * @dev Modifier isWhitelisted to check if the caller is on the whitelist */ modifier isWhitelisted(bytes32 [] calldata merkleProof){ bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(merkleProof, _merkleRoot, leaf), "Not in the whitelist"); _; } /** * @dev Initializes tbe contract with: * initURI: the final URI after reveal in a format eg: "ipfs://QmdsxxxxxxxxxxxxxxxxxxepJF/" * hiddenURI: the initial URI before the reveal, in a complete format eg: "ipfs://QmdsxxxxxxxxxxxxxxxxxxepJF/hidden.json" * merkleRoot: the merkle root of the whitelist * team: Address of the team wallet */ constructor ( string memory hiddenURI, bytes32 merkleRoot, address payable team ) ERC721("SpaceWarriors", "SPW"){ _team = team; _hideURI = hiddenURI; _merkleRoot = merkleRoot; _safeMint(team, 0); } /** * @dev Switch the status of the contract * * In pause state if `_paused` is true, no one can mint but the owner * */ function switchPauseStatus () external onlyOwner (){ _paused = !_paused; } /** * @dev End the presale * * If `_presale` = false, the contract is in public sale mode * */ function endPresale () external onlyOwner (){ _presale = false; } /** * @dev Change the `_price` of the token for `newPrice` */ function setNewPrice (uint newPrice) external onlyOwner (){ _price = newPrice; } /** * @dev Minting for whitelisted addresses * * Requirements: * * Contract must be unpaused * The presale must be going on * The caller must request less than the max by address authorized * The amount of token must be superior to 0 * The supply must not be empty * The price must be correct * * @param amountToMint the number of token to mint * @param merkleProof for the wallet address * */ function whitlistedMinting (uint amountToMint, bytes32[] calldata merkleProof ) external payable isWhitelisted(merkleProof) { require (!_paused, "Contract paused"); require (_presale, "Presale over!"); require (amountToMint + balanceOf(msg.sender) <= _maxNftByWallet, "Requet too much for a wallet"); require (amountToMint > 0, "Error in the amount requested"); require (amountToMint + totalSupply() <= _maxSupply - _reserved, "Request superior max Supply"); require (msg.value >= _price*amountToMint, "Insuficient funds"); _mintNFT(amountToMint); } /** * @dev Updating the merkel root * * @param newMerkleRoot must start with 0x * */ function updateMerleRoot ( bytes32 newMerkleRoot) external onlyOwner{ _merkleRoot = newMerkleRoot; } /** * @dev Updating the max allowed in each wallet */ function updateMaxByWallet (uint newMaxNftByWallet) external onlyOwner{ _maxNftByWallet = newMaxNftByWallet; } /** * @dev Minting for the public sale * * Requirements: * * The presale must be over * The caller must request less than the max by address authorized * The amount of token must be superior to 0 * The supply must not be empty * The price must be correct * * @param amountToMint the number of token to mint * */ function publicMint(uint amountToMint) external payable{ require (!_paused, "Contract paused"); require (!_presale, "Presale on"); require (amountToMint + balanceOf(msg.sender) <= _maxNftByWallet, "Requet too much for a wallet"); require (amountToMint > 0, "Error in the amount requested"); require (amountToMint + totalSupply() <= _maxSupply - _reserved, "Request superior max Supply"); require (msg.value >= _price*amountToMint, "Insuficient funds"); _mintNFT(amountToMint); } /** * @dev Give away attribution * * Requirements: * * The recipient must be different than 0 * The amount of token requested must be within the reverse * The amount requested must be supperior to 0 * */ function giveAway (address to, uint amountToMint) external onlyOwner{ require (to != address(0), "address 0 requested"); require (amountToMint <= _reserved, "You requested more than the reserved token"); require (amountToMint > 0, "Amount Issue"); uint currentSupply = totalSupply(); _reserved = _reserved - amountToMint; for (uint i; i < amountToMint ; i++) { _safeMint(to, currentSupply + i); } } /** * @dev Mint the amount of NFT requested */ function _mintNFT(uint _amountToMint) internal { uint currentSupply = totalSupply(); for (uint i; i < _amountToMint ; i++) { _safeMint(msg.sender, currentSupply + i); } } /** * @dev Team withdraw on the `_team` wallet */ function withdraw () external onlyOwner{ require(address(this).balance != 0, "Nothing to withdraw"); (bool success, ) = _team.call{value: address(this).balance }(""); require(success, 'transfer failed'); } /** * @dev Return an array of token Id owned by `owner` */ function getWallet(address _owner) public view returns(uint [] memory){ uint numberOwned = balanceOf(_owner); uint [] memory idItems = new uint[](numberOwned); for (uint i = 0; i < numberOwned; i++){ idItems[i] = tokenOfOwnerByIndex(_owner,i); } return idItems; } /** * @dev Reveal the final URI */ function revealNFT() public onlyOwner { _revealed = true; } /** * @dev ERC721 standard * @return baseURI value */ function _baseURI() internal view virtual override returns (string memory) { return baseURI; } /** * @dev Set the base URI * * The owner set the base URI only once !!!!! * The style MUST BE as follow : "ipfs://QmdsaXXXXXXXXXXXXXXXXXXXX7epJF/" */ function setBaseURI(string memory newBaseURI) public onlyOwner { require (!_baseURIset, "Base URI has already be set"); _baseURIset = true; baseURI = newBaseURI; } /** * @dev Set the hiddenURI just in case * */ function setHidden(string memory newHiddenUri) public onlyOwner { _hideURI = newHiddenUri; } /** * @dev Return the URI of the NFT * @notice return the hidden URI then the Revealed JSON when the Revealed param is true */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token"); if(_revealed == false) { return _hideURI; } string memory URI = _baseURI(); return bytes(URI).length > 0 ? string(abi.encodePacked(URI, tokenId.toString(), ".json")) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"hiddenURI","type":"string"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"address payable","name":"team","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseURIset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hideURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxNftByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getWallet","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountToMint","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToMint","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newHiddenUri","type":"string"}],"name":"setHidden","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setNewPrice","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":"switchPauseStatus","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"newMaxNftByWallet","type":"uint256"}],"name":"updateMaxByWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkleRoot","type":"bytes32"}],"name":"updateMerleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToMint","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"whitlistedMinting","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611e61600c556064600d556702c68af0bb140000600e556002600f556001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055506000601060166101000a81548160ff0219169083151502179055506000601060176101000a81548160ff0219169083151502179055503480156200009957600080fd5b5060405162006af238038062006af28339818101604052810190620000bf919062000eb1565b6040518060400160405280600d81526020017f537061636557617272696f7273000000000000000000000000000000000000008152506040518060400160405280600381526020017f535057000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014392919062000d1e565b5080600190805190602001906200015c92919062000d1e565b5050506200017f62000173620001fc60201b60201c565b6200020460201b60201c565b80601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260129080519060200190620001d892919062000d1e565b5081600b81905550620001f3816000620002ca60201b60201c565b50505062001525565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ec828260405180602001604052806000815250620002f060201b60201c565b5050565b6200030283836200035e60201b60201c565b6200031760008484846200054460201b60201c565b62000359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003509062001073565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c890620010d9565b60405180910390fd5b620003e281620006fe60201b60201c565b1562000425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041c9062001095565b60405180910390fd5b62000439600083836200076a60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200048b919062001187565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005728473ffffffffffffffffffffffffffffffffffffffff16620008b160201b620023b11760201c565b15620006f1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005a4620001fc60201b60201c565b8786866040518563ffffffff1660e01b8152600401620005c894939291906200101f565b602060405180830381600087803b158015620005e357600080fd5b505af19250505080156200061757506040513d601f19601f8201168201806040525081019062000614919062000e85565b60015b620006a0573d80600081146200064a576040519150601f19603f3d011682016040523d82523d6000602084013e6200064f565b606091505b5060008151141562000698576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068f9062001073565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006f6565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000782838383620008c460201b620023c41760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620007cf57620007c981620008c960201b60201c565b62000817565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000816576200081583826200091260201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000864576200085e8162000a8f60201b60201c565b620008ac565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620008ab57620008aa828262000bd760201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016200092c8462000c6360201b620015c51760201c565b620009389190620011e4565b905060006007600084815260200190815260200160002054905081811462000a1e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000aa59190620011e4565b905060006009600084815260200190815260200160002054905060006008838154811062000afc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000b45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000bbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000bef8362000c6360201b620015c51760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cce90620010b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000d2c90620012dd565b90600052602060002090601f01602090048101928262000d50576000855562000d9c565b82601f1062000d6b57805160ff191683800117855562000d9c565b8280016001018555821562000d9c579182015b8281111562000d9b57825182559160200191906001019062000d7e565b5b50905062000dab919062000daf565b5090565b5b8082111562000dca57600081600090555060010162000db0565b5090565b600062000de562000ddf8462001124565b620010fb565b90508281526020810184848401111562000dfe57600080fd5b62000e0b848285620012a7565b509392505050565b60008151905062000e2481620014d7565b92915050565b60008151905062000e3b81620014f1565b92915050565b60008151905062000e52816200150b565b92915050565b600082601f83011262000e6a57600080fd5b815162000e7c84826020860162000dce565b91505092915050565b60006020828403121562000e9857600080fd5b600062000ea88482850162000e41565b91505092915050565b60008060006060848603121562000ec757600080fd5b600084015167ffffffffffffffff81111562000ee257600080fd5b62000ef08682870162000e58565b935050602062000f038682870162000e2a565b925050604062000f168682870162000e13565b9150509250925092565b62000f2b816200121f565b82525050565b600062000f3e826200115a565b62000f4a818562001165565b935062000f5c818560208601620012a7565b62000f6781620013d6565b840191505092915050565b600062000f8160328362001176565b915062000f8e82620013e7565b604082019050919050565b600062000fa8601c8362001176565b915062000fb58262001436565b602082019050919050565b600062000fcf602a8362001176565b915062000fdc826200145f565b604082019050919050565b600062000ff660208362001176565b91506200100382620014ae565b602082019050919050565b62001019816200129d565b82525050565b600060808201905062001036600083018762000f20565b62001045602083018662000f20565b6200105460408301856200100e565b818103606083015262001068818462000f31565b905095945050505050565b600060208201905081810360008301526200108e8162000f72565b9050919050565b60006020820190508181036000830152620010b08162000f99565b9050919050565b60006020820190508181036000830152620010d28162000fc0565b9050919050565b60006020820190508181036000830152620010f48162000fe7565b9050919050565b6000620011076200111a565b905062001115828262001313565b919050565b6000604051905090565b600067ffffffffffffffff821115620011425762001141620013a7565b5b6200114d82620013d6565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062001194826200129d565b9150620011a1836200129d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620011d957620011d862001349565b5b828201905092915050565b6000620011f1826200129d565b9150620011fe836200129d565b92508282101562001214576200121362001349565b5b828203905092915050565b60006200122c826200127d565b9050919050565b600062001240826200127d565b9050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620012c7578082015181840152602081019050620012aa565b83811115620012d7576000848401525b50505050565b60006002820490506001821680620012f657607f821691505b602082108114156200130d576200130c62001378565b5b50919050565b6200131e82620013d6565b810181811067ffffffffffffffff8211171562001340576200133f620013a7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b620014e28162001233565b8114620014ee57600080fd5b50565b620014fc8162001247565b81146200150857600080fd5b50565b620015168162001251565b81146200152257600080fd5b50565b6155bd80620015356000396000f3fe60806040526004361061025c5760003560e01c80636c0360eb11610144578063abb64e85116100b6578063d96b3d331161007a578063d96b3d3314610894578063e2a71ef8146108bd578063e985e9c5146108e8578063ee8cdd4e14610925578063f2fde38b1461094e578063f4aa639e146109775761025c565b8063abb64e85146107b3578063b88d4fde146107dc578063c87b56dd14610805578063ca80014414610842578063d309aa2c1461086b5761025c565b806380c6b0891161010857806380c6b089146106ea5780638da5cb5b1461070657806395d89b4114610731578063a22cb4651461075c578063a43be57b14610785578063aa8a31fb1461079c5761025c565b80636c0360eb146106155780636ebeac851461064057806370a082311461066b578063715018a6146106a857806377806db3146106bf5761025c565b8063235b6ea1116101dd5780633ccfd60b116101a15780633ccfd60b1461050757806342842e0e1461051e5780634f6ccce71461054757806355f804b3146105845780636352211e146105ad5780636aaa571d146105ea5761025c565b8063235b6ea11461042f57806323b872dd1461045a5780632db11544146104835780632f745c591461049f5780632fc37ab2146104dc5761025c565b8063095ea7b311610224578063095ea7b31461035a57806316c61ccc1461038357806318160ddd146103ae5780631c8bbebe146103d957806322f4596f146104045761025c565b806301ffc9a71461026157806304b4bba91461029e57806304d0a647146102b557806306fdde03146102f2578063081812fc1461031d575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613bf3565b6109a2565b6040516102959190614453565b60405180910390f35b3480156102aa57600080fd5b506102b3610a1c565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190613a23565b610ab5565b6040516102e99190614431565b60405180910390f35b3480156102fe57600080fd5b50610307610baf565b6040516103149190614489565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190613c86565b610c41565b60405161035191906143ca565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613b8e565b610cc6565b005b34801561038f57600080fd5b50610398610dde565b6040516103a59190614453565b60405180910390f35b3480156103ba57600080fd5b506103c3610df1565b6040516103d091906148ab565b60405180910390f35b3480156103e557600080fd5b506103ee610dfe565b6040516103fb9190614453565b60405180910390f35b34801561041057600080fd5b50610419610e11565b60405161042691906148ab565b60405180910390f35b34801561043b57600080fd5b50610444610e17565b60405161045191906148ab565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190613a88565b610e1d565b005b61049d60048036038101906104989190613c86565b610e7d565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190613b8e565b611078565b6040516104d391906148ab565b60405180910390f35b3480156104e857600080fd5b506104f161111d565b6040516104fe919061446e565b60405180910390f35b34801561051357600080fd5b5061051c611123565b005b34801561052a57600080fd5b5061054560048036038101906105409190613a88565b6112b4565b005b34801561055357600080fd5b5061056e60048036038101906105699190613c86565b6112d4565b60405161057b91906148ab565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190613c45565b61136b565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190613c86565b61146c565b6040516105e191906143ca565b60405180910390f35b3480156105f657600080fd5b506105ff61151e565b60405161060c91906148ab565b60405180910390f35b34801561062157600080fd5b5061062a611524565b6040516106379190614489565b60405180910390f35b34801561064c57600080fd5b506106556115b2565b6040516106629190614453565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d9190613a23565b6115c5565b60405161069f91906148ab565b60405180910390f35b3480156106b457600080fd5b506106bd61167d565b005b3480156106cb57600080fd5b506106d4611705565b6040516106e19190614489565b60405180910390f35b61070460048036038101906106ff9190613caf565b611793565b005b34801561071257600080fd5b5061071b611a4c565b60405161072891906143ca565b60405180910390f35b34801561073d57600080fd5b50610746611a76565b6040516107539190614489565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e9190613b52565b611b08565b005b34801561079157600080fd5b5061079a611b1e565b005b3480156107a857600080fd5b506107b1611bb7565b005b3480156107bf57600080fd5b506107da60048036038101906107d59190613c86565b611c5f565b005b3480156107e857600080fd5b5061080360048036038101906107fe9190613ad7565b611ce5565b005b34801561081157600080fd5b5061082c60048036038101906108279190613c86565b611d47565b6040516108399190614489565b60405180910390f35b34801561084e57600080fd5b5061086960048036038101906108649190613b8e565b611e9d565b005b34801561087757600080fd5b50610892600480360381019061088d9190613c45565b61206a565b005b3480156108a057600080fd5b506108bb60048036038101906108b69190613bca565b612100565b005b3480156108c957600080fd5b506108d2612186565b6040516108df9190614453565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190613a4c565b612199565b60405161091c9190614453565b60405180910390f35b34801561093157600080fd5b5061094c60048036038101906109479190613c86565b61222d565b005b34801561095a57600080fd5b5061097560048036038101906109709190613a23565b6122b3565b005b34801561098357600080fd5b5061098c6123ab565b60405161099991906148ab565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a155750610a14826123c9565b5b9050919050565b610a246124ab565b73ffffffffffffffffffffffffffffffffffffffff16610a42611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f9061470b565b60405180910390fd5b6001601060176101000a81548160ff021916908315150217905550565b60606000610ac2836115c5565b905060008167ffffffffffffffff811115610b06577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b345781602001602082028036833780820191505090505b50905060005b82811015610ba457610b4c8582611078565b828281518110610b85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610b9c90614c0c565b915050610b3a565b508092505050919050565b606060008054610bbe90614ba9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90614ba9565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4c826124b3565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c82906146eb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cd18261146c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d399061478b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d616124ab565b73ffffffffffffffffffffffffffffffffffffffff161480610d905750610d8f81610d8a6124ab565b612199565b5b610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc69061466b565b60405180910390fd5b610dd9838361251f565b505050565b601060009054906101000a900460ff1681565b6000600880549050905090565b601060169054906101000a900460ff1681565b600c5481565b600e5481565b610e2e610e286124ab565b826125d8565b610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e649061480b565b60405180910390fd5b610e788383836126b6565b505050565b601060009054906101000a900460ff1615610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec49061458b565b60405180910390fd5b601060019054906101000a900460ff1615610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f149061456b565b60405180910390fd5b600f54610f29336115c5565b82610f3491906149d4565b1115610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061488b565b60405180910390fd5b60008111610fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faf9061462b565b60405180910390fd5b600d54600c54610fc89190614ab5565b610fd0610df1565b82610fdb91906149d4565b111561101c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611013906147ab565b60405180910390fd5b80600e5461102a9190614a5b565b34101561106c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110639061482b565b60405180910390fd5b61107581612912565b50565b6000611083836115c5565b82106110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb906144eb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b5481565b61112b6124ab565b73ffffffffffffffffffffffffffffffffffffffff16611149611a4c565b73ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111969061470b565b60405180910390fd5b60004714156111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906144cb565b60405180910390fd5b6000601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161122b906143b5565b60006040518083038185875af1925050503d8060008114611268576040519150601f19603f3d011682016040523d82523d6000602084013e61126d565b606091505b50509050806112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a89061486b565b60405180910390fd5b50565b6112cf83838360405180602001604052806000815250611ce5565b505050565b60006112de610df1565b821061131f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113169061484b565b60405180910390fd5b60088281548110611359577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6113736124ab565b73ffffffffffffffffffffffffffffffffffffffff16611391611a4c565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de9061470b565b60405180910390fd5b601060169054906101000a900460ff1615611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e906147cb565b60405180910390fd5b6001601060166101000a81548160ff02191690831515021790555080601190805190602001906114689291906137e8565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c906146ab565b60405180910390fd5b80915050919050565b600d5481565b6011805461153190614ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461155d90614ba9565b80156115aa5780601f1061157f576101008083540402835291602001916115aa565b820191906000526020600020905b81548152906001019060200180831161158d57829003601f168201915b505050505081565b601060179054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061468b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116856124ab565b73ffffffffffffffffffffffffffffffffffffffff166116a3611a4c565b73ffffffffffffffffffffffffffffffffffffffff16146116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f09061470b565b60405180910390fd5b6117036000612956565b565b6012805461171290614ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461173e90614ba9565b801561178b5780601f106117605761010080835404028352916020019161178b565b820191906000526020600020905b81548152906001019060200180831161176e57829003601f168201915b505050505081565b81816000336040516020016117a8919061433f565b60405160208183030381529060405280519060200120905061180e838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5483612a1c565b61184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906147eb565b60405180910390fd5b601060009054906101000a900460ff161561189d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118949061458b565b60405180910390fd5b601060019054906101000a900460ff166118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e39061460b565b60405180910390fd5b600f546118f8336115c5565b8761190391906149d4565b1115611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b9061488b565b60405180910390fd5b60008611611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e9061462b565b60405180910390fd5b600d54600c546119979190614ab5565b61199f610df1565b876119aa91906149d4565b11156119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e2906147ab565b60405180910390fd5b85600e546119f99190614a5b565b341015611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a329061482b565b60405180910390fd5b611a4486612912565b505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a8590614ba9565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab190614ba9565b8015611afe5780601f10611ad357610100808354040283529160200191611afe565b820191906000526020600020905b815481529060010190602001808311611ae157829003601f168201915b5050505050905090565b611b1a611b136124ab565b8383612a33565b5050565b611b266124ab565b73ffffffffffffffffffffffffffffffffffffffff16611b44611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b919061470b565b60405180910390fd5b6000601060016101000a81548160ff021916908315150217905550565b611bbf6124ab565b73ffffffffffffffffffffffffffffffffffffffff16611bdd611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9061470b565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b611c676124ab565b73ffffffffffffffffffffffffffffffffffffffff16611c85611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd29061470b565b60405180910390fd5b80600f8190555050565b611cf6611cf06124ab565b836125d8565b611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c9061480b565b60405180910390fd5b611d4184848484612ba0565b50505050565b6060611d52826124b3565b611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d889061476b565b60405180910390fd5b60001515601060179054906101000a900460ff1615151415611e3f5760128054611dba90614ba9565b80601f0160208091040260200160405190810160405280929190818152602001828054611de690614ba9565b8015611e335780601f10611e0857610100808354040283529160200191611e33565b820191906000526020600020905b815481529060010190602001808311611e1657829003601f168201915b50505050509050611e98565b6000611e49612bfc565b90506000815111611e695760405180602001604052806000815250611e94565b80611e7384612c8e565b604051602001611e84929190614386565b6040516020818303038152906040525b9150505b919050565b611ea56124ab565b73ffffffffffffffffffffffffffffffffffffffff16611ec3611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f109061470b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f80906145eb565b60405180910390fd5b600d54811115611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc59061472b565b60405180910390fd5b60008111612011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612008906144ab565b60405180910390fd5b600061201b610df1565b905081600d5461202b9190614ab5565b600d8190555060005b828110156120645761205184828461204c91906149d4565b612e3b565b808061205c90614c0c565b915050612034565b50505050565b6120726124ab565b73ffffffffffffffffffffffffffffffffffffffff16612090611a4c565b73ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd9061470b565b60405180910390fd5b80601290805190602001906120fc9291906137e8565b5050565b6121086124ab565b73ffffffffffffffffffffffffffffffffffffffff16612126611a4c565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121739061470b565b60405180910390fd5b80600b8190555050565b601060019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122356124ab565b73ffffffffffffffffffffffffffffffffffffffff16612253611a4c565b73ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a09061470b565b60405180910390fd5b80600e8190555050565b6122bb6124ab565b73ffffffffffffffffffffffffffffffffffffffff166122d9611a4c565b73ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123269061470b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123969061452b565b60405180910390fd5b6123a881612956565b50565b600f5481565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061249457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124a457506124a382612e59565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125928361146c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125e3826124b3565b612622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126199061464b565b60405180910390fd5b600061262d8361146c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061269c57508373ffffffffffffffffffffffffffffffffffffffff1661268484610c41565b73ffffffffffffffffffffffffffffffffffffffff16145b806126ad57506126ac8185612199565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126d68261146c565b73ffffffffffffffffffffffffffffffffffffffff161461272c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127239061474b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561279c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612793906145ab565b60405180910390fd5b6127a7838383612ec3565b6127b260008261251f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128029190614ab5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461285991906149d4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061291c610df1565b905060005b828110156129515761293e33828461293991906149d4565b612e3b565b808061294990614c0c565b915050612921565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082612a298584612fd7565b1490509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a99906145cb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b939190614453565b60405180910390a3505050565b612bab8484846126b6565b612bb7848484846130b0565b612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed9061450b565b60405180910390fd5b50505050565b606060118054612c0b90614ba9565b80601f0160208091040260200160405190810160405280929190818152602001828054612c3790614ba9565b8015612c845780601f10612c5957610100808354040283529160200191612c84565b820191906000526020600020905b815481529060010190602001808311612c6757829003601f168201915b5050505050905090565b60606000821415612cd6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e36565b600082905060005b60008214612d08578080612cf190614c0c565b915050600a82612d019190614a2a565b9150612cde565b60008167ffffffffffffffff811115612d4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d7c5781602001600182028036833780820191505090505b5090505b60008514612e2f57600182612d959190614ab5565b9150600a85612da49190614c83565b6030612db091906149d4565b60f81b818381518110612dec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e289190614a2a565b9450612d80565b8093505050505b919050565b612e55828260405180602001604052806000815250613247565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ece8383836123c4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f1157612f0c816132a2565b612f50565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f4f57612f4e83826132eb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f9357612f8e81613458565b612fd2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fd157612fd0828261359b565b5b5b505050565b60008082905060005b84518110156130a5576000858281518110613024577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161306557828160405160200161304892919061435a565b604051602081830303815290604052805190602001209250613091565b808360405160200161307892919061435a565b6040516020818303038152906040528051906020012092505b50808061309d90614c0c565b915050612fe0565b508091505092915050565b60006130d18473ffffffffffffffffffffffffffffffffffffffff166123b1565b1561323a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130fa6124ab565b8786866040518563ffffffff1660e01b815260040161311c94939291906143e5565b602060405180830381600087803b15801561313657600080fd5b505af192505050801561316757506040513d601f19601f820116820180604052508101906131649190613c1c565b60015b6131ea573d8060008114613197576040519150601f19603f3d011682016040523d82523d6000602084013e61319c565b606091505b506000815114156131e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d99061450b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061323f565b600190505b949350505050565b613251838361361a565b61325e60008484846130b0565b61329d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132949061450b565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132f8846115c5565b6133029190614ab5565b90506000600760008481526020019081526020016000205490508181146133e7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061346c9190614ab5565b90506000600960008481526020019081526020016000205490506000600883815481106134c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061350a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061357f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006135a6836115c5565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561368a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613681906146cb565b60405180910390fd5b613693816124b3565b156136d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ca9061454b565b60405180910390fd5b6136df60008383612ec3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461372f91906149d4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546137f490614ba9565b90600052602060002090601f016020900481019282613816576000855561385d565b82601f1061382f57805160ff191683800117855561385d565b8280016001018555821561385d579182015b8281111561385c578251825591602001919060010190613841565b5b50905061386a919061386e565b5090565b5b8082111561388757600081600090555060010161386f565b5090565b600061389e613899846148eb565b6148c6565b9050828152602081018484840111156138b657600080fd5b6138c1848285614b67565b509392505050565b60006138dc6138d78461491c565b6148c6565b9050828152602081018484840111156138f457600080fd5b6138ff848285614b67565b509392505050565b60008135905061391681615514565b92915050565b60008083601f84011261392e57600080fd5b8235905067ffffffffffffffff81111561394757600080fd5b60208301915083602082028301111561395f57600080fd5b9250929050565b6000813590506139758161552b565b92915050565b60008135905061398a81615542565b92915050565b60008135905061399f81615559565b92915050565b6000815190506139b481615559565b92915050565b600082601f8301126139cb57600080fd5b81356139db84826020860161388b565b91505092915050565b600082601f8301126139f557600080fd5b8135613a058482602086016138c9565b91505092915050565b600081359050613a1d81615570565b92915050565b600060208284031215613a3557600080fd5b6000613a4384828501613907565b91505092915050565b60008060408385031215613a5f57600080fd5b6000613a6d85828601613907565b9250506020613a7e85828601613907565b9150509250929050565b600080600060608486031215613a9d57600080fd5b6000613aab86828701613907565b9350506020613abc86828701613907565b9250506040613acd86828701613a0e565b9150509250925092565b60008060008060808587031215613aed57600080fd5b6000613afb87828801613907565b9450506020613b0c87828801613907565b9350506040613b1d87828801613a0e565b925050606085013567ffffffffffffffff811115613b3a57600080fd5b613b46878288016139ba565b91505092959194509250565b60008060408385031215613b6557600080fd5b6000613b7385828601613907565b9250506020613b8485828601613966565b9150509250929050565b60008060408385031215613ba157600080fd5b6000613baf85828601613907565b9250506020613bc085828601613a0e565b9150509250929050565b600060208284031215613bdc57600080fd5b6000613bea8482850161397b565b91505092915050565b600060208284031215613c0557600080fd5b6000613c1384828501613990565b91505092915050565b600060208284031215613c2e57600080fd5b6000613c3c848285016139a5565b91505092915050565b600060208284031215613c5757600080fd5b600082013567ffffffffffffffff811115613c7157600080fd5b613c7d848285016139e4565b91505092915050565b600060208284031215613c9857600080fd5b6000613ca684828501613a0e565b91505092915050565b600080600060408486031215613cc457600080fd5b6000613cd286828701613a0e565b935050602084013567ffffffffffffffff811115613cef57600080fd5b613cfb8682870161391c565b92509250509250925092565b6000613d138383614321565b60208301905092915050565b613d2881614ae9565b82525050565b613d3f613d3a82614ae9565b614c55565b82525050565b6000613d508261495d565b613d5a818561498b565b9350613d658361494d565b8060005b83811015613d96578151613d7d8882613d07565b9750613d888361497e565b925050600181019050613d69565b5085935050505092915050565b613dac81614afb565b82525050565b613dbb81614b07565b82525050565b613dd2613dcd82614b07565b614c67565b82525050565b6000613de382614968565b613ded818561499c565b9350613dfd818560208601614b76565b613e0681614d70565b840191505092915050565b6000613e1c82614973565b613e2681856149b8565b9350613e36818560208601614b76565b613e3f81614d70565b840191505092915050565b6000613e5582614973565b613e5f81856149c9565b9350613e6f818560208601614b76565b80840191505092915050565b6000613e88600c836149b8565b9150613e9382614d8e565b602082019050919050565b6000613eab6013836149b8565b9150613eb682614db7565b602082019050919050565b6000613ece602b836149b8565b9150613ed982614de0565b604082019050919050565b6000613ef16032836149b8565b9150613efc82614e2f565b604082019050919050565b6000613f146026836149b8565b9150613f1f82614e7e565b604082019050919050565b6000613f37601c836149b8565b9150613f4282614ecd565b602082019050919050565b6000613f5a600a836149b8565b9150613f6582614ef6565b602082019050919050565b6000613f7d600f836149b8565b9150613f8882614f1f565b602082019050919050565b6000613fa06024836149b8565b9150613fab82614f48565b604082019050919050565b6000613fc36019836149b8565b9150613fce82614f97565b602082019050919050565b6000613fe66013836149b8565b9150613ff182614fc0565b602082019050919050565b6000614009600d836149b8565b915061401482614fe9565b602082019050919050565b600061402c601d836149b8565b915061403782615012565b602082019050919050565b600061404f602c836149b8565b915061405a8261503b565b604082019050919050565b60006140726038836149b8565b915061407d8261508a565b604082019050919050565b6000614095602a836149b8565b91506140a0826150d9565b604082019050919050565b60006140b86029836149b8565b91506140c382615128565b604082019050919050565b60006140db6020836149b8565b91506140e682615177565b602082019050919050565b60006140fe602c836149b8565b9150614109826151a0565b604082019050919050565b60006141216005836149c9565b915061412c826151ef565b600582019050919050565b60006141446020836149b8565b915061414f82615218565b602082019050919050565b6000614167602a836149b8565b915061417282615241565b604082019050919050565b600061418a6029836149b8565b915061419582615290565b604082019050919050565b60006141ad602f836149b8565b91506141b8826152df565b604082019050919050565b60006141d06021836149b8565b91506141db8261532e565b604082019050919050565b60006141f3601b836149b8565b91506141fe8261537d565b602082019050919050565b6000614216601b836149b8565b9150614221826153a6565b602082019050919050565b60006142396014836149b8565b9150614244826153cf565b602082019050919050565b600061425c6000836149ad565b9150614267826153f8565b600082019050919050565b600061427f6031836149b8565b915061428a826153fb565b604082019050919050565b60006142a26011836149b8565b91506142ad8261544a565b602082019050919050565b60006142c5602c836149b8565b91506142d082615473565b604082019050919050565b60006142e8600f836149b8565b91506142f3826154c2565b602082019050919050565b600061430b601c836149b8565b9150614316826154eb565b602082019050919050565b61432a81614b5d565b82525050565b61433981614b5d565b82525050565b600061434b8284613d2e565b60148201915081905092915050565b60006143668285613dc1565b6020820191506143768284613dc1565b6020820191508190509392505050565b60006143928285613e4a565b915061439e8284613e4a565b91506143a982614114565b91508190509392505050565b60006143c08261424f565b9150819050919050565b60006020820190506143df6000830184613d1f565b92915050565b60006080820190506143fa6000830187613d1f565b6144076020830186613d1f565b6144146040830185614330565b81810360608301526144268184613dd8565b905095945050505050565b6000602082019050818103600083015261444b8184613d45565b905092915050565b60006020820190506144686000830184613da3565b92915050565b60006020820190506144836000830184613db2565b92915050565b600060208201905081810360008301526144a38184613e11565b905092915050565b600060208201905081810360008301526144c481613e7b565b9050919050565b600060208201905081810360008301526144e481613e9e565b9050919050565b6000602082019050818103600083015261450481613ec1565b9050919050565b6000602082019050818103600083015261452481613ee4565b9050919050565b6000602082019050818103600083015261454481613f07565b9050919050565b6000602082019050818103600083015261456481613f2a565b9050919050565b6000602082019050818103600083015261458481613f4d565b9050919050565b600060208201905081810360008301526145a481613f70565b9050919050565b600060208201905081810360008301526145c481613f93565b9050919050565b600060208201905081810360008301526145e481613fb6565b9050919050565b6000602082019050818103600083015261460481613fd9565b9050919050565b6000602082019050818103600083015261462481613ffc565b9050919050565b600060208201905081810360008301526146448161401f565b9050919050565b6000602082019050818103600083015261466481614042565b9050919050565b6000602082019050818103600083015261468481614065565b9050919050565b600060208201905081810360008301526146a481614088565b9050919050565b600060208201905081810360008301526146c4816140ab565b9050919050565b600060208201905081810360008301526146e4816140ce565b9050919050565b60006020820190508181036000830152614704816140f1565b9050919050565b6000602082019050818103600083015261472481614137565b9050919050565b600060208201905081810360008301526147448161415a565b9050919050565b600060208201905081810360008301526147648161417d565b9050919050565b60006020820190508181036000830152614784816141a0565b9050919050565b600060208201905081810360008301526147a4816141c3565b9050919050565b600060208201905081810360008301526147c4816141e6565b9050919050565b600060208201905081810360008301526147e481614209565b9050919050565b600060208201905081810360008301526148048161422c565b9050919050565b6000602082019050818103600083015261482481614272565b9050919050565b6000602082019050818103600083015261484481614295565b9050919050565b60006020820190508181036000830152614864816142b8565b9050919050565b60006020820190508181036000830152614884816142db565b9050919050565b600060208201905081810360008301526148a4816142fe565b9050919050565b60006020820190506148c06000830184614330565b92915050565b60006148d06148e1565b90506148dc8282614bdb565b919050565b6000604051905090565b600067ffffffffffffffff82111561490657614905614d41565b5b61490f82614d70565b9050602081019050919050565b600067ffffffffffffffff82111561493757614936614d41565b5b61494082614d70565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006149df82614b5d565b91506149ea83614b5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a1f57614a1e614cb4565b5b828201905092915050565b6000614a3582614b5d565b9150614a4083614b5d565b925082614a5057614a4f614ce3565b5b828204905092915050565b6000614a6682614b5d565b9150614a7183614b5d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614aaa57614aa9614cb4565b5b828202905092915050565b6000614ac082614b5d565b9150614acb83614b5d565b925082821015614ade57614add614cb4565b5b828203905092915050565b6000614af482614b3d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b94578082015181840152602081019050614b79565b83811115614ba3576000848401525b50505050565b60006002820490506001821680614bc157607f821691505b60208210811415614bd557614bd4614d12565b5b50919050565b614be482614d70565b810181811067ffffffffffffffff82111715614c0357614c02614d41565b5b80604052505050565b6000614c1782614b5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c4a57614c49614cb4565b5b600182019050919050565b6000614c6082614c71565b9050919050565b6000819050919050565b6000614c7c82614d81565b9050919050565b6000614c8e82614b5d565b9150614c9983614b5d565b925082614ca957614ca8614ce3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f416d6f756e742049737375650000000000000000000000000000000000000000600082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f50726573616c65206f6e00000000000000000000000000000000000000000000600082015250565b7f436f6e7472616374207061757365640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6164647265737320302072657175657374656400000000000000000000000000600082015250565b7f50726573616c65206f7665722100000000000000000000000000000000000000600082015250565b7f4572726f7220696e2074686520616d6f756e7420726571756573746564000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520726571756573746564206d6f7265207468616e20746865207265736560008201527f7276656420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f52657175657374207375706572696f72206d617820537570706c790000000000600082015250565b7f42617365205552492068617320616c7265616479206265207365740000000000600082015250565b7f4e6f7420696e207468652077686974656c697374000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e737566696369656e742066756e6473000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f52657175657420746f6f206d75636820666f7220612077616c6c657400000000600082015250565b61551d81614ae9565b811461552857600080fd5b50565b61553481614afb565b811461553f57600080fd5b50565b61554b81614b07565b811461555657600080fd5b50565b61556281614b11565b811461556d57600080fd5b50565b61557981614b5d565b811461558457600080fd5b5056fea2646970667358221220d6c476ccbf970974c4fc7b6042d93dca95567a2daf47e6fd8009ae4ea8d3a2f864736f6c634300080100330000000000000000000000000000000000000000000000000000000000000060986843fe6e8153d9de43af36f13cd9592f6a85cb64b64c48c0fcef4e0c88a260000000000000000000000000c2da8367dff897190423f9ed91fa43735ed0931f00000000000000000000000000000000000000000000000000000000000000407066733a2f2f516d57633879326b6356346d3176315057544e506e675635325a3565344647706b314833366a716f4651517077382f68696464656e2e6a736f6e
Deployed Bytecode
0x60806040526004361061025c5760003560e01c80636c0360eb11610144578063abb64e85116100b6578063d96b3d331161007a578063d96b3d3314610894578063e2a71ef8146108bd578063e985e9c5146108e8578063ee8cdd4e14610925578063f2fde38b1461094e578063f4aa639e146109775761025c565b8063abb64e85146107b3578063b88d4fde146107dc578063c87b56dd14610805578063ca80014414610842578063d309aa2c1461086b5761025c565b806380c6b0891161010857806380c6b089146106ea5780638da5cb5b1461070657806395d89b4114610731578063a22cb4651461075c578063a43be57b14610785578063aa8a31fb1461079c5761025c565b80636c0360eb146106155780636ebeac851461064057806370a082311461066b578063715018a6146106a857806377806db3146106bf5761025c565b8063235b6ea1116101dd5780633ccfd60b116101a15780633ccfd60b1461050757806342842e0e1461051e5780634f6ccce71461054757806355f804b3146105845780636352211e146105ad5780636aaa571d146105ea5761025c565b8063235b6ea11461042f57806323b872dd1461045a5780632db11544146104835780632f745c591461049f5780632fc37ab2146104dc5761025c565b8063095ea7b311610224578063095ea7b31461035a57806316c61ccc1461038357806318160ddd146103ae5780631c8bbebe146103d957806322f4596f146104045761025c565b806301ffc9a71461026157806304b4bba91461029e57806304d0a647146102b557806306fdde03146102f2578063081812fc1461031d575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613bf3565b6109a2565b6040516102959190614453565b60405180910390f35b3480156102aa57600080fd5b506102b3610a1c565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190613a23565b610ab5565b6040516102e99190614431565b60405180910390f35b3480156102fe57600080fd5b50610307610baf565b6040516103149190614489565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190613c86565b610c41565b60405161035191906143ca565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613b8e565b610cc6565b005b34801561038f57600080fd5b50610398610dde565b6040516103a59190614453565b60405180910390f35b3480156103ba57600080fd5b506103c3610df1565b6040516103d091906148ab565b60405180910390f35b3480156103e557600080fd5b506103ee610dfe565b6040516103fb9190614453565b60405180910390f35b34801561041057600080fd5b50610419610e11565b60405161042691906148ab565b60405180910390f35b34801561043b57600080fd5b50610444610e17565b60405161045191906148ab565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190613a88565b610e1d565b005b61049d60048036038101906104989190613c86565b610e7d565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190613b8e565b611078565b6040516104d391906148ab565b60405180910390f35b3480156104e857600080fd5b506104f161111d565b6040516104fe919061446e565b60405180910390f35b34801561051357600080fd5b5061051c611123565b005b34801561052a57600080fd5b5061054560048036038101906105409190613a88565b6112b4565b005b34801561055357600080fd5b5061056e60048036038101906105699190613c86565b6112d4565b60405161057b91906148ab565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190613c45565b61136b565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190613c86565b61146c565b6040516105e191906143ca565b60405180910390f35b3480156105f657600080fd5b506105ff61151e565b60405161060c91906148ab565b60405180910390f35b34801561062157600080fd5b5061062a611524565b6040516106379190614489565b60405180910390f35b34801561064c57600080fd5b506106556115b2565b6040516106629190614453565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d9190613a23565b6115c5565b60405161069f91906148ab565b60405180910390f35b3480156106b457600080fd5b506106bd61167d565b005b3480156106cb57600080fd5b506106d4611705565b6040516106e19190614489565b60405180910390f35b61070460048036038101906106ff9190613caf565b611793565b005b34801561071257600080fd5b5061071b611a4c565b60405161072891906143ca565b60405180910390f35b34801561073d57600080fd5b50610746611a76565b6040516107539190614489565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e9190613b52565b611b08565b005b34801561079157600080fd5b5061079a611b1e565b005b3480156107a857600080fd5b506107b1611bb7565b005b3480156107bf57600080fd5b506107da60048036038101906107d59190613c86565b611c5f565b005b3480156107e857600080fd5b5061080360048036038101906107fe9190613ad7565b611ce5565b005b34801561081157600080fd5b5061082c60048036038101906108279190613c86565b611d47565b6040516108399190614489565b60405180910390f35b34801561084e57600080fd5b5061086960048036038101906108649190613b8e565b611e9d565b005b34801561087757600080fd5b50610892600480360381019061088d9190613c45565b61206a565b005b3480156108a057600080fd5b506108bb60048036038101906108b69190613bca565b612100565b005b3480156108c957600080fd5b506108d2612186565b6040516108df9190614453565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190613a4c565b612199565b60405161091c9190614453565b60405180910390f35b34801561093157600080fd5b5061094c60048036038101906109479190613c86565b61222d565b005b34801561095a57600080fd5b5061097560048036038101906109709190613a23565b6122b3565b005b34801561098357600080fd5b5061098c6123ab565b60405161099991906148ab565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a155750610a14826123c9565b5b9050919050565b610a246124ab565b73ffffffffffffffffffffffffffffffffffffffff16610a42611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f9061470b565b60405180910390fd5b6001601060176101000a81548160ff021916908315150217905550565b60606000610ac2836115c5565b905060008167ffffffffffffffff811115610b06577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b345781602001602082028036833780820191505090505b50905060005b82811015610ba457610b4c8582611078565b828281518110610b85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610b9c90614c0c565b915050610b3a565b508092505050919050565b606060008054610bbe90614ba9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90614ba9565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4c826124b3565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c82906146eb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cd18261146c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d399061478b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d616124ab565b73ffffffffffffffffffffffffffffffffffffffff161480610d905750610d8f81610d8a6124ab565b612199565b5b610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc69061466b565b60405180910390fd5b610dd9838361251f565b505050565b601060009054906101000a900460ff1681565b6000600880549050905090565b601060169054906101000a900460ff1681565b600c5481565b600e5481565b610e2e610e286124ab565b826125d8565b610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e649061480b565b60405180910390fd5b610e788383836126b6565b505050565b601060009054906101000a900460ff1615610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec49061458b565b60405180910390fd5b601060019054906101000a900460ff1615610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f149061456b565b60405180910390fd5b600f54610f29336115c5565b82610f3491906149d4565b1115610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061488b565b60405180910390fd5b60008111610fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faf9061462b565b60405180910390fd5b600d54600c54610fc89190614ab5565b610fd0610df1565b82610fdb91906149d4565b111561101c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611013906147ab565b60405180910390fd5b80600e5461102a9190614a5b565b34101561106c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110639061482b565b60405180910390fd5b61107581612912565b50565b6000611083836115c5565b82106110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb906144eb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b5481565b61112b6124ab565b73ffffffffffffffffffffffffffffffffffffffff16611149611a4c565b73ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111969061470b565b60405180910390fd5b60004714156111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906144cb565b60405180910390fd5b6000601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161122b906143b5565b60006040518083038185875af1925050503d8060008114611268576040519150601f19603f3d011682016040523d82523d6000602084013e61126d565b606091505b50509050806112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a89061486b565b60405180910390fd5b50565b6112cf83838360405180602001604052806000815250611ce5565b505050565b60006112de610df1565b821061131f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113169061484b565b60405180910390fd5b60088281548110611359577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6113736124ab565b73ffffffffffffffffffffffffffffffffffffffff16611391611a4c565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de9061470b565b60405180910390fd5b601060169054906101000a900460ff1615611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e906147cb565b60405180910390fd5b6001601060166101000a81548160ff02191690831515021790555080601190805190602001906114689291906137e8565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c906146ab565b60405180910390fd5b80915050919050565b600d5481565b6011805461153190614ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461155d90614ba9565b80156115aa5780601f1061157f576101008083540402835291602001916115aa565b820191906000526020600020905b81548152906001019060200180831161158d57829003601f168201915b505050505081565b601060179054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061468b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116856124ab565b73ffffffffffffffffffffffffffffffffffffffff166116a3611a4c565b73ffffffffffffffffffffffffffffffffffffffff16146116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f09061470b565b60405180910390fd5b6117036000612956565b565b6012805461171290614ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461173e90614ba9565b801561178b5780601f106117605761010080835404028352916020019161178b565b820191906000526020600020905b81548152906001019060200180831161176e57829003601f168201915b505050505081565b81816000336040516020016117a8919061433f565b60405160208183030381529060405280519060200120905061180e838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5483612a1c565b61184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906147eb565b60405180910390fd5b601060009054906101000a900460ff161561189d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118949061458b565b60405180910390fd5b601060019054906101000a900460ff166118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e39061460b565b60405180910390fd5b600f546118f8336115c5565b8761190391906149d4565b1115611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b9061488b565b60405180910390fd5b60008611611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e9061462b565b60405180910390fd5b600d54600c546119979190614ab5565b61199f610df1565b876119aa91906149d4565b11156119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e2906147ab565b60405180910390fd5b85600e546119f99190614a5b565b341015611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a329061482b565b60405180910390fd5b611a4486612912565b505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a8590614ba9565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab190614ba9565b8015611afe5780601f10611ad357610100808354040283529160200191611afe565b820191906000526020600020905b815481529060010190602001808311611ae157829003601f168201915b5050505050905090565b611b1a611b136124ab565b8383612a33565b5050565b611b266124ab565b73ffffffffffffffffffffffffffffffffffffffff16611b44611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b919061470b565b60405180910390fd5b6000601060016101000a81548160ff021916908315150217905550565b611bbf6124ab565b73ffffffffffffffffffffffffffffffffffffffff16611bdd611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9061470b565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b611c676124ab565b73ffffffffffffffffffffffffffffffffffffffff16611c85611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd29061470b565b60405180910390fd5b80600f8190555050565b611cf6611cf06124ab565b836125d8565b611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c9061480b565b60405180910390fd5b611d4184848484612ba0565b50505050565b6060611d52826124b3565b611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d889061476b565b60405180910390fd5b60001515601060179054906101000a900460ff1615151415611e3f5760128054611dba90614ba9565b80601f0160208091040260200160405190810160405280929190818152602001828054611de690614ba9565b8015611e335780601f10611e0857610100808354040283529160200191611e33565b820191906000526020600020905b815481529060010190602001808311611e1657829003601f168201915b50505050509050611e98565b6000611e49612bfc565b90506000815111611e695760405180602001604052806000815250611e94565b80611e7384612c8e565b604051602001611e84929190614386565b6040516020818303038152906040525b9150505b919050565b611ea56124ab565b73ffffffffffffffffffffffffffffffffffffffff16611ec3611a4c565b73ffffffffffffffffffffffffffffffffffffffff1614611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f109061470b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f80906145eb565b60405180910390fd5b600d54811115611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc59061472b565b60405180910390fd5b60008111612011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612008906144ab565b60405180910390fd5b600061201b610df1565b905081600d5461202b9190614ab5565b600d8190555060005b828110156120645761205184828461204c91906149d4565b612e3b565b808061205c90614c0c565b915050612034565b50505050565b6120726124ab565b73ffffffffffffffffffffffffffffffffffffffff16612090611a4c565b73ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd9061470b565b60405180910390fd5b80601290805190602001906120fc9291906137e8565b5050565b6121086124ab565b73ffffffffffffffffffffffffffffffffffffffff16612126611a4c565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121739061470b565b60405180910390fd5b80600b8190555050565b601060019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122356124ab565b73ffffffffffffffffffffffffffffffffffffffff16612253611a4c565b73ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a09061470b565b60405180910390fd5b80600e8190555050565b6122bb6124ab565b73ffffffffffffffffffffffffffffffffffffffff166122d9611a4c565b73ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123269061470b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123969061452b565b60405180910390fd5b6123a881612956565b50565b600f5481565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061249457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124a457506124a382612e59565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125928361146c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125e3826124b3565b612622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126199061464b565b60405180910390fd5b600061262d8361146c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061269c57508373ffffffffffffffffffffffffffffffffffffffff1661268484610c41565b73ffffffffffffffffffffffffffffffffffffffff16145b806126ad57506126ac8185612199565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126d68261146c565b73ffffffffffffffffffffffffffffffffffffffff161461272c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127239061474b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561279c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612793906145ab565b60405180910390fd5b6127a7838383612ec3565b6127b260008261251f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128029190614ab5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461285991906149d4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061291c610df1565b905060005b828110156129515761293e33828461293991906149d4565b612e3b565b808061294990614c0c565b915050612921565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082612a298584612fd7565b1490509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a99906145cb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b939190614453565b60405180910390a3505050565b612bab8484846126b6565b612bb7848484846130b0565b612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed9061450b565b60405180910390fd5b50505050565b606060118054612c0b90614ba9565b80601f0160208091040260200160405190810160405280929190818152602001828054612c3790614ba9565b8015612c845780601f10612c5957610100808354040283529160200191612c84565b820191906000526020600020905b815481529060010190602001808311612c6757829003601f168201915b5050505050905090565b60606000821415612cd6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e36565b600082905060005b60008214612d08578080612cf190614c0c565b915050600a82612d019190614a2a565b9150612cde565b60008167ffffffffffffffff811115612d4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d7c5781602001600182028036833780820191505090505b5090505b60008514612e2f57600182612d959190614ab5565b9150600a85612da49190614c83565b6030612db091906149d4565b60f81b818381518110612dec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e289190614a2a565b9450612d80565b8093505050505b919050565b612e55828260405180602001604052806000815250613247565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ece8383836123c4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f1157612f0c816132a2565b612f50565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f4f57612f4e83826132eb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f9357612f8e81613458565b612fd2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fd157612fd0828261359b565b5b5b505050565b60008082905060005b84518110156130a5576000858281518110613024577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161306557828160405160200161304892919061435a565b604051602081830303815290604052805190602001209250613091565b808360405160200161307892919061435a565b6040516020818303038152906040528051906020012092505b50808061309d90614c0c565b915050612fe0565b508091505092915050565b60006130d18473ffffffffffffffffffffffffffffffffffffffff166123b1565b1561323a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130fa6124ab565b8786866040518563ffffffff1660e01b815260040161311c94939291906143e5565b602060405180830381600087803b15801561313657600080fd5b505af192505050801561316757506040513d601f19601f820116820180604052508101906131649190613c1c565b60015b6131ea573d8060008114613197576040519150601f19603f3d011682016040523d82523d6000602084013e61319c565b606091505b506000815114156131e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d99061450b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061323f565b600190505b949350505050565b613251838361361a565b61325e60008484846130b0565b61329d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132949061450b565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132f8846115c5565b6133029190614ab5565b90506000600760008481526020019081526020016000205490508181146133e7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061346c9190614ab5565b90506000600960008481526020019081526020016000205490506000600883815481106134c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061350a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061357f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006135a6836115c5565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561368a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613681906146cb565b60405180910390fd5b613693816124b3565b156136d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ca9061454b565b60405180910390fd5b6136df60008383612ec3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461372f91906149d4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546137f490614ba9565b90600052602060002090601f016020900481019282613816576000855561385d565b82601f1061382f57805160ff191683800117855561385d565b8280016001018555821561385d579182015b8281111561385c578251825591602001919060010190613841565b5b50905061386a919061386e565b5090565b5b8082111561388757600081600090555060010161386f565b5090565b600061389e613899846148eb565b6148c6565b9050828152602081018484840111156138b657600080fd5b6138c1848285614b67565b509392505050565b60006138dc6138d78461491c565b6148c6565b9050828152602081018484840111156138f457600080fd5b6138ff848285614b67565b509392505050565b60008135905061391681615514565b92915050565b60008083601f84011261392e57600080fd5b8235905067ffffffffffffffff81111561394757600080fd5b60208301915083602082028301111561395f57600080fd5b9250929050565b6000813590506139758161552b565b92915050565b60008135905061398a81615542565b92915050565b60008135905061399f81615559565b92915050565b6000815190506139b481615559565b92915050565b600082601f8301126139cb57600080fd5b81356139db84826020860161388b565b91505092915050565b600082601f8301126139f557600080fd5b8135613a058482602086016138c9565b91505092915050565b600081359050613a1d81615570565b92915050565b600060208284031215613a3557600080fd5b6000613a4384828501613907565b91505092915050565b60008060408385031215613a5f57600080fd5b6000613a6d85828601613907565b9250506020613a7e85828601613907565b9150509250929050565b600080600060608486031215613a9d57600080fd5b6000613aab86828701613907565b9350506020613abc86828701613907565b9250506040613acd86828701613a0e565b9150509250925092565b60008060008060808587031215613aed57600080fd5b6000613afb87828801613907565b9450506020613b0c87828801613907565b9350506040613b1d87828801613a0e565b925050606085013567ffffffffffffffff811115613b3a57600080fd5b613b46878288016139ba565b91505092959194509250565b60008060408385031215613b6557600080fd5b6000613b7385828601613907565b9250506020613b8485828601613966565b9150509250929050565b60008060408385031215613ba157600080fd5b6000613baf85828601613907565b9250506020613bc085828601613a0e565b9150509250929050565b600060208284031215613bdc57600080fd5b6000613bea8482850161397b565b91505092915050565b600060208284031215613c0557600080fd5b6000613c1384828501613990565b91505092915050565b600060208284031215613c2e57600080fd5b6000613c3c848285016139a5565b91505092915050565b600060208284031215613c5757600080fd5b600082013567ffffffffffffffff811115613c7157600080fd5b613c7d848285016139e4565b91505092915050565b600060208284031215613c9857600080fd5b6000613ca684828501613a0e565b91505092915050565b600080600060408486031215613cc457600080fd5b6000613cd286828701613a0e565b935050602084013567ffffffffffffffff811115613cef57600080fd5b613cfb8682870161391c565b92509250509250925092565b6000613d138383614321565b60208301905092915050565b613d2881614ae9565b82525050565b613d3f613d3a82614ae9565b614c55565b82525050565b6000613d508261495d565b613d5a818561498b565b9350613d658361494d565b8060005b83811015613d96578151613d7d8882613d07565b9750613d888361497e565b925050600181019050613d69565b5085935050505092915050565b613dac81614afb565b82525050565b613dbb81614b07565b82525050565b613dd2613dcd82614b07565b614c67565b82525050565b6000613de382614968565b613ded818561499c565b9350613dfd818560208601614b76565b613e0681614d70565b840191505092915050565b6000613e1c82614973565b613e2681856149b8565b9350613e36818560208601614b76565b613e3f81614d70565b840191505092915050565b6000613e5582614973565b613e5f81856149c9565b9350613e6f818560208601614b76565b80840191505092915050565b6000613e88600c836149b8565b9150613e9382614d8e565b602082019050919050565b6000613eab6013836149b8565b9150613eb682614db7565b602082019050919050565b6000613ece602b836149b8565b9150613ed982614de0565b604082019050919050565b6000613ef16032836149b8565b9150613efc82614e2f565b604082019050919050565b6000613f146026836149b8565b9150613f1f82614e7e565b604082019050919050565b6000613f37601c836149b8565b9150613f4282614ecd565b602082019050919050565b6000613f5a600a836149b8565b9150613f6582614ef6565b602082019050919050565b6000613f7d600f836149b8565b9150613f8882614f1f565b602082019050919050565b6000613fa06024836149b8565b9150613fab82614f48565b604082019050919050565b6000613fc36019836149b8565b9150613fce82614f97565b602082019050919050565b6000613fe66013836149b8565b9150613ff182614fc0565b602082019050919050565b6000614009600d836149b8565b915061401482614fe9565b602082019050919050565b600061402c601d836149b8565b915061403782615012565b602082019050919050565b600061404f602c836149b8565b915061405a8261503b565b604082019050919050565b60006140726038836149b8565b915061407d8261508a565b604082019050919050565b6000614095602a836149b8565b91506140a0826150d9565b604082019050919050565b60006140b86029836149b8565b91506140c382615128565b604082019050919050565b60006140db6020836149b8565b91506140e682615177565b602082019050919050565b60006140fe602c836149b8565b9150614109826151a0565b604082019050919050565b60006141216005836149c9565b915061412c826151ef565b600582019050919050565b60006141446020836149b8565b915061414f82615218565b602082019050919050565b6000614167602a836149b8565b915061417282615241565b604082019050919050565b600061418a6029836149b8565b915061419582615290565b604082019050919050565b60006141ad602f836149b8565b91506141b8826152df565b604082019050919050565b60006141d06021836149b8565b91506141db8261532e565b604082019050919050565b60006141f3601b836149b8565b91506141fe8261537d565b602082019050919050565b6000614216601b836149b8565b9150614221826153a6565b602082019050919050565b60006142396014836149b8565b9150614244826153cf565b602082019050919050565b600061425c6000836149ad565b9150614267826153f8565b600082019050919050565b600061427f6031836149b8565b915061428a826153fb565b604082019050919050565b60006142a26011836149b8565b91506142ad8261544a565b602082019050919050565b60006142c5602c836149b8565b91506142d082615473565b604082019050919050565b60006142e8600f836149b8565b91506142f3826154c2565b602082019050919050565b600061430b601c836149b8565b9150614316826154eb565b602082019050919050565b61432a81614b5d565b82525050565b61433981614b5d565b82525050565b600061434b8284613d2e565b60148201915081905092915050565b60006143668285613dc1565b6020820191506143768284613dc1565b6020820191508190509392505050565b60006143928285613e4a565b915061439e8284613e4a565b91506143a982614114565b91508190509392505050565b60006143c08261424f565b9150819050919050565b60006020820190506143df6000830184613d1f565b92915050565b60006080820190506143fa6000830187613d1f565b6144076020830186613d1f565b6144146040830185614330565b81810360608301526144268184613dd8565b905095945050505050565b6000602082019050818103600083015261444b8184613d45565b905092915050565b60006020820190506144686000830184613da3565b92915050565b60006020820190506144836000830184613db2565b92915050565b600060208201905081810360008301526144a38184613e11565b905092915050565b600060208201905081810360008301526144c481613e7b565b9050919050565b600060208201905081810360008301526144e481613e9e565b9050919050565b6000602082019050818103600083015261450481613ec1565b9050919050565b6000602082019050818103600083015261452481613ee4565b9050919050565b6000602082019050818103600083015261454481613f07565b9050919050565b6000602082019050818103600083015261456481613f2a565b9050919050565b6000602082019050818103600083015261458481613f4d565b9050919050565b600060208201905081810360008301526145a481613f70565b9050919050565b600060208201905081810360008301526145c481613f93565b9050919050565b600060208201905081810360008301526145e481613fb6565b9050919050565b6000602082019050818103600083015261460481613fd9565b9050919050565b6000602082019050818103600083015261462481613ffc565b9050919050565b600060208201905081810360008301526146448161401f565b9050919050565b6000602082019050818103600083015261466481614042565b9050919050565b6000602082019050818103600083015261468481614065565b9050919050565b600060208201905081810360008301526146a481614088565b9050919050565b600060208201905081810360008301526146c4816140ab565b9050919050565b600060208201905081810360008301526146e4816140ce565b9050919050565b60006020820190508181036000830152614704816140f1565b9050919050565b6000602082019050818103600083015261472481614137565b9050919050565b600060208201905081810360008301526147448161415a565b9050919050565b600060208201905081810360008301526147648161417d565b9050919050565b60006020820190508181036000830152614784816141a0565b9050919050565b600060208201905081810360008301526147a4816141c3565b9050919050565b600060208201905081810360008301526147c4816141e6565b9050919050565b600060208201905081810360008301526147e481614209565b9050919050565b600060208201905081810360008301526148048161422c565b9050919050565b6000602082019050818103600083015261482481614272565b9050919050565b6000602082019050818103600083015261484481614295565b9050919050565b60006020820190508181036000830152614864816142b8565b9050919050565b60006020820190508181036000830152614884816142db565b9050919050565b600060208201905081810360008301526148a4816142fe565b9050919050565b60006020820190506148c06000830184614330565b92915050565b60006148d06148e1565b90506148dc8282614bdb565b919050565b6000604051905090565b600067ffffffffffffffff82111561490657614905614d41565b5b61490f82614d70565b9050602081019050919050565b600067ffffffffffffffff82111561493757614936614d41565b5b61494082614d70565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006149df82614b5d565b91506149ea83614b5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a1f57614a1e614cb4565b5b828201905092915050565b6000614a3582614b5d565b9150614a4083614b5d565b925082614a5057614a4f614ce3565b5b828204905092915050565b6000614a6682614b5d565b9150614a7183614b5d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614aaa57614aa9614cb4565b5b828202905092915050565b6000614ac082614b5d565b9150614acb83614b5d565b925082821015614ade57614add614cb4565b5b828203905092915050565b6000614af482614b3d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b94578082015181840152602081019050614b79565b83811115614ba3576000848401525b50505050565b60006002820490506001821680614bc157607f821691505b60208210811415614bd557614bd4614d12565b5b50919050565b614be482614d70565b810181811067ffffffffffffffff82111715614c0357614c02614d41565b5b80604052505050565b6000614c1782614b5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c4a57614c49614cb4565b5b600182019050919050565b6000614c6082614c71565b9050919050565b6000819050919050565b6000614c7c82614d81565b9050919050565b6000614c8e82614b5d565b9150614c9983614b5d565b925082614ca957614ca8614ce3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f416d6f756e742049737375650000000000000000000000000000000000000000600082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f50726573616c65206f6e00000000000000000000000000000000000000000000600082015250565b7f436f6e7472616374207061757365640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6164647265737320302072657175657374656400000000000000000000000000600082015250565b7f50726573616c65206f7665722100000000000000000000000000000000000000600082015250565b7f4572726f7220696e2074686520616d6f756e7420726571756573746564000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520726571756573746564206d6f7265207468616e20746865207265736560008201527f7276656420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f52657175657374207375706572696f72206d617820537570706c790000000000600082015250565b7f42617365205552492068617320616c7265616479206265207365740000000000600082015250565b7f4e6f7420696e207468652077686974656c697374000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e737566696369656e742066756e6473000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f52657175657420746f6f206d75636820666f7220612077616c6c657400000000600082015250565b61551d81614ae9565b811461552857600080fd5b50565b61553481614afb565b811461553f57600080fd5b50565b61554b81614b07565b811461555657600080fd5b50565b61556281614b11565b811461556d57600080fd5b50565b61557981614b5d565b811461558457600080fd5b5056fea2646970667358221220d6c476ccbf970974c4fc7b6042d93dca95567a2daf47e6fd8009ae4ea8d3a2f864736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000060986843fe6e8153d9de43af36f13cd9592f6a85cb64b64c48c0fcef4e0c88a260000000000000000000000000c2da8367dff897190423f9ed91fa43735ed0931f00000000000000000000000000000000000000000000000000000000000000407066733a2f2f516d57633879326b6356346d3176315057544e506e675635325a3565344647706b314833366a716f4651517077382f68696464656e2e6a736f6e
-----Decoded View---------------
Arg [0] : hiddenURI (string): pfs://QmWc8y2kcV4m1v1PWTNPngV52Z5e4FGpk1H36jqoFQQpw8/hidden.json
Arg [1] : merkleRoot (bytes32): 0x986843fe6e8153d9de43af36f13cd9592f6a85cb64b64c48c0fcef4e0c88a260
Arg [2] : team (address): 0xc2DA8367DfF897190423F9ed91fa43735Ed0931f
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 986843fe6e8153d9de43af36f13cd9592f6a85cb64b64c48c0fcef4e0c88a260
Arg [2] : 000000000000000000000000c2da8367dff897190423f9ed91fa43735ed0931f
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [4] : 7066733a2f2f516d57633879326b6356346d3176315057544e506e675635325a
Arg [5] : 3565344647706b314833366a716f4651517077382f68696464656e2e6a736f6e
Deployed Bytecode Sourcemap
46752:8597:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40434:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53976:73;;;;;;;;;;;;;:::i;:::-;;53575:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27928:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29487:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29010:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47242:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41074:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47496:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46939:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47077:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30237:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51520:556;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40742:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46886:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53246:240;;;;;;;;;;;;;:::i;:::-;;30647:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41264:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54430:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27622:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47014:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47786:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47750:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27352:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6898:103;;;;;;;;;;;;;:::i;:::-;;47814:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50041:626;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6247:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28097:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29780:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49283:79;;;;;;;;;;;;;:::i;:::-;;49058:88;;;;;;;;;;;;;:::i;:::-;;50989:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30903:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54957:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52357:503;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54695:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50796:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47344:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30006:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49448:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7156:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47146:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40434:224;40536:4;40575:35;40560:50;;;:11;:50;;;;:90;;;;40614:36;40638:11;40614:23;:36::i;:::-;40560:90;40553:97;;40434:224;;;:::o;53976:73::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54037:4:::1;54025:9;;:16;;;;;;;;;;;;;;;;;;53976:73::o:0;53575:336::-;53630:14;53656:16;53675:17;53685:6;53675:9;:17::i;:::-;53656:36;;53703:22;53739:11;53728:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53703:48;;53777:6;53772:107;53793:11;53789:1;:15;53772:107;;;53838:29;53858:6;53865:1;53838:19;:29::i;:::-;53825:7;53833:1;53825:10;;;;;;;;;;;;;;;;;;;;;:42;;;;;53806:3;;;;;:::i;:::-;;;;53772:107;;;;53896:7;53889:14;;;;53575:336;;;:::o;27928:100::-;27982:13;28015:5;28008:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27928:100;:::o;29487:221::-;29563:7;29591:16;29599:7;29591;:16::i;:::-;29583:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29676:15;:24;29692:7;29676:24;;;;;;;;;;;;;;;;;;;;;29669:31;;29487:221;;;:::o;29010:411::-;29091:13;29107:23;29122:7;29107:14;:23::i;:::-;29091:39;;29155:5;29149:11;;:2;:11;;;;29141:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29249:5;29233:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29258:37;29275:5;29282:12;:10;:12::i;:::-;29258:16;:37::i;:::-;29233:62;29211:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29392:21;29401:2;29405:7;29392:8;:21::i;:::-;29010:411;;;:::o;47242:26::-;;;;;;;;;;;;;:::o;41074:113::-;41135:7;41162:10;:17;;;;41155:24;;41074:113;:::o;47496:31::-;;;;;;;;;;;;;:::o;46939:29::-;;;;:::o;47077:30::-;;;;:::o;30237:339::-;30432:41;30451:12;:10;:12::i;:::-;30465:7;30432:18;:41::i;:::-;30424:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30540:28;30550:4;30556:2;30560:7;30540:9;:28::i;:::-;30237:339;;;:::o;51520:556::-;51596:7;;;;;;;;;;;51595:8;51586:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;51645:8;;;;;;;;;;;51644:9;51635:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;51728:15;;51703:21;51713:10;51703:9;:21::i;:::-;51688:12;:36;;;;:::i;:::-;:55;;51679:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;51812:1;51797:12;:16;51788:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51912:9;;51899:10;;:22;;;;:::i;:::-;51882:13;:11;:13::i;:::-;51867:12;:28;;;;:::i;:::-;:54;;51858:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;51993:12;51986:6;;:19;;;;:::i;:::-;51973:9;:32;;51964:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;52038:22;52047:12;52038:8;:22::i;:::-;51520:556;:::o;40742:256::-;40839:7;40875:23;40892:5;40875:16;:23::i;:::-;40867:5;:31;40859:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40964:12;:19;40977:5;40964:19;;;;;;;;;;;;;;;:26;40984:5;40964:26;;;;;;;;;;;;40957:33;;40742:256;;;;:::o;46886:26::-;;;;:::o;53246:240::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53329:1:::1;53304:21;:26;;53296:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;53366:12;53384:5;;;;;;;;;;;:10;;53402:21;53384:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53365:64;;;53451:7;53443:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;6538:1;53246:240::o:0;30647:185::-;30785:39;30802:4;30808:2;30812:7;30785:39;;;;;;;;;;;;:16;:39::i;:::-;30647:185;;;:::o;41264:233::-;41339:7;41375:30;:28;:30::i;:::-;41367:5;:38;41359:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41472:10;41483:5;41472:17;;;;;;;;;;;;;;;;;;;;;;;;41465:24;;41264:233;;;:::o;54430:195::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54514:11:::1;;;;;;;;;;;54513:12;54504:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;54582:4;54568:11;;:18;;;;;;;;;;;;;;;;;;54607:10;54597:7;:20;;;;;;;;;;;;:::i;:::-;;54430:195:::0;:::o;27622:239::-;27694:7;27714:13;27730:7;:16;27738:7;27730:16;;;;;;;;;;;;;;;;;;;;;27714:32;;27782:1;27765:19;;:5;:19;;;;27757:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27848:5;27841:12;;;27622:239;;;:::o;47014:27::-;;;;:::o;47786:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47750:29::-;;;;;;;;;;;;;:::o;27352:208::-;27424:7;27469:1;27452:19;;:5;:19;;;;27444:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27536:9;:16;27546:5;27536:16;;;;;;;;;;;;;;;;27529:23;;27352:208;;;:::o;6898:103::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6963:30:::1;6990:1;6963:18;:30::i;:::-;6898:103::o:0;47814:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50041:626::-;50152:11;;48007:12;48049:10;48032:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;48022:39;;;;;;48007:54;;48080:50;48099:11;;48080:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48112:11;;48125:4;48080:18;:50::i;:::-;48072:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;50186:7:::1;;;;;;;;;;;50185:8;50176:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;50233:8;;;;;;;;;;;50224:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;50319:15;;50294:21;50304:10;50294:9;:21::i;:::-;50279:12;:36;;;;:::i;:::-;:55;;50270:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;50403:1;50388:12;:16;50379:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;50503:9;;50490:10;;:22;;;;:::i;:::-;50473:13;:11;:13::i;:::-;50458:12;:28;;;;:::i;:::-;:54;;50449:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;50584:12;50577:6;;:19;;;;:::i;:::-;50564:9;:32;;50555:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;50629:22;50638:12;50629:8;:22::i;:::-;50041:626:::0;;;;;;:::o;6247:87::-;6293:7;6320:6;;;;;;;;;;;6313:13;;6247:87;:::o;28097:104::-;28153:13;28186:7;28179:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28097:104;:::o;29780:155::-;29875:52;29894:12;:10;:12::i;:::-;29908:8;29918;29875:18;:52::i;:::-;29780:155;;:::o;49283:79::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49349:5:::1;49338:8;;:16;;;;;;;;;;;;;;;;;;49283:79::o:0;49058:88::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49131:7:::1;;;;;;;;;;;49130:8;49120:7;;:18;;;;;;;;;;;;;;;;;;49058:88::o:0;50989:126::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51089:17:::1;51071:15;:35;;;;50989:126:::0;:::o;30903:328::-;31078:41;31097:12;:10;:12::i;:::-;31111:7;31078:18;:41::i;:::-;31070:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31184:39;31198:4;31204:2;31208:7;31217:5;31184:13;:39::i;:::-;30903:328;;;;:::o;54957:385::-;55030:13;55060:16;55068:7;55060;:16::i;:::-;55052:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;55156:5;55143:18;;:9;;;;;;;;;;;:18;;;55140:57;;;55181:8;55174:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55140:57;55203:17;55223:10;:8;:10::i;:::-;55203:30;;55267:1;55253:3;55247:17;:21;:87;;;;;;;;;;;;;;;;;55295:3;55300:18;:7;:16;:18::i;:::-;55278:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55247:87;55240:94;;;54957:385;;;;:::o;52357:503::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52460:1:::1;52446:16;;:2;:16;;;;52437:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;52523:9;;52507:12;:25;;52498:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;52615:1;52600:12;:16;52591:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;52654:18;52675:13;:11;:13::i;:::-;52654:34;;52726:12;52714:9;;:24;;;;:::i;:::-;52702:9;:36;;;;52755:6;52750:96;52767:12;52763:1;:16;52750:96;;;52802:32;52812:2;52832:1;52816:13;:17;;;;:::i;:::-;52802:9;:32::i;:::-;52782:3;;;;;:::i;:::-;;;;52750:96;;;;6538:1;52357:503:::0;;:::o;54695:100::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54777:12:::1;54766:8;:23;;;;;;;;;;;;:::i;:::-;;54695:100:::0;:::o;50796:116::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50890:13:::1;50876:11;:27;;;;50796:116:::0;:::o;47344:27::-;;;;;;;;;;;;;:::o;30006:164::-;30103:4;30127:18;:25;30146:5;30127:25;;;;;;;;;;;;;;;:35;30153:8;30127:35;;;;;;;;;;;;;;;;;;;;;;;;;30120:42;;30006:164;;;;:::o;49448:94::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49526:8:::1;49517:6;:17;;;;49448:94:::0;:::o;7156:201::-;6478:12;:10;:12::i;:::-;6467:23;;:7;:5;:7::i;:::-;:23;;;6459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7265:1:::1;7245:22;;:8;:22;;;;7237:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7321:28;7340:8;7321:18;:28::i;:::-;7156:201:::0;:::o;47146:31::-;;;;:::o;8535:387::-;8595:4;8803:12;8870:7;8858:20;8850:28;;8913:1;8906:4;:8;8899:15;;;8535:387;;;:::o;39290:126::-;;;;:::o;26983:305::-;27085:4;27137:25;27122:40;;;:11;:40;;;;:105;;;;27194:33;27179:48;;;:11;:48;;;;27122:105;:158;;;;27244:36;27268:11;27244:23;:36::i;:::-;27122:158;27102:178;;26983:305;;;:::o;4971:98::-;5024:7;5051:10;5044:17;;4971:98;:::o;32741:127::-;32806:4;32858:1;32830:30;;:7;:16;32838:7;32830:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32823:37;;32741:127;;;:::o;36723:174::-;36825:2;36798:15;:24;36814:7;36798:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36881:7;36877:2;36843:46;;36852:23;36867:7;36852:14;:23::i;:::-;36843:46;;;;;;;;;;;;36723:174;;:::o;33035:348::-;33128:4;33153:16;33161:7;33153;:16::i;:::-;33145:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33229:13;33245:23;33260:7;33245:14;:23::i;:::-;33229:39;;33298:5;33287:16;;:7;:16;;;:51;;;;33331:7;33307:31;;:20;33319:7;33307:11;:20::i;:::-;:31;;;33287:51;:87;;;;33342:32;33359:5;33366:7;33342:16;:32::i;:::-;33287:87;33279:96;;;33035:348;;;;:::o;36027:578::-;36186:4;36159:31;;:23;36174:7;36159:14;:23::i;:::-;:31;;;36151:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36269:1;36255:16;;:2;:16;;;;36247:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36325:39;36346:4;36352:2;36356:7;36325:20;:39::i;:::-;36429:29;36446:1;36450:7;36429:8;:29::i;:::-;36490:1;36471:9;:15;36481:4;36471:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36519:1;36502:9;:13;36512:2;36502:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36550:2;36531:7;:16;36539:7;36531:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36589:7;36585:2;36570:27;;36579:4;36570:27;;;;;;;;;;;;36027:578;;;:::o;52944:228::-;53002:18;53023:13;:11;:13::i;:::-;53002:34;;53056:6;53051:105;53068:13;53064:1;:17;53051:105;;;53104:40;53114:10;53142:1;53126:13;:17;;;;:::i;:::-;53104:9;:40::i;:::-;53084:3;;;;;:::i;:::-;;;;53051:105;;;;52944:228;;:::o;7517:191::-;7591:16;7610:6;;;;;;;;;;;7591:25;;7636:8;7627:6;;:17;;;;;;;;;;;;;;;;;;7691:8;7660:40;;7681:8;7660:40;;;;;;;;;;;;7517:191;;:::o;908:190::-;1033:4;1086;1057:25;1070:5;1077:4;1057:12;:25::i;:::-;:33;1050:40;;908:190;;;;;:::o;37039:315::-;37194:8;37185:17;;:5;:17;;;;37177:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37281:8;37243:18;:25;37262:5;37243:25;;;;;;;;;;;;;;;:35;37269:8;37243:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37327:8;37305:41;;37320:5;37305:41;;;37337:8;37305:41;;;;;;:::i;:::-;;;;;;;;37039:315;;;:::o;32113:::-;32270:28;32280:4;32286:2;32290:7;32270:9;:28::i;:::-;32317:48;32340:4;32346:2;32350:7;32359:5;32317:22;:48::i;:::-;32309:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32113:315;;;;:::o;54132:104::-;54192:13;54221:7;54214:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54132:104;:::o;2533:723::-;2589:13;2819:1;2810:5;:10;2806:53;;;2837:10;;;;;;;;;;;;;;;;;;;;;2806:53;2869:12;2884:5;2869:20;;2900:14;2925:78;2940:1;2932:4;:9;2925:78;;2958:8;;;;;:::i;:::-;;;;2989:2;2981:10;;;;;:::i;:::-;;;2925:78;;;3013:19;3045:6;3035:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3013:39;;3063:154;3079:1;3070:5;:10;3063:154;;3107:1;3097:11;;;;;:::i;:::-;;;3174:2;3166:5;:10;;;;:::i;:::-;3153:2;:24;;;;:::i;:::-;3140:39;;3123:6;3130;3123:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;3203:2;3194:11;;;;;:::i;:::-;;;3063:154;;;3241:6;3227:21;;;;;2533:723;;;;:::o;33725:110::-;33801:26;33811:2;33815:7;33801:26;;;;;;;;;;;;:9;:26::i;:::-;33725:110;;:::o;18679:157::-;18764:4;18803:25;18788:40;;;:11;:40;;;;18781:47;;18679:157;;;:::o;42110:589::-;42254:45;42281:4;42287:2;42291:7;42254:26;:45::i;:::-;42332:1;42316:18;;:4;:18;;;42312:187;;;42351:40;42383:7;42351:31;:40::i;:::-;42312:187;;;42421:2;42413:10;;:4;:10;;;42409:90;;42440:47;42473:4;42479:7;42440:32;:47::i;:::-;42409:90;42312:187;42527:1;42513:16;;:2;:16;;;42509:183;;;42546:45;42583:7;42546:36;:45::i;:::-;42509:183;;;42619:4;42613:10;;:2;:10;;;42609:83;;42640:40;42668:2;42672:7;42640:27;:40::i;:::-;42609:83;42509:183;42110:589;;;:::o;1460:701::-;1543:7;1563:20;1586:4;1563:27;;1606:9;1601:523;1625:5;:12;1621:1;:16;1601:523;;;1659:20;1682:5;1688:1;1682:8;;;;;;;;;;;;;;;;;;;;;;1659:31;;1725:12;1709;:28;1705:408;;1879:12;1893;1862:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1852:55;;;;;;1837:70;;1705:408;;;2069:12;2083;2052:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2042:55;;;;;;2027:70;;1705:408;1601:523;1639:3;;;;;:::i;:::-;;;;1601:523;;;;2141:12;2134:19;;;1460:701;;;;:::o;37919:799::-;38074:4;38095:15;:2;:13;;;:15::i;:::-;38091:620;;;38147:2;38131:36;;;38168:12;:10;:12::i;:::-;38182:4;38188:7;38197:5;38131:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38127:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38390:1;38373:6;:13;:18;38369:272;;;38416:60;;;;;;;;;;:::i;:::-;;;;;;;;38369:272;38591:6;38585:13;38576:6;38572:2;38568:15;38561:38;38127:529;38264:41;;;38254:51;;;:6;:51;;;;38247:58;;;;;38091:620;38695:4;38688:11;;37919:799;;;;;;;:::o;34062:321::-;34192:18;34198:2;34202:7;34192:5;:18::i;:::-;34243:54;34274:1;34278:2;34282:7;34291:5;34243:22;:54::i;:::-;34221:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34062:321;;;:::o;43422:164::-;43526:10;:17;;;;43499:15;:24;43515:7;43499:24;;;;;;;;;;;:44;;;;43554:10;43570:7;43554:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43422:164;:::o;44213:988::-;44479:22;44529:1;44504:22;44521:4;44504:16;:22::i;:::-;:26;;;;:::i;:::-;44479:51;;44541:18;44562:17;:26;44580:7;44562:26;;;;;;;;;;;;44541:47;;44709:14;44695:10;:28;44691:328;;44740:19;44762:12;:18;44775:4;44762:18;;;;;;;;;;;;;;;:34;44781:14;44762:34;;;;;;;;;;;;44740:56;;44846:11;44813:12;:18;44826:4;44813:18;;;;;;;;;;;;;;;:30;44832:10;44813:30;;;;;;;;;;;:44;;;;44963:10;44930:17;:30;44948:11;44930:30;;;;;;;;;;;:43;;;;44691:328;;45115:17;:26;45133:7;45115:26;;;;;;;;;;;45108:33;;;45159:12;:18;45172:4;45159:18;;;;;;;;;;;;;;;:34;45178:14;45159:34;;;;;;;;;;;45152:41;;;44213:988;;;;:::o;45496:1079::-;45749:22;45794:1;45774:10;:17;;;;:21;;;;:::i;:::-;45749:46;;45806:18;45827:15;:24;45843:7;45827:24;;;;;;;;;;;;45806:45;;46178:19;46200:10;46211:14;46200:26;;;;;;;;;;;;;;;;;;;;;;;;46178:48;;46264:11;46239:10;46250;46239:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;46375:10;46344:15;:28;46360:11;46344:28;;;;;;;;;;;:41;;;;46516:15;:24;46532:7;46516:24;;;;;;;;;;;46509:31;;;46551:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45496:1079;;;;:::o;43000:221::-;43085:14;43102:20;43119:2;43102:16;:20::i;:::-;43085:37;;43160:7;43133:12;:16;43146:2;43133:16;;;;;;;;;;;;;;;:24;43150:6;43133:24;;;;;;;;;;;:34;;;;43207:6;43178:17;:26;43196:7;43178:26;;;;;;;;;;;:35;;;;43000:221;;;:::o;34719:382::-;34813:1;34799:16;;:2;:16;;;;34791:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34872:16;34880:7;34872;:16::i;:::-;34871:17;34863:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34934:45;34963:1;34967:2;34971:7;34934:20;:45::i;:::-;35009:1;34992:9;:13;35002:2;34992:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35040:2;35021:7;:16;35029:7;35021:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35085:7;35081:2;35060:33;;35077:1;35060:33;;;;;;;;;;;;34719:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;;;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:139::-;;1465:6;1452:20;1443:29;;1481:33;1508:5;1481:33;:::i;:::-;1433:87;;;;:::o;1526:137::-;;1609:6;1596:20;1587:29;;1625:32;1651:5;1625:32;:::i;:::-;1577:86;;;;:::o;1669:141::-;;1756:6;1750:13;1741:22;;1772:32;1798:5;1772:32;:::i;:::-;1731:79;;;;:::o;1829:271::-;;1933:3;1926:4;1918:6;1914:17;1910:27;1900:2;;1951:1;1948;1941:12;1900:2;1991:6;1978:20;2016:78;2090:3;2082:6;2075:4;2067:6;2063:17;2016:78;:::i;:::-;2007:87;;1890:210;;;;;:::o;2120:273::-;;2225:3;2218:4;2210:6;2206:17;2202:27;2192:2;;2243:1;2240;2233:12;2192:2;2283:6;2270:20;2308:79;2383:3;2375:6;2368:4;2360:6;2356:17;2308:79;:::i;:::-;2299:88;;2182:211;;;;;:::o;2399:139::-;;2483:6;2470:20;2461:29;;2499:33;2526:5;2499:33;:::i;:::-;2451:87;;;;:::o;2544:262::-;;2652:2;2640:9;2631:7;2627:23;2623:32;2620:2;;;2668:1;2665;2658:12;2620:2;2711:1;2736:53;2781:7;2772:6;2761:9;2757:22;2736:53;:::i;:::-;2726:63;;2682:117;2610:196;;;;:::o;2812:407::-;;;2937:2;2925:9;2916:7;2912:23;2908:32;2905:2;;;2953:1;2950;2943:12;2905:2;2996:1;3021:53;3066:7;3057:6;3046:9;3042:22;3021:53;:::i;:::-;3011:63;;2967:117;3123:2;3149:53;3194:7;3185:6;3174:9;3170:22;3149:53;:::i;:::-;3139:63;;3094:118;2895:324;;;;;:::o;3225:552::-;;;;3367:2;3355:9;3346:7;3342:23;3338:32;3335:2;;;3383:1;3380;3373:12;3335:2;3426:1;3451:53;3496:7;3487:6;3476:9;3472:22;3451:53;:::i;:::-;3441:63;;3397:117;3553:2;3579:53;3624:7;3615:6;3604:9;3600:22;3579:53;:::i;:::-;3569:63;;3524:118;3681:2;3707:53;3752:7;3743:6;3732:9;3728:22;3707:53;:::i;:::-;3697:63;;3652:118;3325:452;;;;;:::o;3783:809::-;;;;;3951:3;3939:9;3930:7;3926:23;3922:33;3919:2;;;3968:1;3965;3958:12;3919:2;4011:1;4036:53;4081:7;4072:6;4061:9;4057:22;4036:53;:::i;:::-;4026:63;;3982:117;4138:2;4164:53;4209:7;4200:6;4189:9;4185:22;4164:53;:::i;:::-;4154:63;;4109:118;4266:2;4292:53;4337:7;4328:6;4317:9;4313:22;4292:53;:::i;:::-;4282:63;;4237:118;4422:2;4411:9;4407:18;4394:32;4453:18;4445:6;4442:30;4439:2;;;4485:1;4482;4475:12;4439:2;4513:62;4567:7;4558:6;4547:9;4543:22;4513:62;:::i;:::-;4503:72;;4365:220;3909:683;;;;;;;:::o;4598:401::-;;;4720:2;4708:9;4699:7;4695:23;4691:32;4688:2;;;4736:1;4733;4726:12;4688:2;4779:1;4804:53;4849:7;4840:6;4829:9;4825:22;4804:53;:::i;:::-;4794:63;;4750:117;4906:2;4932:50;4974:7;4965:6;4954:9;4950:22;4932:50;:::i;:::-;4922:60;;4877:115;4678:321;;;;;:::o;5005:407::-;;;5130:2;5118:9;5109:7;5105:23;5101:32;5098:2;;;5146:1;5143;5136:12;5098:2;5189:1;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5160:117;5316:2;5342:53;5387:7;5378:6;5367:9;5363:22;5342:53;:::i;:::-;5332:63;;5287:118;5088:324;;;;;:::o;5418:262::-;;5526:2;5514:9;5505:7;5501:23;5497:32;5494:2;;;5542:1;5539;5532:12;5494:2;5585:1;5610:53;5655:7;5646:6;5635:9;5631:22;5610:53;:::i;:::-;5600:63;;5556:117;5484:196;;;;:::o;5686:260::-;;5793:2;5781:9;5772:7;5768:23;5764:32;5761:2;;;5809:1;5806;5799:12;5761:2;5852:1;5877:52;5921:7;5912:6;5901:9;5897:22;5877:52;:::i;:::-;5867:62;;5823:116;5751:195;;;;:::o;5952:282::-;;6070:2;6058:9;6049:7;6045:23;6041:32;6038:2;;;6086:1;6083;6076:12;6038:2;6129:1;6154:63;6209:7;6200:6;6189:9;6185:22;6154:63;:::i;:::-;6144:73;;6100:127;6028:206;;;;:::o;6240:375::-;;6358:2;6346:9;6337:7;6333:23;6329:32;6326:2;;;6374:1;6371;6364:12;6326:2;6445:1;6434:9;6430:17;6417:31;6475:18;6467:6;6464:30;6461:2;;;6507:1;6504;6497:12;6461:2;6535:63;6590:7;6581:6;6570:9;6566:22;6535:63;:::i;:::-;6525:73;;6388:220;6316:299;;;;:::o;6621:262::-;;6729:2;6717:9;6708:7;6704:23;6700:32;6697:2;;;6745:1;6742;6735:12;6697:2;6788:1;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6759:117;6687:196;;;;:::o;6889:570::-;;;;7049:2;7037:9;7028:7;7024:23;7020:32;7017:2;;;7065:1;7062;7055:12;7017:2;7108:1;7133:53;7178:7;7169:6;7158:9;7154:22;7133:53;:::i;:::-;7123:63;;7079:117;7263:2;7252:9;7248:18;7235:32;7294:18;7286:6;7283:30;7280:2;;;7326:1;7323;7316:12;7280:2;7362:80;7434:7;7425:6;7414:9;7410:22;7362:80;:::i;:::-;7344:98;;;;7206:246;7007:452;;;;;:::o;7465:179::-;;7555:46;7597:3;7589:6;7555:46;:::i;:::-;7633:4;7628:3;7624:14;7610:28;;7545:99;;;;:::o;7650:118::-;7737:24;7755:5;7737:24;:::i;:::-;7732:3;7725:37;7715:53;;:::o;7774:157::-;7879:45;7899:24;7917:5;7899:24;:::i;:::-;7879:45;:::i;:::-;7874:3;7867:58;7857:74;;:::o;7967:732::-;;8115:54;8163:5;8115:54;:::i;:::-;8185:86;8264:6;8259:3;8185:86;:::i;:::-;8178:93;;8295:56;8345:5;8295:56;:::i;:::-;8374:7;8405:1;8390:284;8415:6;8412:1;8409:13;8390:284;;;8491:6;8485:13;8518:63;8577:3;8562:13;8518:63;:::i;:::-;8511:70;;8604:60;8657:6;8604:60;:::i;:::-;8594:70;;8450:224;8437:1;8434;8430:9;8425:14;;8390:284;;;8394:14;8690:3;8683:10;;8091:608;;;;;;;:::o;8705:109::-;8786:21;8801:5;8786:21;:::i;:::-;8781:3;8774:34;8764:50;;:::o;8820:118::-;8907:24;8925:5;8907:24;:::i;:::-;8902:3;8895:37;8885:53;;:::o;8944:157::-;9049:45;9069:24;9087:5;9069:24;:::i;:::-;9049:45;:::i;:::-;9044:3;9037:58;9027:74;;:::o;9107:360::-;;9221:38;9253:5;9221:38;:::i;:::-;9275:70;9338:6;9333:3;9275:70;:::i;:::-;9268:77;;9354:52;9399:6;9394:3;9387:4;9380:5;9376:16;9354:52;:::i;:::-;9431:29;9453:6;9431:29;:::i;:::-;9426:3;9422:39;9415:46;;9197:270;;;;;:::o;9473:364::-;;9589:39;9622:5;9589:39;:::i;:::-;9644:71;9708:6;9703:3;9644:71;:::i;:::-;9637:78;;9724:52;9769:6;9764:3;9757:4;9750:5;9746:16;9724:52;:::i;:::-;9801:29;9823:6;9801:29;:::i;:::-;9796:3;9792:39;9785:46;;9565:272;;;;;:::o;9843:377::-;;9977:39;10010:5;9977:39;:::i;:::-;10032:89;10114:6;10109:3;10032:89;:::i;:::-;10025:96;;10130:52;10175:6;10170:3;10163:4;10156:5;10152:16;10130:52;:::i;:::-;10207:6;10202:3;10198:16;10191:23;;9953:267;;;;;:::o;10226:366::-;;10389:67;10453:2;10448:3;10389:67;:::i;:::-;10382:74;;10465:93;10554:3;10465:93;:::i;:::-;10583:2;10578:3;10574:12;10567:19;;10372:220;;;:::o;10598:366::-;;10761:67;10825:2;10820:3;10761:67;:::i;:::-;10754:74;;10837:93;10926:3;10837:93;:::i;:::-;10955:2;10950:3;10946:12;10939:19;;10744:220;;;:::o;10970:366::-;;11133:67;11197:2;11192:3;11133:67;:::i;:::-;11126:74;;11209:93;11298:3;11209:93;:::i;:::-;11327:2;11322:3;11318:12;11311:19;;11116:220;;;:::o;11342:366::-;;11505:67;11569:2;11564:3;11505:67;:::i;:::-;11498:74;;11581:93;11670:3;11581:93;:::i;:::-;11699:2;11694:3;11690:12;11683:19;;11488:220;;;:::o;11714:366::-;;11877:67;11941:2;11936:3;11877:67;:::i;:::-;11870:74;;11953:93;12042:3;11953:93;:::i;:::-;12071:2;12066:3;12062:12;12055:19;;11860:220;;;:::o;12086:366::-;;12249:67;12313:2;12308:3;12249:67;:::i;:::-;12242:74;;12325:93;12414:3;12325:93;:::i;:::-;12443:2;12438:3;12434:12;12427:19;;12232:220;;;:::o;12458:366::-;;12621:67;12685:2;12680:3;12621:67;:::i;:::-;12614:74;;12697:93;12786:3;12697:93;:::i;:::-;12815:2;12810:3;12806:12;12799:19;;12604:220;;;:::o;12830:366::-;;12993:67;13057:2;13052:3;12993:67;:::i;:::-;12986:74;;13069:93;13158:3;13069:93;:::i;:::-;13187:2;13182:3;13178:12;13171:19;;12976:220;;;:::o;13202:366::-;;13365:67;13429:2;13424:3;13365:67;:::i;:::-;13358:74;;13441:93;13530:3;13441:93;:::i;:::-;13559:2;13554:3;13550:12;13543:19;;13348:220;;;:::o;13574:366::-;;13737:67;13801:2;13796:3;13737:67;:::i;:::-;13730:74;;13813:93;13902:3;13813:93;:::i;:::-;13931:2;13926:3;13922:12;13915:19;;13720:220;;;:::o;13946:366::-;;14109:67;14173:2;14168:3;14109:67;:::i;:::-;14102:74;;14185:93;14274:3;14185:93;:::i;:::-;14303:2;14298:3;14294:12;14287:19;;14092:220;;;:::o;14318:366::-;;14481:67;14545:2;14540:3;14481:67;:::i;:::-;14474:74;;14557:93;14646:3;14557:93;:::i;:::-;14675:2;14670:3;14666:12;14659:19;;14464:220;;;:::o;14690:366::-;;14853:67;14917:2;14912:3;14853:67;:::i;:::-;14846:74;;14929:93;15018:3;14929:93;:::i;:::-;15047:2;15042:3;15038:12;15031:19;;14836:220;;;:::o;15062:366::-;;15225:67;15289:2;15284:3;15225:67;:::i;:::-;15218:74;;15301:93;15390:3;15301:93;:::i;:::-;15419:2;15414:3;15410:12;15403:19;;15208:220;;;:::o;15434:366::-;;15597:67;15661:2;15656:3;15597:67;:::i;:::-;15590:74;;15673:93;15762:3;15673:93;:::i;:::-;15791:2;15786:3;15782:12;15775:19;;15580:220;;;:::o;15806:366::-;;15969:67;16033:2;16028:3;15969:67;:::i;:::-;15962:74;;16045:93;16134:3;16045:93;:::i;:::-;16163:2;16158:3;16154:12;16147:19;;15952:220;;;:::o;16178:366::-;;16341:67;16405:2;16400:3;16341:67;:::i;:::-;16334:74;;16417:93;16506:3;16417:93;:::i;:::-;16535:2;16530:3;16526:12;16519:19;;16324:220;;;:::o;16550:366::-;;16713:67;16777:2;16772:3;16713:67;:::i;:::-;16706:74;;16789:93;16878:3;16789:93;:::i;:::-;16907:2;16902:3;16898:12;16891:19;;16696:220;;;:::o;16922:366::-;;17085:67;17149:2;17144:3;17085:67;:::i;:::-;17078:74;;17161:93;17250:3;17161:93;:::i;:::-;17279:2;17274:3;17270:12;17263:19;;17068:220;;;:::o;17294:400::-;;17475:84;17557:1;17552:3;17475:84;:::i;:::-;17468:91;;17568:93;17657:3;17568:93;:::i;:::-;17686:1;17681:3;17677:11;17670:18;;17458:236;;;:::o;17700:366::-;;17863:67;17927:2;17922:3;17863:67;:::i;:::-;17856:74;;17939:93;18028:3;17939:93;:::i;:::-;18057:2;18052:3;18048:12;18041:19;;17846:220;;;:::o;18072:366::-;;18235:67;18299:2;18294:3;18235:67;:::i;:::-;18228:74;;18311:93;18400:3;18311:93;:::i;:::-;18429:2;18424:3;18420:12;18413:19;;18218:220;;;:::o;18444:366::-;;18607:67;18671:2;18666:3;18607:67;:::i;:::-;18600:74;;18683:93;18772:3;18683:93;:::i;:::-;18801:2;18796:3;18792:12;18785:19;;18590:220;;;:::o;18816:366::-;;18979:67;19043:2;19038:3;18979:67;:::i;:::-;18972:74;;19055:93;19144:3;19055:93;:::i;:::-;19173:2;19168:3;19164:12;19157:19;;18962:220;;;:::o;19188:366::-;;19351:67;19415:2;19410:3;19351:67;:::i;:::-;19344:74;;19427:93;19516:3;19427:93;:::i;:::-;19545:2;19540:3;19536:12;19529:19;;19334:220;;;:::o;19560:366::-;;19723:67;19787:2;19782:3;19723:67;:::i;:::-;19716:74;;19799:93;19888:3;19799:93;:::i;:::-;19917:2;19912:3;19908:12;19901:19;;19706:220;;;:::o;19932:366::-;;20095:67;20159:2;20154:3;20095:67;:::i;:::-;20088:74;;20171:93;20260:3;20171:93;:::i;:::-;20289:2;20284:3;20280:12;20273:19;;20078:220;;;:::o;20304:366::-;;20467:67;20531:2;20526:3;20467:67;:::i;:::-;20460:74;;20543:93;20632:3;20543:93;:::i;:::-;20661:2;20656:3;20652:12;20645:19;;20450:220;;;:::o;20676:398::-;;20856:83;20937:1;20932:3;20856:83;:::i;:::-;20849:90;;20948:93;21037:3;20948:93;:::i;:::-;21066:1;21061:3;21057:11;21050:18;;20839:235;;;:::o;21080:366::-;;21243:67;21307:2;21302:3;21243:67;:::i;:::-;21236:74;;21319:93;21408:3;21319:93;:::i;:::-;21437:2;21432:3;21428:12;21421:19;;21226:220;;;:::o;21452:366::-;;21615:67;21679:2;21674:3;21615:67;:::i;:::-;21608:74;;21691:93;21780:3;21691:93;:::i;:::-;21809:2;21804:3;21800:12;21793:19;;21598:220;;;:::o;21824:366::-;;21987:67;22051:2;22046:3;21987:67;:::i;:::-;21980:74;;22063:93;22152:3;22063:93;:::i;:::-;22181:2;22176:3;22172:12;22165:19;;21970:220;;;:::o;22196:366::-;;22359:67;22423:2;22418:3;22359:67;:::i;:::-;22352:74;;22435:93;22524:3;22435:93;:::i;:::-;22553:2;22548:3;22544:12;22537:19;;22342:220;;;:::o;22568:366::-;;22731:67;22795:2;22790:3;22731:67;:::i;:::-;22724:74;;22807:93;22896:3;22807:93;:::i;:::-;22925:2;22920:3;22916:12;22909:19;;22714:220;;;:::o;22940:108::-;23017:24;23035:5;23017:24;:::i;:::-;23012:3;23005:37;22995:53;;:::o;23054:118::-;23141:24;23159:5;23141:24;:::i;:::-;23136:3;23129:37;23119:53;;:::o;23178:256::-;;23305:75;23376:3;23367:6;23305:75;:::i;:::-;23405:2;23400:3;23396:12;23389:19;;23425:3;23418:10;;23294:140;;;;:::o;23440:397::-;;23595:75;23666:3;23657:6;23595:75;:::i;:::-;23695:2;23690:3;23686:12;23679:19;;23708:75;23779:3;23770:6;23708:75;:::i;:::-;23808:2;23803:3;23799:12;23792:19;;23828:3;23821:10;;23584:253;;;;;:::o;23843:701::-;;24146:95;24237:3;24228:6;24146:95;:::i;:::-;24139:102;;24258:95;24349:3;24340:6;24258:95;:::i;:::-;24251:102;;24370:148;24514:3;24370:148;:::i;:::-;24363:155;;24535:3;24528:10;;24128:416;;;;;:::o;24550:379::-;;24756:147;24899:3;24756:147;:::i;:::-;24749:154;;24920:3;24913:10;;24738:191;;;:::o;24935:222::-;;25066:2;25055:9;25051:18;25043:26;;25079:71;25147:1;25136:9;25132:17;25123:6;25079:71;:::i;:::-;25033:124;;;;:::o;25163:640::-;;25396:3;25385:9;25381:19;25373:27;;25410:71;25478:1;25467:9;25463:17;25454:6;25410:71;:::i;:::-;25491:72;25559:2;25548:9;25544:18;25535:6;25491:72;:::i;:::-;25573;25641:2;25630:9;25626:18;25617:6;25573:72;:::i;:::-;25692:9;25686:4;25682:20;25677:2;25666:9;25662:18;25655:48;25720:76;25791:4;25782:6;25720:76;:::i;:::-;25712:84;;25363:440;;;;;;;:::o;25809:373::-;;25990:2;25979:9;25975:18;25967:26;;26039:9;26033:4;26029:20;26025:1;26014:9;26010:17;26003:47;26067:108;26170:4;26161:6;26067:108;:::i;:::-;26059:116;;25957:225;;;;:::o;26188:210::-;;26313:2;26302:9;26298:18;26290:26;;26326:65;26388:1;26377:9;26373:17;26364:6;26326:65;:::i;:::-;26280:118;;;;:::o;26404:222::-;;26535:2;26524:9;26520:18;26512:26;;26548:71;26616:1;26605:9;26601:17;26592:6;26548:71;:::i;:::-;26502:124;;;;:::o;26632:313::-;;26783:2;26772:9;26768:18;26760:26;;26832:9;26826:4;26822:20;26818:1;26807:9;26803:17;26796:47;26860:78;26933:4;26924:6;26860:78;:::i;:::-;26852:86;;26750:195;;;;:::o;26951:419::-;;27155:2;27144:9;27140:18;27132:26;;27204:9;27198:4;27194:20;27190:1;27179:9;27175:17;27168:47;27232:131;27358:4;27232:131;:::i;:::-;27224:139;;27122:248;;;:::o;27376:419::-;;27580:2;27569:9;27565:18;27557:26;;27629:9;27623:4;27619:20;27615:1;27604:9;27600:17;27593:47;27657:131;27783:4;27657:131;:::i;:::-;27649:139;;27547:248;;;:::o;27801:419::-;;28005:2;27994:9;27990:18;27982:26;;28054:9;28048:4;28044:20;28040:1;28029:9;28025:17;28018:47;28082:131;28208:4;28082:131;:::i;:::-;28074:139;;27972:248;;;:::o;28226:419::-;;28430:2;28419:9;28415:18;28407:26;;28479:9;28473:4;28469:20;28465:1;28454:9;28450:17;28443:47;28507:131;28633:4;28507:131;:::i;:::-;28499:139;;28397:248;;;:::o;28651:419::-;;28855:2;28844:9;28840:18;28832:26;;28904:9;28898:4;28894:20;28890:1;28879:9;28875:17;28868:47;28932:131;29058:4;28932:131;:::i;:::-;28924:139;;28822:248;;;:::o;29076:419::-;;29280:2;29269:9;29265:18;29257:26;;29329:9;29323:4;29319:20;29315:1;29304:9;29300:17;29293:47;29357:131;29483:4;29357:131;:::i;:::-;29349:139;;29247:248;;;:::o;29501:419::-;;29705:2;29694:9;29690:18;29682:26;;29754:9;29748:4;29744:20;29740:1;29729:9;29725:17;29718:47;29782:131;29908:4;29782:131;:::i;:::-;29774:139;;29672:248;;;:::o;29926:419::-;;30130:2;30119:9;30115:18;30107:26;;30179:9;30173:4;30169:20;30165:1;30154:9;30150:17;30143:47;30207:131;30333:4;30207:131;:::i;:::-;30199:139;;30097:248;;;:::o;30351:419::-;;30555:2;30544:9;30540:18;30532:26;;30604:9;30598:4;30594:20;30590:1;30579:9;30575:17;30568:47;30632:131;30758:4;30632:131;:::i;:::-;30624:139;;30522:248;;;:::o;30776:419::-;;30980:2;30969:9;30965:18;30957:26;;31029:9;31023:4;31019:20;31015:1;31004:9;31000:17;30993:47;31057:131;31183:4;31057:131;:::i;:::-;31049:139;;30947:248;;;:::o;31201:419::-;;31405:2;31394:9;31390:18;31382:26;;31454:9;31448:4;31444:20;31440:1;31429:9;31425:17;31418:47;31482:131;31608:4;31482:131;:::i;:::-;31474:139;;31372:248;;;:::o;31626:419::-;;31830:2;31819:9;31815:18;31807:26;;31879:9;31873:4;31869:20;31865:1;31854:9;31850:17;31843:47;31907:131;32033:4;31907:131;:::i;:::-;31899:139;;31797:248;;;:::o;32051:419::-;;32255:2;32244:9;32240:18;32232:26;;32304:9;32298:4;32294:20;32290:1;32279:9;32275:17;32268:47;32332:131;32458:4;32332:131;:::i;:::-;32324:139;;32222:248;;;:::o;32476:419::-;;32680:2;32669:9;32665:18;32657:26;;32729:9;32723:4;32719:20;32715:1;32704:9;32700:17;32693:47;32757:131;32883:4;32757:131;:::i;:::-;32749:139;;32647:248;;;:::o;32901:419::-;;33105:2;33094:9;33090:18;33082:26;;33154:9;33148:4;33144:20;33140:1;33129:9;33125:17;33118:47;33182:131;33308:4;33182:131;:::i;:::-;33174:139;;33072:248;;;:::o;33326:419::-;;33530:2;33519:9;33515:18;33507:26;;33579:9;33573:4;33569:20;33565:1;33554:9;33550:17;33543:47;33607:131;33733:4;33607:131;:::i;:::-;33599:139;;33497:248;;;:::o;33751:419::-;;33955:2;33944:9;33940:18;33932:26;;34004:9;33998:4;33994:20;33990:1;33979:9;33975:17;33968:47;34032:131;34158:4;34032:131;:::i;:::-;34024:139;;33922:248;;;:::o;34176:419::-;;34380:2;34369:9;34365:18;34357:26;;34429:9;34423:4;34419:20;34415:1;34404:9;34400:17;34393:47;34457:131;34583:4;34457:131;:::i;:::-;34449:139;;34347:248;;;:::o;34601:419::-;;34805:2;34794:9;34790:18;34782:26;;34854:9;34848:4;34844:20;34840:1;34829:9;34825:17;34818:47;34882:131;35008:4;34882:131;:::i;:::-;34874:139;;34772:248;;;:::o;35026:419::-;;35230:2;35219:9;35215:18;35207:26;;35279:9;35273:4;35269:20;35265:1;35254:9;35250:17;35243:47;35307:131;35433:4;35307:131;:::i;:::-;35299:139;;35197:248;;;:::o;35451:419::-;;35655:2;35644:9;35640:18;35632:26;;35704:9;35698:4;35694:20;35690:1;35679:9;35675:17;35668:47;35732:131;35858:4;35732:131;:::i;:::-;35724:139;;35622:248;;;:::o;35876:419::-;;36080:2;36069:9;36065:18;36057:26;;36129:9;36123:4;36119:20;36115:1;36104:9;36100:17;36093:47;36157:131;36283:4;36157:131;:::i;:::-;36149:139;;36047:248;;;:::o;36301:419::-;;36505:2;36494:9;36490:18;36482:26;;36554:9;36548:4;36544:20;36540:1;36529:9;36525:17;36518:47;36582:131;36708:4;36582:131;:::i;:::-;36574:139;;36472:248;;;:::o;36726:419::-;;36930:2;36919:9;36915:18;36907:26;;36979:9;36973:4;36969:20;36965:1;36954:9;36950:17;36943:47;37007:131;37133:4;37007:131;:::i;:::-;36999:139;;36897:248;;;:::o;37151:419::-;;37355:2;37344:9;37340:18;37332:26;;37404:9;37398:4;37394:20;37390:1;37379:9;37375:17;37368:47;37432:131;37558:4;37432:131;:::i;:::-;37424:139;;37322:248;;;:::o;37576:419::-;;37780:2;37769:9;37765:18;37757:26;;37829:9;37823:4;37819:20;37815:1;37804:9;37800:17;37793:47;37857:131;37983:4;37857:131;:::i;:::-;37849:139;;37747:248;;;:::o;38001:419::-;;38205:2;38194:9;38190:18;38182:26;;38254:9;38248:4;38244:20;38240:1;38229:9;38225:17;38218:47;38282:131;38408:4;38282:131;:::i;:::-;38274:139;;38172:248;;;:::o;38426:419::-;;38630:2;38619:9;38615:18;38607:26;;38679:9;38673:4;38669:20;38665:1;38654:9;38650:17;38643:47;38707:131;38833:4;38707:131;:::i;:::-;38699:139;;38597:248;;;:::o;38851:419::-;;39055:2;39044:9;39040:18;39032:26;;39104:9;39098:4;39094:20;39090:1;39079:9;39075:17;39068:47;39132:131;39258:4;39132:131;:::i;:::-;39124:139;;39022:248;;;:::o;39276:419::-;;39480:2;39469:9;39465:18;39457:26;;39529:9;39523:4;39519:20;39515:1;39504:9;39500:17;39493:47;39557:131;39683:4;39557:131;:::i;:::-;39549:139;;39447:248;;;:::o;39701:419::-;;39905:2;39894:9;39890:18;39882:26;;39954:9;39948:4;39944:20;39940:1;39929:9;39925:17;39918:47;39982:131;40108:4;39982:131;:::i;:::-;39974:139;;39872:248;;;:::o;40126:419::-;;40330:2;40319:9;40315:18;40307:26;;40379:9;40373:4;40369:20;40365:1;40354:9;40350:17;40343:47;40407:131;40533:4;40407:131;:::i;:::-;40399:139;;40297:248;;;:::o;40551:222::-;;40682:2;40671:9;40667:18;40659:26;;40695:71;40763:1;40752:9;40748:17;40739:6;40695:71;:::i;:::-;40649:124;;;;:::o;40779:129::-;;40840:20;;:::i;:::-;40830:30;;40869:33;40897:4;40889:6;40869:33;:::i;:::-;40820:88;;;:::o;40914:75::-;;40980:2;40974:9;40964:19;;40954:35;:::o;40995:307::-;;41146:18;41138:6;41135:30;41132:2;;;41168:18;;:::i;:::-;41132:2;41206:29;41228:6;41206:29;:::i;:::-;41198:37;;41290:4;41284;41280:15;41272:23;;41061:241;;;:::o;41308:308::-;;41460:18;41452:6;41449:30;41446:2;;;41482:18;;:::i;:::-;41446:2;41520:29;41542:6;41520:29;:::i;:::-;41512:37;;41604:4;41598;41594:15;41586:23;;41375:241;;;:::o;41622:132::-;;41712:3;41704:11;;41742:4;41737:3;41733:14;41725:22;;41694:60;;;:::o;41760:114::-;;41861:5;41855:12;41845:22;;41834:40;;;:::o;41880:98::-;;41965:5;41959:12;41949:22;;41938:40;;;:::o;41984:99::-;;42070:5;42064:12;42054:22;;42043:40;;;:::o;42089:113::-;;42191:4;42186:3;42182:14;42174:22;;42164:38;;;:::o;42208:184::-;;42341:6;42336:3;42329:19;42381:4;42376:3;42372:14;42357:29;;42319:73;;;;:::o;42398:168::-;;42515:6;42510:3;42503:19;42555:4;42550:3;42546:14;42531:29;;42493:73;;;;:::o;42572:147::-;;42710:3;42695:18;;42685:34;;;;:::o;42725:169::-;;42843:6;42838:3;42831:19;42883:4;42878:3;42874:14;42859:29;;42821:73;;;;:::o;42900:148::-;;43039:3;43024:18;;43014:34;;;;:::o;43054:305::-;;43113:20;43131:1;43113:20;:::i;:::-;43108:25;;43147:20;43165:1;43147:20;:::i;:::-;43142:25;;43301:1;43233:66;43229:74;43226:1;43223:81;43220:2;;;43307:18;;:::i;:::-;43220:2;43351:1;43348;43344:9;43337:16;;43098:261;;;;:::o;43365:185::-;;43422:20;43440:1;43422:20;:::i;:::-;43417:25;;43456:20;43474:1;43456:20;:::i;:::-;43451:25;;43495:1;43485:2;;43500:18;;:::i;:::-;43485:2;43542:1;43539;43535:9;43530:14;;43407:143;;;;:::o;43556:348::-;;43619:20;43637:1;43619:20;:::i;:::-;43614:25;;43653:20;43671:1;43653:20;:::i;:::-;43648:25;;43841:1;43773:66;43769:74;43766:1;43763:81;43758:1;43751:9;43744:17;43740:105;43737:2;;;43848:18;;:::i;:::-;43737:2;43896:1;43893;43889:9;43878:20;;43604:300;;;;:::o;43910:191::-;;43970:20;43988:1;43970:20;:::i;:::-;43965:25;;44004:20;44022:1;44004:20;:::i;:::-;43999:25;;44043:1;44040;44037:8;44034:2;;;44048:18;;:::i;:::-;44034:2;44093:1;44090;44086:9;44078:17;;43955:146;;;;:::o;44107:96::-;;44173:24;44191:5;44173:24;:::i;:::-;44162:35;;44152:51;;;:::o;44209:90::-;;44286:5;44279:13;44272:21;44261:32;;44251:48;;;:::o;44305:77::-;;44371:5;44360:16;;44350:32;;;:::o;44388:149::-;;44464:66;44457:5;44453:78;44442:89;;44432:105;;;:::o;44543:126::-;;44620:42;44613:5;44609:54;44598:65;;44588:81;;;:::o;44675:77::-;;44741:5;44730:16;;44720:32;;;:::o;44758:154::-;44842:6;44837:3;44832;44819:30;44904:1;44895:6;44890:3;44886:16;44879:27;44809:103;;;:::o;44918:307::-;44986:1;44996:113;45010:6;45007:1;45004:13;44996:113;;;45095:1;45090:3;45086:11;45080:18;45076:1;45071:3;45067:11;45060:39;45032:2;45029:1;45025:10;45020:15;;44996:113;;;45127:6;45124:1;45121:13;45118:2;;;45207:1;45198:6;45193:3;45189:16;45182:27;45118:2;44967:258;;;;:::o;45231:320::-;;45312:1;45306:4;45302:12;45292:22;;45359:1;45353:4;45349:12;45380:18;45370:2;;45436:4;45428:6;45424:17;45414:27;;45370:2;45498;45490:6;45487:14;45467:18;45464:38;45461:2;;;45517:18;;:::i;:::-;45461:2;45282:269;;;;:::o;45557:281::-;45640:27;45662:4;45640:27;:::i;:::-;45632:6;45628:40;45770:6;45758:10;45755:22;45734:18;45722:10;45719:34;45716:62;45713:2;;;45781:18;;:::i;:::-;45713:2;45821:10;45817:2;45810:22;45600:238;;;:::o;45844:233::-;;45906:24;45924:5;45906:24;:::i;:::-;45897:33;;45952:66;45945:5;45942:77;45939:2;;;46022:18;;:::i;:::-;45939:2;46069:1;46062:5;46058:13;46051:20;;45887:190;;;:::o;46083:100::-;;46151:26;46171:5;46151:26;:::i;:::-;46140:37;;46130:53;;;:::o;46189:79::-;;46257:5;46246:16;;46236:32;;;:::o;46274:94::-;;46342:20;46356:5;46342:20;:::i;:::-;46331:31;;46321:47;;;:::o;46374:176::-;;46423:20;46441:1;46423:20;:::i;:::-;46418:25;;46457:20;46475:1;46457:20;:::i;:::-;46452:25;;46496:1;46486:2;;46501:18;;:::i;:::-;46486:2;46542:1;46539;46535:9;46530:14;;46408:142;;;;:::o;46556:180::-;46604:77;46601:1;46594:88;46701:4;46698:1;46691:15;46725:4;46722:1;46715:15;46742:180;46790:77;46787:1;46780:88;46887:4;46884:1;46877:15;46911:4;46908:1;46901:15;46928:180;46976:77;46973:1;46966:88;47073:4;47070:1;47063:15;47097:4;47094:1;47087:15;47114:180;47162:77;47159:1;47152:88;47259:4;47256:1;47249:15;47283:4;47280:1;47273:15;47300:102;;47392:2;47388:7;47383:2;47376:5;47372:14;47368:28;47358:38;;47348:54;;;:::o;47408:94::-;;47489:5;47485:2;47481:14;47460:35;;47450:52;;;:::o;47508:162::-;47648:14;47644:1;47636:6;47632:14;47625:38;47614:56;:::o;47676:169::-;47816:21;47812:1;47804:6;47800:14;47793:45;47782:63;:::o;47851:230::-;47991:34;47987:1;47979:6;47975:14;47968:58;48060:13;48055:2;48047:6;48043:15;48036:38;47957:124;:::o;48087:237::-;48227:34;48223:1;48215:6;48211:14;48204:58;48296:20;48291:2;48283:6;48279:15;48272:45;48193:131;:::o;48330:225::-;48470:34;48466:1;48458:6;48454:14;48447:58;48539:8;48534:2;48526:6;48522:15;48515:33;48436:119;:::o;48561:178::-;48701:30;48697:1;48689:6;48685:14;48678:54;48667:72;:::o;48745:160::-;48885:12;48881:1;48873:6;48869:14;48862:36;48851:54;:::o;48911:165::-;49051:17;49047:1;49039:6;49035:14;49028:41;49017:59;:::o;49082:223::-;49222:34;49218:1;49210:6;49206:14;49199:58;49291:6;49286:2;49278:6;49274:15;49267:31;49188:117;:::o;49311:175::-;49451:27;49447:1;49439:6;49435:14;49428:51;49417:69;:::o;49492:169::-;49632:21;49628:1;49620:6;49616:14;49609:45;49598:63;:::o;49667:163::-;49807:15;49803:1;49795:6;49791:14;49784:39;49773:57;:::o;49836:179::-;49976:31;49972:1;49964:6;49960:14;49953:55;49942:73;:::o;50021:231::-;50161:34;50157:1;50149:6;50145:14;50138:58;50230:14;50225:2;50217:6;50213:15;50206:39;50127:125;:::o;50258:243::-;50398:34;50394:1;50386:6;50382:14;50375:58;50467:26;50462:2;50454:6;50450:15;50443:51;50364:137;:::o;50507:229::-;50647:34;50643:1;50635:6;50631:14;50624:58;50716:12;50711:2;50703:6;50699:15;50692:37;50613:123;:::o;50742:228::-;50882:34;50878:1;50870:6;50866:14;50859:58;50951:11;50946:2;50938:6;50934:15;50927:36;50848:122;:::o;50976:182::-;51116:34;51112:1;51104:6;51100:14;51093:58;51082:76;:::o;51164:231::-;51304:34;51300:1;51292:6;51288:14;51281:58;51373:14;51368:2;51360:6;51356:15;51349:39;51270:125;:::o;51401:155::-;51541:7;51537:1;51529:6;51525:14;51518:31;51507:49;:::o;51562:182::-;51702:34;51698:1;51690:6;51686:14;51679:58;51668:76;:::o;51750:229::-;51890:34;51886:1;51878:6;51874:14;51867:58;51959:12;51954:2;51946:6;51942:15;51935:37;51856:123;:::o;51985:228::-;52125:34;52121:1;52113:6;52109:14;52102:58;52194:11;52189:2;52181:6;52177:15;52170:36;52091:122;:::o;52219:234::-;52359:34;52355:1;52347:6;52343:14;52336:58;52428:17;52423:2;52415:6;52411:15;52404:42;52325:128;:::o;52459:220::-;52599:34;52595:1;52587:6;52583:14;52576:58;52668:3;52663:2;52655:6;52651:15;52644:28;52565:114;:::o;52685:177::-;52825:29;52821:1;52813:6;52809:14;52802:53;52791:71;:::o;52868:177::-;53008:29;53004:1;52996:6;52992:14;52985:53;52974:71;:::o;53051:170::-;53191:22;53187:1;53179:6;53175:14;53168:46;53157:64;:::o;53227:114::-;53333:8;:::o;53347:236::-;53487:34;53483:1;53475:6;53471:14;53464:58;53556:19;53551:2;53543:6;53539:15;53532:44;53453:130;:::o;53589:167::-;53729:19;53725:1;53717:6;53713:14;53706:43;53695:61;:::o;53762:231::-;53902:34;53898:1;53890:6;53886:14;53879:58;53971:14;53966:2;53958:6;53954:15;53947:39;53868:125;:::o;53999:165::-;54139:17;54135:1;54127:6;54123:14;54116:41;54105:59;:::o;54170:178::-;54310:30;54306:1;54298:6;54294:14;54287:54;54276:72;:::o;54354:122::-;54427:24;54445:5;54427:24;:::i;:::-;54420:5;54417:35;54407:2;;54466:1;54463;54456:12;54407:2;54397:79;:::o;54482:116::-;54552:21;54567:5;54552:21;:::i;:::-;54545:5;54542:32;54532:2;;54588:1;54585;54578:12;54532:2;54522:76;:::o;54604:122::-;54677:24;54695:5;54677:24;:::i;:::-;54670:5;54667:35;54657:2;;54716:1;54713;54706:12;54657:2;54647:79;:::o;54732:120::-;54804:23;54821:5;54804:23;:::i;:::-;54797:5;54794:34;54784:2;;54842:1;54839;54832:12;54784:2;54774:78;:::o;54858:122::-;54931:24;54949:5;54931:24;:::i;:::-;54924:5;54921:35;54911:2;;54970:1;54967;54960:12;54911:2;54901:79;:::o
Swarm Source
ipfs://d6c476ccbf970974c4fc7b6042d93dca95567a2daf47e6fd8009ae4ea8d3a2f8
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.