ERC-721
Overview
Max Total Supply
0 HPNTK
Holders
94
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 HPNTKLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Hypnotica
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "./ERC721.sol"; import "./ERC721URIStorage.sol"; import "./Ownable.sol"; import "./Counters.sol"; import "./SafeMath.sol"; /* * ▄▄ ▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄ ▄▄ ▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ * █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ * █ █▄█ █ █▄█ █ ▄ █ █▄█ █ ▄ █▄ ▄█ █ █ ▄ █ * █ █ █ █▄█ █ █ █ █ █ █ █ █ █ ▄▄█ █▄█ █ * █ ▄ █▄ ▄█ ▄▄▄█ ▄ █ █▄█ █ █ █ █ █ █ █ █ * █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █▄▄█ ▄ █ * █▄▄█ █▄▄█ █▄▄▄█ █▄▄▄█ █▄█ █▄▄█▄▄▄▄▄▄▄█ █▄▄▄█ █▄▄▄█▄▄▄▄▄▄▄█▄▄█ █▄▄█ */ contract Hypnotica is ERC721, ERC721URIStorage, Ownable { using SafeMath for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; string baseURI; string private spp; uint256 public constant PRICE = 0.05 ether; uint256 public constant WHITELIST_PRICE = 0.03 ether; uint256 public constant START_AT = 1; uint256 public constant MAX_ELEMENTS = 2048; uint256 public constant MAX_PER_TRANSACTION = 10; uint256 public constant MAX_PRESALE_ELEMENTS = 400; uint256 public constant MAX_PER_WHITELIST_TRANSACTION = 5; uint256 public constant MAX_PRESALE_AMOUNT_WALLET = 5; bool private IS_PAUSED = true; bool public ONLY_WHITELISTED = true; constructor(string memory baseTokenURI, string memory _spp) ERC721("Hypnotica", "HPNTK") { setBaseURI(baseTokenURI); setSpp(_spp); } function setBaseURI(string memory baseURI_) public onlyOwner { baseURI = baseURI_; } function setSpp(string memory _spp) public onlyOwner { spp = _spp; } // ENABLE/DISABLE PRESALE function setOnlyWhitelisted(bool _state) public onlyOwner { ONLY_WHITELISTED = _state; } // DETECT IF SALE IS OPEN - BOOL RETURN modifier isSaleOpen { require(totalToken() <= MAX_ELEMENTS, "Soldout!"); require(!IS_PAUSED, "Sales not open"); _; } // Get current amount of minted (= the current id) function totalToken() public view returns (uint256) { return _tokenIdCounter.current(); } function setPause(bool _pause) public onlyOwner{ IS_PAUSED = _pause; } function totalPrice(uint256 _amount, uint256 _price) public pure returns (uint256) { return _price.mul(_amount); } // MINTING function mint(uint256 _amount, string memory _spp) public payable isSaleOpen{ address wallet = msg.sender; uint256 total = totalToken(); // get total token uint256 currentPrice = ONLY_WHITELISTED ? WHITELIST_PRICE : PRICE; uint256 maxPerTransation = ONLY_WHITELISTED ? MAX_PER_WHITELIST_TRANSACTION : MAX_PER_TRANSACTION; uint256 overAllLimit = ONLY_WHITELISTED ? MAX_PRESALE_ELEMENTS : MAX_ELEMENTS; if(ONLY_WHITELISTED){ require(checkSpp(_spp), "Not whitelisted"); require(balanceOf(wallet) + _amount <= MAX_PRESALE_AMOUNT_WALLET, "Too many in wallet"); } require(_amount <= maxPerTransation, "Exceeds per transaction"); require(total + _amount <= overAllLimit, "Global overlimit"); require(msg.value >= totalPrice(_amount, currentPrice), "Value below price"); for(uint8 i = 0; i < _amount; i++){ safeMint(wallet); } } function safeMint(address to) private { _tokenIdCounter.increment(); _safeMint(to, _tokenIdCounter.current()); } // WITHDRAW function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success, 'Withdraw failed'); } // CHECK SPP function checkSpp(string memory _spp) private view returns (bool) { return (keccak256(abi.encodePacked((spp))) == keccak256(abi.encodePacked((_spp)))); } function _baseURI() internal view override returns (string memory) { return baseURI; } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return string(abi.encodePacked(super.tokenURI(tokenId),".json")); } }
// SPDX-License-Identifier: MIT 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); } } } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"},{"internalType":"string","name":"_spp","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TRANSACTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WHITELIST_TRANSACTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE_AMOUNT_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONLY_WHITELISTED","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":"START_AT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"string","name":"_spp","type":"string"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_spp","type":"string"}],"name":"setSpp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"totalPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b50604051620048a7380380620048a783398181016040528101906200006d9190620004d3565b6040518060400160405280600981526020017f4879706e6f7469636100000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f48504e544b0000000000000000000000000000000000000000000000000000008152508160009080519060200190620000f1929190620003a5565b5080600190805190602001906200010a929190620003a5565b5050506200012d620001216200015760201b60201c565b6200015f60201b60201c565b6200013e826200022560201b60201c565b6200014f81620002d060201b60201c565b50506200075f565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002356200015760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025b6200037b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ab906200057f565b60405180910390fd5b8060099080519060200190620002cc929190620003a5565b5050565b620002e06200015760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003066200037b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200035f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000356906200057f565b60405180910390fd5b80600a908051906020019062000377929190620003a5565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003b39062000647565b90600052602060002090601f016020900481019282620003d7576000855562000423565b82601f10620003f257805160ff191683800117855562000423565b8280016001018555821562000423579182015b828111156200042257825182559160200191906001019062000405565b5b50905062000432919062000436565b5090565b5b808211156200045157600081600090555060010162000437565b5090565b60006200046c6200046684620005ca565b620005a1565b9050828152602081018484840111156200048b576200048a62000716565b5b6200049884828562000611565b509392505050565b600082601f830112620004b857620004b762000711565b5b8151620004ca84826020860162000455565b91505092915050565b60008060408385031215620004ed57620004ec62000720565b5b600083015167ffffffffffffffff8111156200050e576200050d6200071b565b5b6200051c85828601620004a0565b925050602083015167ffffffffffffffff81111562000540576200053f6200071b565b5b6200054e85828601620004a0565b9150509250929050565b60006200056760208362000600565b9150620005748262000736565b602082019050919050565b600060208201905081810360008301526200059a8162000558565b9050919050565b6000620005ad620005c0565b9050620005bb82826200067d565b919050565b6000604051905090565b600067ffffffffffffffff821115620005e857620005e7620006e2565b5b620005f38262000725565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200063157808201518184015260208101905062000614565b8381111562000641576000848401525b50505050565b600060028204905060018216806200066057607f821691505b60208210811415620006775762000676620006b3565b5b50919050565b620006888262000725565b810181811067ffffffffffffffff82111715620006aa57620006a9620006e2565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614138806200076f6000396000f3fe6080604052600436106101ee5760003560e01c80636fa224651161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd146106ad578063cb14eb87146106ea578063e985e9c514610715578063f0966d7814610752578063f2fde38b1461077b576101ee565b8063a22cb46514610607578063b88d4fde14610630578063bedb86fb14610659578063bf7b766d14610682576101ee565b806377097fc8116100dc57806377097fc81461056a5780638d859f3e146105865780638da5cb5b146105b157806395d89b41146105dc576101ee565b80636fa22465146104c057806370a08231146104eb578063715018a614610528578063763049261461053f576101ee565b80633c952764116101855780634e6af95e116101545780634e6af95e146103f257806355f804b31461042f578063626be567146104585780636352211e14610483576101ee565b80633c9527641461036b5780633ccfd60b1461039457806342842e0e1461039e57806342f44b4e146103c7576101ee565b806317e7f295116101c157806317e7f295146102c157806323b872dd146102ec57806329b71f8f146103155780633502a71614610340576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612ade565b6107a4565b604051610227919061323a565b60405180910390f35b34801561023c57600080fd5b50610245610886565b6040516102529190613255565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612b81565b610918565b60405161028f91906131d3565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612a71565b61099d565b005b3480156102cd57600080fd5b506102d6610ab5565b6040516102e39190613597565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e919061295b565b610ac0565b005b34801561032157600080fd5b5061032a610b20565b6040516103379190613597565b60405180910390f35b34801561034c57600080fd5b50610355610b25565b6040516103629190613597565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612ab1565b610b2b565b005b61039c610bc4565b005b3480156103aa57600080fd5b506103c560048036038101906103c0919061295b565b610cef565b005b3480156103d357600080fd5b506103dc610d0f565b6040516103e99190613597565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612c0a565b610d15565b6040516104269190613597565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612b38565b610d32565b005b34801561046457600080fd5b5061046d610dc8565b60405161047a9190613597565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190612b81565b610dd9565b6040516104b791906131d3565b60405180910390f35b3480156104cc57600080fd5b506104d5610e8b565b6040516104e29190613597565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d91906128ee565b610e90565b60405161051f9190613597565b60405180910390f35b34801561053457600080fd5b5061053d610f48565b005b34801561054b57600080fd5b50610554610fd0565b604051610561919061323a565b60405180910390f35b610584600480360381019061057f9190612bae565b610fe3565b005b34801561059257600080fd5b5061059b6112ca565b6040516105a89190613597565b60405180910390f35b3480156105bd57600080fd5b506105c66112d5565b6040516105d391906131d3565b60405180910390f35b3480156105e857600080fd5b506105f16112ff565b6040516105fe9190613255565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190612a31565b611391565b005b34801561063c57600080fd5b50610657600480360381019061065291906129ae565b611512565b005b34801561066557600080fd5b50610680600480360381019061067b9190612ab1565b611574565b005b34801561068e57600080fd5b5061069761160d565b6040516106a49190613597565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190612b81565b611612565b6040516106e19190613255565b60405180910390f35b3480156106f657600080fd5b506106ff611643565b60405161070c9190613597565b60405180910390f35b34801561072157600080fd5b5061073c6004803603810190610737919061291b565b611648565b604051610749919061323a565b60405180910390f35b34801561075e57600080fd5b5061077960048036038101906107749190612b38565b6116dc565b005b34801561078757600080fd5b506107a2600480360381019061079d91906128ee565b611772565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087f575061087e8261186a565b5b9050919050565b60606000805461089590613874565b80601f01602080910402602001604051908101604052809291908181526020018280546108c190613874565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b5050505050905090565b6000610923826118d4565b610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990613457565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109a882610dd9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906134f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a38611940565b73ffffffffffffffffffffffffffffffffffffffff161480610a675750610a6681610a61611940565b611648565b5b610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90613377565b60405180910390fd5b610ab08383611948565b505050565b666a94d74f43000081565b610ad1610acb611940565b82611a01565b610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0790613537565b60405180910390fd5b610b1b838383611adf565b505050565b600581565b61080081565b610b33611940565b73ffffffffffffffffffffffffffffffffffffffff16610b516112d5565b73ffffffffffffffffffffffffffffffffffffffff1614610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613477565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b610bcc611940565b73ffffffffffffffffffffffffffffffffffffffff16610bea6112d5565b73ffffffffffffffffffffffffffffffffffffffff1614610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790613477565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610c66906131be565b60006040518083038185875af1925050503d8060008114610ca3576040519150601f19603f3d011682016040523d82523d6000602084013e610ca8565b606091505b5050905080610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce3906132f7565b60405180910390fd5b50565b610d0a83838360405180602001604052806000815250611512565b505050565b61019081565b6000610d2a8383611d3b90919063ffffffff16565b905092915050565b610d3a611940565b73ffffffffffffffffffffffffffffffffffffffff16610d586112d5565b73ffffffffffffffffffffffffffffffffffffffff1614610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613477565b60405180910390fd5b8060099080519060200190610dc4929190612702565b5050565b6000610dd46008611d51565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e79906133d7565b60405180910390fd5b80915050919050565b600581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef8906133b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f50611940565b73ffffffffffffffffffffffffffffffffffffffff16610f6e6112d5565b73ffffffffffffffffffffffffffffffffffffffff1614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb90613477565b60405180910390fd5b610fce6000611d5f565b565b600b60019054906101000a900460ff1681565b610800610fee610dc8565b111561102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102690613577565b60405180910390fd5b600b60009054906101000a900460ff161561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107690613517565b60405180910390fd5b6000339050600061108e610dc8565b90506000600b60019054906101000a900460ff166110b35766b1a2bc2ec500006110bc565b666a94d74f4300005b90506000600b60019054906101000a900460ff166110db57600a6110de565b60055b90506000600b60019054906101000a900460ff166110fe57610800611102565b6101905b9050600b60019054906101000a900460ff16156111b95761112286611e25565b611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613397565b60405180910390fd5b60058761116d87610e90565b611177919061369c565b11156111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af906133f7565b60405180910390fd5b5b818711156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390613297565b60405180910390fd5b808785611209919061369c565b111561124a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124190613557565b60405180910390fd5b6112548784610d15565b341015611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d906134d7565b60405180910390fd5b60005b878160ff1610156112c0576112ad86611e7e565b80806112b890613920565b915050611299565b5050505050505050565b66b1a2bc2ec5000081565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461130e90613874565b80601f016020809104026020016040519081016040528092919081815260200182805461133a90613874565b80156113875780601f1061135c57610100808354040283529160200191611387565b820191906000526020600020905b81548152906001019060200180831161136a57829003601f168201915b5050505050905090565b611399611940565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90613337565b60405180910390fd5b8060056000611414611940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114c1611940565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611506919061323a565b60405180910390a35050565b61152361151d611940565b83611a01565b611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990613537565b60405180910390fd5b61156e84848484611e9e565b50505050565b61157c611940565b73ffffffffffffffffffffffffffffffffffffffff1661159a6112d5565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790613477565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600181565b606061161d82611efa565b60405160200161162d9190613185565b6040516020818303038152906040529050919050565b600a81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116e4611940565b73ffffffffffffffffffffffffffffffffffffffff166117026112d5565b73ffffffffffffffffffffffffffffffffffffffff1614611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613477565b60405180910390fd5b80600a908051906020019061176e929190612702565b5050565b61177a611940565b73ffffffffffffffffffffffffffffffffffffffff166117986112d5565b73ffffffffffffffffffffffffffffffffffffffff16146117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613477565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561185e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611855906132b7565b60405180910390fd5b61186781611d5f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119bb83610dd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a0c826118d4565b611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290613357565b60405180910390fd5b6000611a5683610dd9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ac557508373ffffffffffffffffffffffffffffffffffffffff16611aad84610918565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ad65750611ad58185611648565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aff82610dd9565b73ffffffffffffffffffffffffffffffffffffffff1614611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c90613497565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90613317565b60405180910390fd5b611bd083838361204c565b611bdb600082611948565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2b919061377d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c82919061369c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183611d499190613723565b905092915050565b600081600001549050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001611e38919061314a565b60405160208183030381529060405280519060200120600a604051602001611e6091906131a7565b60405160208183030381529060405280519060200120149050919050565b611e88600861205c565b611e9b81611e966008611d51565b612072565b50565b611ea9848484611adf565b611eb584848484612090565b611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb90613277565b60405180910390fd5b50505050565b6060611f05826118d4565b611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613437565b60405180910390fd5b6000600660008481526020019081526020016000208054611f6490613874565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9090613874565b8015611fdd5780601f10611fb257610100808354040283529160200191611fdd565b820191906000526020600020905b815481529060010190602001808311611fc057829003601f168201915b505050505090506000611fee612227565b9050600081511415612004578192505050612047565b600082511115612039578082604051602001612021929190613161565b60405160208183030381529060405292505050612047565b612042846122b9565b925050505b919050565b612057838383612360565b505050565b6001816000016000828254019250508190555050565b61208c828260405180602001604052806000815250612365565b5050565b60006120b18473ffffffffffffffffffffffffffffffffffffffff166123c0565b1561221a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120da611940565b8786866040518563ffffffff1660e01b81526004016120fc94939291906131ee565b602060405180830381600087803b15801561211657600080fd5b505af192505050801561214757506040513d601f19601f820116820180604052508101906121449190612b0b565b60015b6121ca573d8060008114612177576040519150601f19603f3d011682016040523d82523d6000602084013e61217c565b606091505b506000815114156121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b990613277565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061221f565b600190505b949350505050565b60606009805461223690613874565b80601f016020809104026020016040519081016040528092919081815260200182805461226290613874565b80156122af5780601f10612284576101008083540402835291602001916122af565b820191906000526020600020905b81548152906001019060200180831161229257829003601f168201915b5050505050905090565b60606122c4826118d4565b612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa906134b7565b60405180910390fd5b600061230d612227565b9050600081511161232d5760405180602001604052806000815250612358565b80612337846123d3565b604051602001612348929190613161565b6040516020818303038152906040525b915050919050565b505050565b61236f8383612534565b61237c6000848484612090565b6123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290613277565b60405180910390fd5b505050565b600080823b905060008111915050919050565b6060600082141561241b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061252f565b600082905060005b6000821461244d578080612436906138d7565b915050600a8261244691906136f2565b9150612423565b60008167ffffffffffffffff81111561246957612468613a37565b5b6040519080825280601f01601f19166020018201604052801561249b5781602001600182028036833780820191505090505b5090505b60008514612528576001826124b4919061377d565b9150600a856124c3919061394a565b60306124cf919061369c565b60f81b8183815181106124e5576124e4613a08565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561252191906136f2565b945061249f565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259b90613417565b60405180910390fd5b6125ad816118d4565b156125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e4906132d7565b60405180910390fd5b6125f96000838361204c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612649919061369c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461270e90613874565b90600052602060002090601f0160209004810192826127305760008555612777565b82601f1061274957805160ff1916838001178555612777565b82800160010185558215612777579182015b8281111561277657825182559160200191906001019061275b565b5b5090506127849190612788565b5090565b5b808211156127a1576000816000905550600101612789565b5090565b60006127b86127b3846135d7565b6135b2565b9050828152602081018484840111156127d4576127d3613a6b565b5b6127df848285613832565b509392505050565b60006127fa6127f584613608565b6135b2565b90508281526020810184848401111561281657612815613a6b565b5b612821848285613832565b509392505050565b600081359050612838816140a6565b92915050565b60008135905061284d816140bd565b92915050565b600081359050612862816140d4565b92915050565b600081519050612877816140d4565b92915050565b600082601f83011261289257612891613a66565b5b81356128a28482602086016127a5565b91505092915050565b600082601f8301126128c0576128bf613a66565b5b81356128d08482602086016127e7565b91505092915050565b6000813590506128e8816140eb565b92915050565b60006020828403121561290457612903613a75565b5b600061291284828501612829565b91505092915050565b6000806040838503121561293257612931613a75565b5b600061294085828601612829565b925050602061295185828601612829565b9150509250929050565b60008060006060848603121561297457612973613a75565b5b600061298286828701612829565b935050602061299386828701612829565b92505060406129a4868287016128d9565b9150509250925092565b600080600080608085870312156129c8576129c7613a75565b5b60006129d687828801612829565b94505060206129e787828801612829565b93505060406129f8878288016128d9565b925050606085013567ffffffffffffffff811115612a1957612a18613a70565b5b612a258782880161287d565b91505092959194509250565b60008060408385031215612a4857612a47613a75565b5b6000612a5685828601612829565b9250506020612a678582860161283e565b9150509250929050565b60008060408385031215612a8857612a87613a75565b5b6000612a9685828601612829565b9250506020612aa7858286016128d9565b9150509250929050565b600060208284031215612ac757612ac6613a75565b5b6000612ad58482850161283e565b91505092915050565b600060208284031215612af457612af3613a75565b5b6000612b0284828501612853565b91505092915050565b600060208284031215612b2157612b20613a75565b5b6000612b2f84828501612868565b91505092915050565b600060208284031215612b4e57612b4d613a75565b5b600082013567ffffffffffffffff811115612b6c57612b6b613a70565b5b612b78848285016128ab565b91505092915050565b600060208284031215612b9757612b96613a75565b5b6000612ba5848285016128d9565b91505092915050565b60008060408385031215612bc557612bc4613a75565b5b6000612bd3858286016128d9565b925050602083013567ffffffffffffffff811115612bf457612bf3613a70565b5b612c00858286016128ab565b9150509250929050565b60008060408385031215612c2157612c20613a75565b5b6000612c2f858286016128d9565b9250506020612c40858286016128d9565b9150509250929050565b612c53816137b1565b82525050565b612c62816137c3565b82525050565b6000612c738261364e565b612c7d8185613664565b9350612c8d818560208601613841565b612c9681613a7a565b840191505092915050565b6000612cac82613659565b612cb68185613680565b9350612cc6818560208601613841565b612ccf81613a7a565b840191505092915050565b6000612ce582613659565b612cef8185613691565b9350612cff818560208601613841565b80840191505092915050565b60008154612d1881613874565b612d228186613691565b94506001821660008114612d3d5760018114612d4e57612d81565b60ff19831686528186019350612d81565b612d5785613639565b60005b83811015612d7957815481890152600182019150602081019050612d5a565b838801955050505b50505092915050565b6000612d97603283613680565b9150612da282613a8b565b604082019050919050565b6000612dba601783613680565b9150612dc582613ada565b602082019050919050565b6000612ddd602683613680565b9150612de882613b03565b604082019050919050565b6000612e00601c83613680565b9150612e0b82613b52565b602082019050919050565b6000612e23600f83613680565b9150612e2e82613b7b565b602082019050919050565b6000612e46602483613680565b9150612e5182613ba4565b604082019050919050565b6000612e69601983613680565b9150612e7482613bf3565b602082019050919050565b6000612e8c602c83613680565b9150612e9782613c1c565b604082019050919050565b6000612eaf603883613680565b9150612eba82613c6b565b604082019050919050565b6000612ed2600f83613680565b9150612edd82613cba565b602082019050919050565b6000612ef5602a83613680565b9150612f0082613ce3565b604082019050919050565b6000612f18602983613680565b9150612f2382613d32565b604082019050919050565b6000612f3b601283613680565b9150612f4682613d81565b602082019050919050565b6000612f5e602083613680565b9150612f6982613daa565b602082019050919050565b6000612f81603183613680565b9150612f8c82613dd3565b604082019050919050565b6000612fa4602c83613680565b9150612faf82613e22565b604082019050919050565b6000612fc7600583613691565b9150612fd282613e71565b600582019050919050565b6000612fea602083613680565b9150612ff582613e9a565b602082019050919050565b600061300d602983613680565b915061301882613ec3565b604082019050919050565b6000613030602f83613680565b915061303b82613f12565b604082019050919050565b6000613053601183613680565b915061305e82613f61565b602082019050919050565b6000613076602183613680565b915061308182613f8a565b604082019050919050565b6000613099600e83613680565b91506130a482613fd9565b602082019050919050565b60006130bc600083613675565b91506130c782614002565b600082019050919050565b60006130df603183613680565b91506130ea82614005565b604082019050919050565b6000613102601083613680565b915061310d82614054565b602082019050919050565b6000613125600883613680565b91506131308261407d565b602082019050919050565b6131448161381b565b82525050565b60006131568284612cda565b915081905092915050565b600061316d8285612cda565b91506131798284612cda565b91508190509392505050565b60006131918284612cda565b915061319c82612fba565b915081905092915050565b60006131b38284612d0b565b915081905092915050565b60006131c9826130af565b9150819050919050565b60006020820190506131e86000830184612c4a565b92915050565b60006080820190506132036000830187612c4a565b6132106020830186612c4a565b61321d604083018561313b565b818103606083015261322f8184612c68565b905095945050505050565b600060208201905061324f6000830184612c59565b92915050565b6000602082019050818103600083015261326f8184612ca1565b905092915050565b6000602082019050818103600083015261329081612d8a565b9050919050565b600060208201905081810360008301526132b081612dad565b9050919050565b600060208201905081810360008301526132d081612dd0565b9050919050565b600060208201905081810360008301526132f081612df3565b9050919050565b6000602082019050818103600083015261331081612e16565b9050919050565b6000602082019050818103600083015261333081612e39565b9050919050565b6000602082019050818103600083015261335081612e5c565b9050919050565b6000602082019050818103600083015261337081612e7f565b9050919050565b6000602082019050818103600083015261339081612ea2565b9050919050565b600060208201905081810360008301526133b081612ec5565b9050919050565b600060208201905081810360008301526133d081612ee8565b9050919050565b600060208201905081810360008301526133f081612f0b565b9050919050565b6000602082019050818103600083015261341081612f2e565b9050919050565b6000602082019050818103600083015261343081612f51565b9050919050565b6000602082019050818103600083015261345081612f74565b9050919050565b6000602082019050818103600083015261347081612f97565b9050919050565b6000602082019050818103600083015261349081612fdd565b9050919050565b600060208201905081810360008301526134b081613000565b9050919050565b600060208201905081810360008301526134d081613023565b9050919050565b600060208201905081810360008301526134f081613046565b9050919050565b6000602082019050818103600083015261351081613069565b9050919050565b600060208201905081810360008301526135308161308c565b9050919050565b60006020820190508181036000830152613550816130d2565b9050919050565b60006020820190508181036000830152613570816130f5565b9050919050565b6000602082019050818103600083015261359081613118565b9050919050565b60006020820190506135ac600083018461313b565b92915050565b60006135bc6135cd565b90506135c882826138a6565b919050565b6000604051905090565b600067ffffffffffffffff8211156135f2576135f1613a37565b5b6135fb82613a7a565b9050602081019050919050565b600067ffffffffffffffff82111561362357613622613a37565b5b61362c82613a7a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006136a78261381b565b91506136b28361381b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136e7576136e661397b565b5b828201905092915050565b60006136fd8261381b565b91506137088361381b565b925082613718576137176139aa565b5b828204905092915050565b600061372e8261381b565b91506137398361381b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137725761377161397b565b5b828202905092915050565b60006137888261381b565b91506137938361381b565b9250828210156137a6576137a561397b565b5b828203905092915050565b60006137bc826137fb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561385f578082015181840152602081019050613844565b8381111561386e576000848401525b50505050565b6000600282049050600182168061388c57607f821691505b602082108114156138a05761389f6139d9565b5b50919050565b6138af82613a7a565b810181811067ffffffffffffffff821117156138ce576138cd613a37565b5b80604052505050565b60006138e28261381b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139155761391461397b565b5b600182019050919050565b600061392b82613825565b915060ff82141561393f5761393e61397b565b5b600182019050919050565b60006139558261381b565b91506139608361381b565b9250826139705761396f6139aa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4578636565647320706572207472616e73616374696f6e000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920696e2077616c6c65740000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6573206e6f74206f70656e000000000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f476c6f62616c206f7665726c696d697400000000000000000000000000000000600082015250565b7f536f6c646f757421000000000000000000000000000000000000000000000000600082015250565b6140af816137b1565b81146140ba57600080fd5b50565b6140c6816137c3565b81146140d157600080fd5b50565b6140dd816137cf565b81146140e857600080fd5b50565b6140f48161381b565b81146140ff57600080fd5b5056fea264697066735822122021f67c6f7e67ca23fec6295d968e73c418aba309d056c8ce738daa9af79b98d964736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002f68747470733a2f2f6879706e6f746963612d6e66742e73332e616d617a6f6e6177732e636f6d2f70726573616c652f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000183634373236663637366636363666373236353736363537320000000000000000
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c80636fa224651161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd146106ad578063cb14eb87146106ea578063e985e9c514610715578063f0966d7814610752578063f2fde38b1461077b576101ee565b8063a22cb46514610607578063b88d4fde14610630578063bedb86fb14610659578063bf7b766d14610682576101ee565b806377097fc8116100dc57806377097fc81461056a5780638d859f3e146105865780638da5cb5b146105b157806395d89b41146105dc576101ee565b80636fa22465146104c057806370a08231146104eb578063715018a614610528578063763049261461053f576101ee565b80633c952764116101855780634e6af95e116101545780634e6af95e146103f257806355f804b31461042f578063626be567146104585780636352211e14610483576101ee565b80633c9527641461036b5780633ccfd60b1461039457806342842e0e1461039e57806342f44b4e146103c7576101ee565b806317e7f295116101c157806317e7f295146102c157806323b872dd146102ec57806329b71f8f146103155780633502a71614610340576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612ade565b6107a4565b604051610227919061323a565b60405180910390f35b34801561023c57600080fd5b50610245610886565b6040516102529190613255565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612b81565b610918565b60405161028f91906131d3565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612a71565b61099d565b005b3480156102cd57600080fd5b506102d6610ab5565b6040516102e39190613597565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e919061295b565b610ac0565b005b34801561032157600080fd5b5061032a610b20565b6040516103379190613597565b60405180910390f35b34801561034c57600080fd5b50610355610b25565b6040516103629190613597565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612ab1565b610b2b565b005b61039c610bc4565b005b3480156103aa57600080fd5b506103c560048036038101906103c0919061295b565b610cef565b005b3480156103d357600080fd5b506103dc610d0f565b6040516103e99190613597565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612c0a565b610d15565b6040516104269190613597565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612b38565b610d32565b005b34801561046457600080fd5b5061046d610dc8565b60405161047a9190613597565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190612b81565b610dd9565b6040516104b791906131d3565b60405180910390f35b3480156104cc57600080fd5b506104d5610e8b565b6040516104e29190613597565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d91906128ee565b610e90565b60405161051f9190613597565b60405180910390f35b34801561053457600080fd5b5061053d610f48565b005b34801561054b57600080fd5b50610554610fd0565b604051610561919061323a565b60405180910390f35b610584600480360381019061057f9190612bae565b610fe3565b005b34801561059257600080fd5b5061059b6112ca565b6040516105a89190613597565b60405180910390f35b3480156105bd57600080fd5b506105c66112d5565b6040516105d391906131d3565b60405180910390f35b3480156105e857600080fd5b506105f16112ff565b6040516105fe9190613255565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190612a31565b611391565b005b34801561063c57600080fd5b50610657600480360381019061065291906129ae565b611512565b005b34801561066557600080fd5b50610680600480360381019061067b9190612ab1565b611574565b005b34801561068e57600080fd5b5061069761160d565b6040516106a49190613597565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190612b81565b611612565b6040516106e19190613255565b60405180910390f35b3480156106f657600080fd5b506106ff611643565b60405161070c9190613597565b60405180910390f35b34801561072157600080fd5b5061073c6004803603810190610737919061291b565b611648565b604051610749919061323a565b60405180910390f35b34801561075e57600080fd5b5061077960048036038101906107749190612b38565b6116dc565b005b34801561078757600080fd5b506107a2600480360381019061079d91906128ee565b611772565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087f575061087e8261186a565b5b9050919050565b60606000805461089590613874565b80601f01602080910402602001604051908101604052809291908181526020018280546108c190613874565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b5050505050905090565b6000610923826118d4565b610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990613457565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109a882610dd9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906134f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a38611940565b73ffffffffffffffffffffffffffffffffffffffff161480610a675750610a6681610a61611940565b611648565b5b610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90613377565b60405180910390fd5b610ab08383611948565b505050565b666a94d74f43000081565b610ad1610acb611940565b82611a01565b610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0790613537565b60405180910390fd5b610b1b838383611adf565b505050565b600581565b61080081565b610b33611940565b73ffffffffffffffffffffffffffffffffffffffff16610b516112d5565b73ffffffffffffffffffffffffffffffffffffffff1614610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613477565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b610bcc611940565b73ffffffffffffffffffffffffffffffffffffffff16610bea6112d5565b73ffffffffffffffffffffffffffffffffffffffff1614610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790613477565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610c66906131be565b60006040518083038185875af1925050503d8060008114610ca3576040519150601f19603f3d011682016040523d82523d6000602084013e610ca8565b606091505b5050905080610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce3906132f7565b60405180910390fd5b50565b610d0a83838360405180602001604052806000815250611512565b505050565b61019081565b6000610d2a8383611d3b90919063ffffffff16565b905092915050565b610d3a611940565b73ffffffffffffffffffffffffffffffffffffffff16610d586112d5565b73ffffffffffffffffffffffffffffffffffffffff1614610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613477565b60405180910390fd5b8060099080519060200190610dc4929190612702565b5050565b6000610dd46008611d51565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e79906133d7565b60405180910390fd5b80915050919050565b600581565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef8906133b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f50611940565b73ffffffffffffffffffffffffffffffffffffffff16610f6e6112d5565b73ffffffffffffffffffffffffffffffffffffffff1614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb90613477565b60405180910390fd5b610fce6000611d5f565b565b600b60019054906101000a900460ff1681565b610800610fee610dc8565b111561102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102690613577565b60405180910390fd5b600b60009054906101000a900460ff161561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107690613517565b60405180910390fd5b6000339050600061108e610dc8565b90506000600b60019054906101000a900460ff166110b35766b1a2bc2ec500006110bc565b666a94d74f4300005b90506000600b60019054906101000a900460ff166110db57600a6110de565b60055b90506000600b60019054906101000a900460ff166110fe57610800611102565b6101905b9050600b60019054906101000a900460ff16156111b95761112286611e25565b611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613397565b60405180910390fd5b60058761116d87610e90565b611177919061369c565b11156111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af906133f7565b60405180910390fd5b5b818711156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390613297565b60405180910390fd5b808785611209919061369c565b111561124a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124190613557565b60405180910390fd5b6112548784610d15565b341015611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d906134d7565b60405180910390fd5b60005b878160ff1610156112c0576112ad86611e7e565b80806112b890613920565b915050611299565b5050505050505050565b66b1a2bc2ec5000081565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461130e90613874565b80601f016020809104026020016040519081016040528092919081815260200182805461133a90613874565b80156113875780601f1061135c57610100808354040283529160200191611387565b820191906000526020600020905b81548152906001019060200180831161136a57829003601f168201915b5050505050905090565b611399611940565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90613337565b60405180910390fd5b8060056000611414611940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114c1611940565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611506919061323a565b60405180910390a35050565b61152361151d611940565b83611a01565b611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990613537565b60405180910390fd5b61156e84848484611e9e565b50505050565b61157c611940565b73ffffffffffffffffffffffffffffffffffffffff1661159a6112d5565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790613477565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600181565b606061161d82611efa565b60405160200161162d9190613185565b6040516020818303038152906040529050919050565b600a81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116e4611940565b73ffffffffffffffffffffffffffffffffffffffff166117026112d5565b73ffffffffffffffffffffffffffffffffffffffff1614611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613477565b60405180910390fd5b80600a908051906020019061176e929190612702565b5050565b61177a611940565b73ffffffffffffffffffffffffffffffffffffffff166117986112d5565b73ffffffffffffffffffffffffffffffffffffffff16146117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613477565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561185e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611855906132b7565b60405180910390fd5b61186781611d5f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119bb83610dd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a0c826118d4565b611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290613357565b60405180910390fd5b6000611a5683610dd9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ac557508373ffffffffffffffffffffffffffffffffffffffff16611aad84610918565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ad65750611ad58185611648565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aff82610dd9565b73ffffffffffffffffffffffffffffffffffffffff1614611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c90613497565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90613317565b60405180910390fd5b611bd083838361204c565b611bdb600082611948565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2b919061377d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c82919061369c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183611d499190613723565b905092915050565b600081600001549050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001611e38919061314a565b60405160208183030381529060405280519060200120600a604051602001611e6091906131a7565b60405160208183030381529060405280519060200120149050919050565b611e88600861205c565b611e9b81611e966008611d51565b612072565b50565b611ea9848484611adf565b611eb584848484612090565b611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb90613277565b60405180910390fd5b50505050565b6060611f05826118d4565b611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613437565b60405180910390fd5b6000600660008481526020019081526020016000208054611f6490613874565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9090613874565b8015611fdd5780601f10611fb257610100808354040283529160200191611fdd565b820191906000526020600020905b815481529060010190602001808311611fc057829003601f168201915b505050505090506000611fee612227565b9050600081511415612004578192505050612047565b600082511115612039578082604051602001612021929190613161565b60405160208183030381529060405292505050612047565b612042846122b9565b925050505b919050565b612057838383612360565b505050565b6001816000016000828254019250508190555050565b61208c828260405180602001604052806000815250612365565b5050565b60006120b18473ffffffffffffffffffffffffffffffffffffffff166123c0565b1561221a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120da611940565b8786866040518563ffffffff1660e01b81526004016120fc94939291906131ee565b602060405180830381600087803b15801561211657600080fd5b505af192505050801561214757506040513d601f19601f820116820180604052508101906121449190612b0b565b60015b6121ca573d8060008114612177576040519150601f19603f3d011682016040523d82523d6000602084013e61217c565b606091505b506000815114156121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b990613277565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061221f565b600190505b949350505050565b60606009805461223690613874565b80601f016020809104026020016040519081016040528092919081815260200182805461226290613874565b80156122af5780601f10612284576101008083540402835291602001916122af565b820191906000526020600020905b81548152906001019060200180831161229257829003601f168201915b5050505050905090565b60606122c4826118d4565b612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa906134b7565b60405180910390fd5b600061230d612227565b9050600081511161232d5760405180602001604052806000815250612358565b80612337846123d3565b604051602001612348929190613161565b6040516020818303038152906040525b915050919050565b505050565b61236f8383612534565b61237c6000848484612090565b6123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290613277565b60405180910390fd5b505050565b600080823b905060008111915050919050565b6060600082141561241b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061252f565b600082905060005b6000821461244d578080612436906138d7565b915050600a8261244691906136f2565b9150612423565b60008167ffffffffffffffff81111561246957612468613a37565b5b6040519080825280601f01601f19166020018201604052801561249b5781602001600182028036833780820191505090505b5090505b60008514612528576001826124b4919061377d565b9150600a856124c3919061394a565b60306124cf919061369c565b60f81b8183815181106124e5576124e4613a08565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561252191906136f2565b945061249f565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259b90613417565b60405180910390fd5b6125ad816118d4565b156125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e4906132d7565b60405180910390fd5b6125f96000838361204c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612649919061369c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461270e90613874565b90600052602060002090601f0160209004810192826127305760008555612777565b82601f1061274957805160ff1916838001178555612777565b82800160010185558215612777579182015b8281111561277657825182559160200191906001019061275b565b5b5090506127849190612788565b5090565b5b808211156127a1576000816000905550600101612789565b5090565b60006127b86127b3846135d7565b6135b2565b9050828152602081018484840111156127d4576127d3613a6b565b5b6127df848285613832565b509392505050565b60006127fa6127f584613608565b6135b2565b90508281526020810184848401111561281657612815613a6b565b5b612821848285613832565b509392505050565b600081359050612838816140a6565b92915050565b60008135905061284d816140bd565b92915050565b600081359050612862816140d4565b92915050565b600081519050612877816140d4565b92915050565b600082601f83011261289257612891613a66565b5b81356128a28482602086016127a5565b91505092915050565b600082601f8301126128c0576128bf613a66565b5b81356128d08482602086016127e7565b91505092915050565b6000813590506128e8816140eb565b92915050565b60006020828403121561290457612903613a75565b5b600061291284828501612829565b91505092915050565b6000806040838503121561293257612931613a75565b5b600061294085828601612829565b925050602061295185828601612829565b9150509250929050565b60008060006060848603121561297457612973613a75565b5b600061298286828701612829565b935050602061299386828701612829565b92505060406129a4868287016128d9565b9150509250925092565b600080600080608085870312156129c8576129c7613a75565b5b60006129d687828801612829565b94505060206129e787828801612829565b93505060406129f8878288016128d9565b925050606085013567ffffffffffffffff811115612a1957612a18613a70565b5b612a258782880161287d565b91505092959194509250565b60008060408385031215612a4857612a47613a75565b5b6000612a5685828601612829565b9250506020612a678582860161283e565b9150509250929050565b60008060408385031215612a8857612a87613a75565b5b6000612a9685828601612829565b9250506020612aa7858286016128d9565b9150509250929050565b600060208284031215612ac757612ac6613a75565b5b6000612ad58482850161283e565b91505092915050565b600060208284031215612af457612af3613a75565b5b6000612b0284828501612853565b91505092915050565b600060208284031215612b2157612b20613a75565b5b6000612b2f84828501612868565b91505092915050565b600060208284031215612b4e57612b4d613a75565b5b600082013567ffffffffffffffff811115612b6c57612b6b613a70565b5b612b78848285016128ab565b91505092915050565b600060208284031215612b9757612b96613a75565b5b6000612ba5848285016128d9565b91505092915050565b60008060408385031215612bc557612bc4613a75565b5b6000612bd3858286016128d9565b925050602083013567ffffffffffffffff811115612bf457612bf3613a70565b5b612c00858286016128ab565b9150509250929050565b60008060408385031215612c2157612c20613a75565b5b6000612c2f858286016128d9565b9250506020612c40858286016128d9565b9150509250929050565b612c53816137b1565b82525050565b612c62816137c3565b82525050565b6000612c738261364e565b612c7d8185613664565b9350612c8d818560208601613841565b612c9681613a7a565b840191505092915050565b6000612cac82613659565b612cb68185613680565b9350612cc6818560208601613841565b612ccf81613a7a565b840191505092915050565b6000612ce582613659565b612cef8185613691565b9350612cff818560208601613841565b80840191505092915050565b60008154612d1881613874565b612d228186613691565b94506001821660008114612d3d5760018114612d4e57612d81565b60ff19831686528186019350612d81565b612d5785613639565b60005b83811015612d7957815481890152600182019150602081019050612d5a565b838801955050505b50505092915050565b6000612d97603283613680565b9150612da282613a8b565b604082019050919050565b6000612dba601783613680565b9150612dc582613ada565b602082019050919050565b6000612ddd602683613680565b9150612de882613b03565b604082019050919050565b6000612e00601c83613680565b9150612e0b82613b52565b602082019050919050565b6000612e23600f83613680565b9150612e2e82613b7b565b602082019050919050565b6000612e46602483613680565b9150612e5182613ba4565b604082019050919050565b6000612e69601983613680565b9150612e7482613bf3565b602082019050919050565b6000612e8c602c83613680565b9150612e9782613c1c565b604082019050919050565b6000612eaf603883613680565b9150612eba82613c6b565b604082019050919050565b6000612ed2600f83613680565b9150612edd82613cba565b602082019050919050565b6000612ef5602a83613680565b9150612f0082613ce3565b604082019050919050565b6000612f18602983613680565b9150612f2382613d32565b604082019050919050565b6000612f3b601283613680565b9150612f4682613d81565b602082019050919050565b6000612f5e602083613680565b9150612f6982613daa565b602082019050919050565b6000612f81603183613680565b9150612f8c82613dd3565b604082019050919050565b6000612fa4602c83613680565b9150612faf82613e22565b604082019050919050565b6000612fc7600583613691565b9150612fd282613e71565b600582019050919050565b6000612fea602083613680565b9150612ff582613e9a565b602082019050919050565b600061300d602983613680565b915061301882613ec3565b604082019050919050565b6000613030602f83613680565b915061303b82613f12565b604082019050919050565b6000613053601183613680565b915061305e82613f61565b602082019050919050565b6000613076602183613680565b915061308182613f8a565b604082019050919050565b6000613099600e83613680565b91506130a482613fd9565b602082019050919050565b60006130bc600083613675565b91506130c782614002565b600082019050919050565b60006130df603183613680565b91506130ea82614005565b604082019050919050565b6000613102601083613680565b915061310d82614054565b602082019050919050565b6000613125600883613680565b91506131308261407d565b602082019050919050565b6131448161381b565b82525050565b60006131568284612cda565b915081905092915050565b600061316d8285612cda565b91506131798284612cda565b91508190509392505050565b60006131918284612cda565b915061319c82612fba565b915081905092915050565b60006131b38284612d0b565b915081905092915050565b60006131c9826130af565b9150819050919050565b60006020820190506131e86000830184612c4a565b92915050565b60006080820190506132036000830187612c4a565b6132106020830186612c4a565b61321d604083018561313b565b818103606083015261322f8184612c68565b905095945050505050565b600060208201905061324f6000830184612c59565b92915050565b6000602082019050818103600083015261326f8184612ca1565b905092915050565b6000602082019050818103600083015261329081612d8a565b9050919050565b600060208201905081810360008301526132b081612dad565b9050919050565b600060208201905081810360008301526132d081612dd0565b9050919050565b600060208201905081810360008301526132f081612df3565b9050919050565b6000602082019050818103600083015261331081612e16565b9050919050565b6000602082019050818103600083015261333081612e39565b9050919050565b6000602082019050818103600083015261335081612e5c565b9050919050565b6000602082019050818103600083015261337081612e7f565b9050919050565b6000602082019050818103600083015261339081612ea2565b9050919050565b600060208201905081810360008301526133b081612ec5565b9050919050565b600060208201905081810360008301526133d081612ee8565b9050919050565b600060208201905081810360008301526133f081612f0b565b9050919050565b6000602082019050818103600083015261341081612f2e565b9050919050565b6000602082019050818103600083015261343081612f51565b9050919050565b6000602082019050818103600083015261345081612f74565b9050919050565b6000602082019050818103600083015261347081612f97565b9050919050565b6000602082019050818103600083015261349081612fdd565b9050919050565b600060208201905081810360008301526134b081613000565b9050919050565b600060208201905081810360008301526134d081613023565b9050919050565b600060208201905081810360008301526134f081613046565b9050919050565b6000602082019050818103600083015261351081613069565b9050919050565b600060208201905081810360008301526135308161308c565b9050919050565b60006020820190508181036000830152613550816130d2565b9050919050565b60006020820190508181036000830152613570816130f5565b9050919050565b6000602082019050818103600083015261359081613118565b9050919050565b60006020820190506135ac600083018461313b565b92915050565b60006135bc6135cd565b90506135c882826138a6565b919050565b6000604051905090565b600067ffffffffffffffff8211156135f2576135f1613a37565b5b6135fb82613a7a565b9050602081019050919050565b600067ffffffffffffffff82111561362357613622613a37565b5b61362c82613a7a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006136a78261381b565b91506136b28361381b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136e7576136e661397b565b5b828201905092915050565b60006136fd8261381b565b91506137088361381b565b925082613718576137176139aa565b5b828204905092915050565b600061372e8261381b565b91506137398361381b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137725761377161397b565b5b828202905092915050565b60006137888261381b565b91506137938361381b565b9250828210156137a6576137a561397b565b5b828203905092915050565b60006137bc826137fb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561385f578082015181840152602081019050613844565b8381111561386e576000848401525b50505050565b6000600282049050600182168061388c57607f821691505b602082108114156138a05761389f6139d9565b5b50919050565b6138af82613a7a565b810181811067ffffffffffffffff821117156138ce576138cd613a37565b5b80604052505050565b60006138e28261381b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139155761391461397b565b5b600182019050919050565b600061392b82613825565b915060ff82141561393f5761393e61397b565b5b600182019050919050565b60006139558261381b565b91506139608361381b565b9250826139705761396f6139aa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4578636565647320706572207472616e73616374696f6e000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920696e2077616c6c65740000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6573206e6f74206f70656e000000000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f476c6f62616c206f7665726c696d697400000000000000000000000000000000600082015250565b7f536f6c646f757421000000000000000000000000000000000000000000000000600082015250565b6140af816137b1565b81146140ba57600080fd5b50565b6140c6816137c3565b81146140d157600080fd5b50565b6140dd816137cf565b81146140e857600080fd5b50565b6140f48161381b565b81146140ff57600080fd5b5056fea264697066735822122021f67c6f7e67ca23fec6295d968e73c418aba309d056c8ce738daa9af79b98d964736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002f68747470733a2f2f6879706e6f746963612d6e66742e73332e616d617a6f6e6177732e636f6d2f70726573616c652f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000183634373236663637366636363666373236353736363537320000000000000000
-----Decoded View---------------
Arg [0] : baseTokenURI (string): https://hypnotica-nft.s3.amazonaws.com/presale/
Arg [1] : _spp (string): 64726f676f666f7265766572
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000000000000000000000000000000000000000002f
Arg [3] : 68747470733a2f2f6879706e6f746963612d6e66742e73332e616d617a6f6e61
Arg [4] : 77732e636f6d2f70726573616c652f0000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [6] : 3634373236663637366636363666373236353736363537320000000000000000
Deployed Bytecode Sourcemap
1146:3880:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1431:300:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2349:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1422:52:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:330:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1747:53:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1524:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2260:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4077:184;;;:::i;:::-;;5120:179:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1628:50:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2810:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2042:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2615:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2052:235:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1684:57:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1790:205:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:11;;;;;;;;;;;;;:::i;:::-;;1842:35:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2957:960;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1374:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;966:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2511:102:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4144:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5365:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2722:82:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1481:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4837:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1573:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4500:162:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2144:80:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1839:189:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1431:300:4;1533:4;1583:25;1568:40;;;:11;:40;;;;:104;;;;1639:33;1624:48;;;:11;:48;;;;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;:::-;1568:156;1549:175;;1431:300;;;:::o;2349:98::-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;1422:52:10:-;1464:10;1422:52;:::o;4724:330:4:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;1747:53:10:-;1799:1;1747:53;:::o;1524:43::-;1563:4;1524:43;:::o;2260:100::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2347:6:10::1;2328:16;;:25;;;;;;;;;;;;;;;;;;2260:100:::0;:::o;4077:184::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4133:12:10::1;4159:10;4151:24;;4183:21;4151:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4132:77;;;4227:7;4219:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;4122:139;4077:184::o:0;5120:179:4:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;1628:50:10:-;1675:3;1628:50;:::o;2810:126::-;2884:7;2910:19;2921:7;2910:6;:10;;:19;;;;:::i;:::-;2903:26;;2810:126;;;;:::o;2042:96::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2123:8:10::1;2113:7;:18;;;;;;;;;;;;:::i;:::-;;2042:96:::0;:::o;2615:101::-;2658:7;2684:25;:15;:23;:25::i;:::-;2677:32;;2615:101;:::o;2052:235:4:-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;1684:57:10:-;1740:1;1684:57;:::o;1790:205:4:-;1862:7;1906:1;1889:19;;:5;:19;;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1598:92:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;1842:35:10:-;;;;;;;;;;;;;:::o;2957:960::-;1563:4;2448:12;:10;:12::i;:::-;:28;;2440:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;2508:9;;;;;;;;;;;2507:10;2499:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;3043:14:::1;3060:10;3043:27;;3080:13;3096:12;:10;:12::i;:::-;3080:28;;3137:20;3160:16;;;;;;;;;;;:42;;1406:10;3160:42;;;1464:10;3160:42;3137:65;;3212:24;3239:16;;;;;;;;;;;:70;;1619:2;3239:70;;;1740:1;3239:70;3212:97;;3319:20;3342:16;;;;;;;;;;;:54;;1563:4;3342:54;;;1675:3;3342:54;3319:77;;3411:16;;;;;;;;;;;3408:188;;;3450:14;3459:4;3450:8;:14::i;:::-;3442:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;1799:1;3526:7;3506:17;3516:6;3506:9;:17::i;:::-;:27;;;;:::i;:::-;:56;;3498:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;3408:188;3625:16;3614:7;:27;;3606:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3706:12;3695:7;3687:5;:15;;;;:::i;:::-;:31;;3679:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;3770:33;3781:7;3790:12;3770:10;:33::i;:::-;3757:9;:46;;3749:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3840:7;3836:75;3857:7;3853:1;:11;;;3836:75;;;3884:16;3893:6;3884:8;:16::i;:::-;3866:3;;;;;:::i;:::-;;;;3836:75;;;;3033:884;;;;;2957:960:::0;;:::o;1374:42::-;1406:10;1374:42;:::o;966:85:11:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;2511:102:4:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;4144:290::-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;5365:320::-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;2722:82:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2791:6:10::1;2779:9;;:18;;;;;;;;;;;;;;;;;;2722:82:::0;:::o;1481:36::-;1516:1;1481:36;:::o;4837:187::-;4928:13;4984:23;4999:7;4984:14;:23::i;:::-;4967:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;4953:64;;4837:187;;;:::o;1573:48::-;1619:2;1573:48;:::o;4500:162:4:-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;2144:80:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2213:4:10::1;2207:3;:10;;;;;;;;;;;;:::i;:::-;;2144:80:::0;:::o;1839:189:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;763:155:3:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;7157:125:4:-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;11008:171:4:-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;7440:344::-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;3382:96:12:-;3440:7;3470:1;3466;:5;;;;:::i;:::-;3459:12;;3382:96;;;;:::o;773:112:2:-;838:7;864;:14;;;857:21;;773:112;;;:::o;2034:169:11:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;4284:165:10:-;4344:4;4434;4416:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;4406:35;;;;;;4396:3;4378:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;4368:34;;;;;;:73;4360:82;;4284:165;;;:::o;3923:132::-;3971:27;:15;:25;:27::i;:::-;4008:40;4018:2;4022:25;:15;:23;:25::i;:::-;4008:9;:40::i;:::-;3923:132;:::o;6547:307:4:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;386:663:5:-;459:13;492:16;500:7;492;:16::i;:::-;484:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;573:23;599:10;:19;610:7;599:19;;;;;;;;;;;573:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;628:18;649:10;:8;:10::i;:::-;628:31;;754:1;738:4;732:18;:23;728:70;;;778:9;771:16;;;;;;728:70;926:1;906:9;900:23;:27;896:106;;;974:4;980:9;957:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;943:48;;;;;;896:106;1019:23;1034:7;1019:14;:23::i;:::-;1012:30;;;;386:663;;;;:::o;4559:153:10:-;4660:45;4687:4;4693:2;4697:7;4660:26;:45::i;:::-;4559:153;;;:::o;891:123:2:-;996:1;978:7;:14;;;:19;;;;;;;;;;;891:123;:::o;8114:108:4:-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;:::-;8114:108;;:::o;11732:778::-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:606;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12193:1;12176:6;:13;:18;12172:266;;;12218:60;;;;;;;;;;:::i;:::-;;;;;;;;12172:266;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;12069:41;;;12059:51;;;:6;:51;;;;12052:58;;;;;11898:606;12489:4;12482:11;;11732:778;;;;;;;:::o;4455:98:10:-;4507:13;4539:7;4532:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4455:98;:::o;2679:329:4:-;2752:13;2785:16;2793:7;2785;:16::i;:::-;2777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;;;2679:329;;;:::o;13066:122::-;;;;:::o;8443:311::-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8443:311;;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;275:703:13:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;9076:372:4:-;9169:1;9155:16;;:2;:16;;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:14:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:654::-;7565:6;7573;7622:2;7610:9;7601:7;7597:23;7593:32;7590:119;;;7628:79;;:::i;:::-;7590:119;7748:1;7773:53;7818:7;7809:6;7798:9;7794:22;7773:53;:::i;:::-;7763:63;;7719:117;7903:2;7892:9;7888:18;7875:32;7934:18;7926:6;7923:30;7920:117;;;7956:79;;:::i;:::-;7920:117;8061:63;8116:7;8107:6;8096:9;8092:22;8061:63;:::i;:::-;8051:73;;7846:288;7487:654;;;;;:::o;8147:474::-;8215:6;8223;8272:2;8260:9;8251:7;8247:23;8243:32;8240:119;;;8278:79;;:::i;:::-;8240:119;8398:1;8423:53;8468:7;8459:6;8448:9;8444:22;8423:53;:::i;:::-;8413:63;;8369:117;8525:2;8551:53;8596:7;8587:6;8576:9;8572:22;8551:53;:::i;:::-;8541:63;;8496:118;8147:474;;;;;:::o;8627:118::-;8714:24;8732:5;8714:24;:::i;:::-;8709:3;8702:37;8627:118;;:::o;8751:109::-;8832:21;8847:5;8832:21;:::i;:::-;8827:3;8820:34;8751:109;;:::o;8866:360::-;8952:3;8980:38;9012:5;8980:38;:::i;:::-;9034:70;9097:6;9092:3;9034:70;:::i;:::-;9027:77;;9113:52;9158:6;9153:3;9146:4;9139:5;9135:16;9113:52;:::i;:::-;9190:29;9212:6;9190:29;:::i;:::-;9185:3;9181:39;9174:46;;8956:270;8866:360;;;;:::o;9232:364::-;9320:3;9348:39;9381:5;9348:39;:::i;:::-;9403:71;9467:6;9462:3;9403:71;:::i;:::-;9396:78;;9483:52;9528:6;9523:3;9516:4;9509:5;9505:16;9483:52;:::i;:::-;9560:29;9582:6;9560:29;:::i;:::-;9555:3;9551:39;9544:46;;9324:272;9232:364;;;;:::o;9602:377::-;9708:3;9736:39;9769:5;9736:39;:::i;:::-;9791:89;9873:6;9868:3;9791:89;:::i;:::-;9784:96;;9889:52;9934:6;9929:3;9922:4;9915:5;9911:16;9889:52;:::i;:::-;9966:6;9961:3;9957:16;9950:23;;9712:267;9602:377;;;;:::o;10009:845::-;10112:3;10149:5;10143:12;10178:36;10204:9;10178:36;:::i;:::-;10230:89;10312:6;10307:3;10230:89;:::i;:::-;10223:96;;10350:1;10339:9;10335:17;10366:1;10361:137;;;;10512:1;10507:341;;;;10328:520;;10361:137;10445:4;10441:9;10430;10426:25;10421:3;10414:38;10481:6;10476:3;10472:16;10465:23;;10361:137;;10507:341;10574:38;10606:5;10574:38;:::i;:::-;10634:1;10648:154;10662:6;10659:1;10656:13;10648:154;;;10736:7;10730:14;10726:1;10721:3;10717:11;10710:35;10786:1;10777:7;10773:15;10762:26;;10684:4;10681:1;10677:12;10672:17;;10648:154;;;10831:6;10826:3;10822:16;10815:23;;10514:334;;10328:520;;10116:738;;10009:845;;;;:::o;10860:366::-;11002:3;11023:67;11087:2;11082:3;11023:67;:::i;:::-;11016:74;;11099:93;11188:3;11099:93;:::i;:::-;11217:2;11212:3;11208:12;11201:19;;10860:366;;;:::o;11232:::-;11374:3;11395:67;11459:2;11454:3;11395:67;:::i;:::-;11388:74;;11471:93;11560:3;11471:93;:::i;:::-;11589:2;11584:3;11580:12;11573:19;;11232:366;;;:::o;11604:::-;11746:3;11767:67;11831:2;11826:3;11767:67;:::i;:::-;11760:74;;11843:93;11932:3;11843:93;:::i;:::-;11961:2;11956:3;11952:12;11945:19;;11604:366;;;:::o;11976:::-;12118:3;12139:67;12203:2;12198:3;12139:67;:::i;:::-;12132:74;;12215:93;12304:3;12215:93;:::i;:::-;12333:2;12328:3;12324:12;12317:19;;11976:366;;;:::o;12348:::-;12490:3;12511:67;12575:2;12570:3;12511:67;:::i;:::-;12504:74;;12587:93;12676:3;12587:93;:::i;:::-;12705:2;12700:3;12696:12;12689:19;;12348:366;;;:::o;12720:::-;12862:3;12883:67;12947:2;12942:3;12883:67;:::i;:::-;12876:74;;12959:93;13048:3;12959:93;:::i;:::-;13077:2;13072:3;13068:12;13061:19;;12720:366;;;:::o;13092:::-;13234:3;13255:67;13319:2;13314:3;13255:67;:::i;:::-;13248:74;;13331:93;13420:3;13331:93;:::i;:::-;13449:2;13444:3;13440:12;13433:19;;13092:366;;;:::o;13464:::-;13606:3;13627:67;13691:2;13686:3;13627:67;:::i;:::-;13620:74;;13703:93;13792:3;13703:93;:::i;:::-;13821:2;13816:3;13812:12;13805:19;;13464:366;;;:::o;13836:::-;13978:3;13999:67;14063:2;14058:3;13999:67;:::i;:::-;13992:74;;14075:93;14164:3;14075:93;:::i;:::-;14193:2;14188:3;14184:12;14177:19;;13836:366;;;:::o;14208:::-;14350:3;14371:67;14435:2;14430:3;14371:67;:::i;:::-;14364:74;;14447:93;14536:3;14447:93;:::i;:::-;14565:2;14560:3;14556:12;14549:19;;14208:366;;;:::o;14580:::-;14722:3;14743:67;14807:2;14802:3;14743:67;:::i;:::-;14736:74;;14819:93;14908:3;14819:93;:::i;:::-;14937:2;14932:3;14928:12;14921:19;;14580:366;;;:::o;14952:::-;15094:3;15115:67;15179:2;15174:3;15115:67;:::i;:::-;15108:74;;15191:93;15280:3;15191:93;:::i;:::-;15309:2;15304:3;15300:12;15293:19;;14952:366;;;:::o;15324:::-;15466:3;15487:67;15551:2;15546:3;15487:67;:::i;:::-;15480:74;;15563:93;15652:3;15563:93;:::i;:::-;15681:2;15676:3;15672:12;15665:19;;15324:366;;;:::o;15696:::-;15838:3;15859:67;15923:2;15918:3;15859:67;:::i;:::-;15852:74;;15935:93;16024:3;15935:93;:::i;:::-;16053:2;16048:3;16044:12;16037:19;;15696:366;;;:::o;16068:::-;16210:3;16231:67;16295:2;16290:3;16231:67;:::i;:::-;16224:74;;16307:93;16396:3;16307:93;:::i;:::-;16425:2;16420:3;16416:12;16409:19;;16068:366;;;:::o;16440:::-;16582:3;16603:67;16667:2;16662:3;16603:67;:::i;:::-;16596:74;;16679:93;16768:3;16679:93;:::i;:::-;16797:2;16792:3;16788:12;16781:19;;16440:366;;;:::o;16812:400::-;16972:3;16993:84;17075:1;17070:3;16993:84;:::i;:::-;16986:91;;17086:93;17175:3;17086:93;:::i;:::-;17204:1;17199:3;17195:11;17188:18;;16812:400;;;:::o;17218:366::-;17360:3;17381:67;17445:2;17440:3;17381:67;:::i;:::-;17374:74;;17457:93;17546:3;17457:93;:::i;:::-;17575:2;17570:3;17566:12;17559:19;;17218:366;;;:::o;17590:::-;17732:3;17753:67;17817:2;17812:3;17753:67;:::i;:::-;17746:74;;17829:93;17918:3;17829:93;:::i;:::-;17947:2;17942:3;17938:12;17931:19;;17590:366;;;:::o;17962:::-;18104:3;18125:67;18189:2;18184:3;18125:67;:::i;:::-;18118:74;;18201:93;18290:3;18201:93;:::i;:::-;18319:2;18314:3;18310:12;18303:19;;17962:366;;;:::o;18334:::-;18476:3;18497:67;18561:2;18556:3;18497:67;:::i;:::-;18490:74;;18573:93;18662:3;18573:93;:::i;:::-;18691:2;18686:3;18682:12;18675:19;;18334:366;;;:::o;18706:::-;18848:3;18869:67;18933:2;18928:3;18869:67;:::i;:::-;18862:74;;18945:93;19034:3;18945:93;:::i;:::-;19063:2;19058:3;19054:12;19047:19;;18706:366;;;:::o;19078:::-;19220:3;19241:67;19305:2;19300:3;19241:67;:::i;:::-;19234:74;;19317:93;19406:3;19317:93;:::i;:::-;19435:2;19430:3;19426:12;19419:19;;19078:366;;;:::o;19450:398::-;19609:3;19630:83;19711:1;19706:3;19630:83;:::i;:::-;19623:90;;19722:93;19811:3;19722:93;:::i;:::-;19840:1;19835:3;19831:11;19824:18;;19450:398;;;:::o;19854:366::-;19996:3;20017:67;20081:2;20076:3;20017:67;:::i;:::-;20010:74;;20093:93;20182:3;20093:93;:::i;:::-;20211:2;20206:3;20202:12;20195:19;;19854:366;;;:::o;20226:::-;20368:3;20389:67;20453:2;20448:3;20389:67;:::i;:::-;20382:74;;20465:93;20554:3;20465:93;:::i;:::-;20583:2;20578:3;20574:12;20567:19;;20226:366;;;:::o;20598:365::-;20740:3;20761:66;20825:1;20820:3;20761:66;:::i;:::-;20754:73;;20836:93;20925:3;20836:93;:::i;:::-;20954:2;20949:3;20945:12;20938:19;;20598:365;;;:::o;20969:118::-;21056:24;21074:5;21056:24;:::i;:::-;21051:3;21044:37;20969:118;;:::o;21093:275::-;21225:3;21247:95;21338:3;21329:6;21247:95;:::i;:::-;21240:102;;21359:3;21352:10;;21093:275;;;;:::o;21374:435::-;21554:3;21576:95;21667:3;21658:6;21576:95;:::i;:::-;21569:102;;21688:95;21779:3;21770:6;21688:95;:::i;:::-;21681:102;;21800:3;21793:10;;21374:435;;;;;:::o;21815:541::-;22048:3;22070:95;22161:3;22152:6;22070:95;:::i;:::-;22063:102;;22182:148;22326:3;22182:148;:::i;:::-;22175:155;;22347:3;22340:10;;21815:541;;;;:::o;22362:269::-;22491:3;22513:92;22601:3;22592:6;22513:92;:::i;:::-;22506:99;;22622:3;22615:10;;22362:269;;;;:::o;22637:379::-;22821:3;22843:147;22986:3;22843:147;:::i;:::-;22836:154;;23007:3;23000:10;;22637:379;;;:::o;23022:222::-;23115:4;23153:2;23142:9;23138:18;23130:26;;23166:71;23234:1;23223:9;23219:17;23210:6;23166:71;:::i;:::-;23022:222;;;;:::o;23250:640::-;23445:4;23483:3;23472:9;23468:19;23460:27;;23497:71;23565:1;23554:9;23550:17;23541:6;23497:71;:::i;:::-;23578:72;23646:2;23635:9;23631:18;23622:6;23578:72;:::i;:::-;23660;23728:2;23717:9;23713:18;23704:6;23660:72;:::i;:::-;23779:9;23773:4;23769:20;23764:2;23753:9;23749:18;23742:48;23807:76;23878:4;23869:6;23807:76;:::i;:::-;23799:84;;23250:640;;;;;;;:::o;23896:210::-;23983:4;24021:2;24010:9;24006:18;23998:26;;24034:65;24096:1;24085:9;24081:17;24072:6;24034:65;:::i;:::-;23896:210;;;;:::o;24112:313::-;24225:4;24263:2;24252:9;24248:18;24240:26;;24312:9;24306:4;24302:20;24298:1;24287:9;24283:17;24276:47;24340:78;24413:4;24404:6;24340:78;:::i;:::-;24332:86;;24112:313;;;;:::o;24431:419::-;24597:4;24635:2;24624:9;24620:18;24612:26;;24684:9;24678:4;24674:20;24670:1;24659:9;24655:17;24648:47;24712:131;24838:4;24712:131;:::i;:::-;24704:139;;24431:419;;;:::o;24856:::-;25022:4;25060:2;25049:9;25045:18;25037:26;;25109:9;25103:4;25099:20;25095:1;25084:9;25080:17;25073:47;25137:131;25263:4;25137:131;:::i;:::-;25129:139;;24856:419;;;:::o;25281:::-;25447:4;25485:2;25474:9;25470:18;25462:26;;25534:9;25528:4;25524:20;25520:1;25509:9;25505:17;25498:47;25562:131;25688:4;25562:131;:::i;:::-;25554:139;;25281:419;;;:::o;25706:::-;25872:4;25910:2;25899:9;25895:18;25887:26;;25959:9;25953:4;25949:20;25945:1;25934:9;25930:17;25923:47;25987:131;26113:4;25987:131;:::i;:::-;25979:139;;25706:419;;;:::o;26131:::-;26297:4;26335:2;26324:9;26320:18;26312:26;;26384:9;26378:4;26374:20;26370:1;26359:9;26355:17;26348:47;26412:131;26538:4;26412:131;:::i;:::-;26404:139;;26131:419;;;:::o;26556:::-;26722:4;26760:2;26749:9;26745:18;26737:26;;26809:9;26803:4;26799:20;26795:1;26784:9;26780:17;26773:47;26837:131;26963:4;26837:131;:::i;:::-;26829:139;;26556:419;;;:::o;26981:::-;27147:4;27185:2;27174:9;27170:18;27162:26;;27234:9;27228:4;27224:20;27220:1;27209:9;27205:17;27198:47;27262:131;27388:4;27262:131;:::i;:::-;27254:139;;26981:419;;;:::o;27406:::-;27572:4;27610:2;27599:9;27595:18;27587:26;;27659:9;27653:4;27649:20;27645:1;27634:9;27630:17;27623:47;27687:131;27813:4;27687:131;:::i;:::-;27679:139;;27406:419;;;:::o;27831:::-;27997:4;28035:2;28024:9;28020:18;28012:26;;28084:9;28078:4;28074:20;28070:1;28059:9;28055:17;28048:47;28112:131;28238:4;28112:131;:::i;:::-;28104:139;;27831:419;;;:::o;28256:::-;28422:4;28460:2;28449:9;28445:18;28437:26;;28509:9;28503:4;28499:20;28495:1;28484:9;28480:17;28473:47;28537:131;28663:4;28537:131;:::i;:::-;28529:139;;28256:419;;;:::o;28681:::-;28847:4;28885:2;28874:9;28870:18;28862:26;;28934:9;28928:4;28924:20;28920:1;28909:9;28905:17;28898:47;28962:131;29088:4;28962:131;:::i;:::-;28954:139;;28681:419;;;:::o;29106:::-;29272:4;29310:2;29299:9;29295:18;29287:26;;29359:9;29353:4;29349:20;29345:1;29334:9;29330:17;29323:47;29387:131;29513:4;29387:131;:::i;:::-;29379:139;;29106:419;;;:::o;29531:::-;29697:4;29735:2;29724:9;29720:18;29712:26;;29784:9;29778:4;29774:20;29770:1;29759:9;29755:17;29748:47;29812:131;29938:4;29812:131;:::i;:::-;29804:139;;29531:419;;;:::o;29956:::-;30122:4;30160:2;30149:9;30145:18;30137:26;;30209:9;30203:4;30199:20;30195:1;30184:9;30180:17;30173:47;30237:131;30363:4;30237:131;:::i;:::-;30229:139;;29956:419;;;:::o;30381:::-;30547:4;30585:2;30574:9;30570:18;30562:26;;30634:9;30628:4;30624:20;30620:1;30609:9;30605:17;30598:47;30662:131;30788:4;30662:131;:::i;:::-;30654:139;;30381:419;;;:::o;30806:::-;30972:4;31010:2;30999:9;30995:18;30987:26;;31059:9;31053:4;31049:20;31045:1;31034:9;31030:17;31023:47;31087:131;31213:4;31087:131;:::i;:::-;31079:139;;30806:419;;;:::o;31231:::-;31397:4;31435:2;31424:9;31420:18;31412:26;;31484:9;31478:4;31474:20;31470:1;31459:9;31455:17;31448:47;31512:131;31638:4;31512:131;:::i;:::-;31504:139;;31231:419;;;:::o;31656:::-;31822:4;31860:2;31849:9;31845:18;31837:26;;31909:9;31903:4;31899:20;31895:1;31884:9;31880:17;31873:47;31937:131;32063:4;31937:131;:::i;:::-;31929:139;;31656:419;;;:::o;32081:::-;32247:4;32285:2;32274:9;32270:18;32262:26;;32334:9;32328:4;32324:20;32320:1;32309:9;32305:17;32298:47;32362:131;32488:4;32362:131;:::i;:::-;32354:139;;32081:419;;;:::o;32506:::-;32672:4;32710:2;32699:9;32695:18;32687:26;;32759:9;32753:4;32749:20;32745:1;32734:9;32730:17;32723:47;32787:131;32913:4;32787:131;:::i;:::-;32779:139;;32506:419;;;:::o;32931:::-;33097:4;33135:2;33124:9;33120:18;33112:26;;33184:9;33178:4;33174:20;33170:1;33159:9;33155:17;33148:47;33212:131;33338:4;33212:131;:::i;:::-;33204:139;;32931:419;;;:::o;33356:::-;33522:4;33560:2;33549:9;33545:18;33537:26;;33609:9;33603:4;33599:20;33595:1;33584:9;33580:17;33573:47;33637:131;33763:4;33637:131;:::i;:::-;33629:139;;33356:419;;;:::o;33781:::-;33947:4;33985:2;33974:9;33970:18;33962:26;;34034:9;34028:4;34024:20;34020:1;34009:9;34005:17;33998:47;34062:131;34188:4;34062:131;:::i;:::-;34054:139;;33781:419;;;:::o;34206:::-;34372:4;34410:2;34399:9;34395:18;34387:26;;34459:9;34453:4;34449:20;34445:1;34434:9;34430:17;34423:47;34487:131;34613:4;34487:131;:::i;:::-;34479:139;;34206:419;;;:::o;34631:::-;34797:4;34835:2;34824:9;34820:18;34812:26;;34884:9;34878:4;34874:20;34870:1;34859:9;34855:17;34848:47;34912:131;35038:4;34912:131;:::i;:::-;34904:139;;34631:419;;;:::o;35056:222::-;35149:4;35187:2;35176:9;35172:18;35164:26;;35200:71;35268:1;35257:9;35253:17;35244:6;35200:71;:::i;:::-;35056:222;;;;:::o;35284:129::-;35318:6;35345:20;;:::i;:::-;35335:30;;35374:33;35402:4;35394:6;35374:33;:::i;:::-;35284:129;;;:::o;35419:75::-;35452:6;35485:2;35479:9;35469:19;;35419:75;:::o;35500:307::-;35561:4;35651:18;35643:6;35640:30;35637:56;;;35673:18;;:::i;:::-;35637:56;35711:29;35733:6;35711:29;:::i;:::-;35703:37;;35795:4;35789;35785:15;35777:23;;35500:307;;;:::o;35813:308::-;35875:4;35965:18;35957:6;35954:30;35951:56;;;35987:18;;:::i;:::-;35951:56;36025:29;36047:6;36025:29;:::i;:::-;36017:37;;36109:4;36103;36099:15;36091:23;;35813:308;;;:::o;36127:141::-;36176:4;36199:3;36191:11;;36222:3;36219:1;36212:14;36256:4;36253:1;36243:18;36235:26;;36127:141;;;:::o;36274:98::-;36325:6;36359:5;36353:12;36343:22;;36274:98;;;:::o;36378:99::-;36430:6;36464:5;36458:12;36448:22;;36378:99;;;:::o;36483:168::-;36566:11;36600:6;36595:3;36588:19;36640:4;36635:3;36631:14;36616:29;;36483:168;;;;:::o;36657:147::-;36758:11;36795:3;36780:18;;36657:147;;;;:::o;36810:169::-;36894:11;36928:6;36923:3;36916:19;36968:4;36963:3;36959:14;36944:29;;36810:169;;;;:::o;36985:148::-;37087:11;37124:3;37109:18;;36985:148;;;;:::o;37139:305::-;37179:3;37198:20;37216:1;37198:20;:::i;:::-;37193:25;;37232:20;37250:1;37232:20;:::i;:::-;37227:25;;37386:1;37318:66;37314:74;37311:1;37308:81;37305:107;;;37392:18;;:::i;:::-;37305:107;37436:1;37433;37429:9;37422:16;;37139:305;;;;:::o;37450:185::-;37490:1;37507:20;37525:1;37507:20;:::i;:::-;37502:25;;37541:20;37559:1;37541:20;:::i;:::-;37536:25;;37580:1;37570:35;;37585:18;;:::i;:::-;37570:35;37627:1;37624;37620:9;37615:14;;37450:185;;;;:::o;37641:348::-;37681:7;37704:20;37722:1;37704:20;:::i;:::-;37699:25;;37738:20;37756:1;37738:20;:::i;:::-;37733:25;;37926:1;37858:66;37854:74;37851:1;37848:81;37843:1;37836:9;37829:17;37825:105;37822:131;;;37933:18;;:::i;:::-;37822:131;37981:1;37978;37974:9;37963:20;;37641:348;;;;:::o;37995:191::-;38035:4;38055:20;38073:1;38055:20;:::i;:::-;38050:25;;38089:20;38107:1;38089:20;:::i;:::-;38084:25;;38128:1;38125;38122:8;38119:34;;;38133:18;;:::i;:::-;38119:34;38178:1;38175;38171:9;38163:17;;37995:191;;;;:::o;38192:96::-;38229:7;38258:24;38276:5;38258:24;:::i;:::-;38247:35;;38192:96;;;:::o;38294:90::-;38328:7;38371:5;38364:13;38357:21;38346:32;;38294:90;;;:::o;38390:149::-;38426:7;38466:66;38459:5;38455:78;38444:89;;38390:149;;;:::o;38545:126::-;38582:7;38622:42;38615:5;38611:54;38600:65;;38545:126;;;:::o;38677:77::-;38714:7;38743:5;38732:16;;38677:77;;;:::o;38760:86::-;38795:7;38835:4;38828:5;38824:16;38813:27;;38760:86;;;:::o;38852:154::-;38936:6;38931:3;38926;38913:30;38998:1;38989:6;38984:3;38980:16;38973:27;38852:154;;;:::o;39012:307::-;39080:1;39090:113;39104:6;39101:1;39098:13;39090:113;;;39189:1;39184:3;39180:11;39174:18;39170:1;39165:3;39161:11;39154:39;39126:2;39123:1;39119:10;39114:15;;39090:113;;;39221:6;39218:1;39215:13;39212:101;;;39301:1;39292:6;39287:3;39283:16;39276:27;39212:101;39061:258;39012:307;;;:::o;39325:320::-;39369:6;39406:1;39400:4;39396:12;39386:22;;39453:1;39447:4;39443:12;39474:18;39464:81;;39530:4;39522:6;39518:17;39508:27;;39464:81;39592:2;39584:6;39581:14;39561:18;39558:38;39555:84;;;39611:18;;:::i;:::-;39555:84;39376:269;39325:320;;;:::o;39651:281::-;39734:27;39756:4;39734:27;:::i;:::-;39726:6;39722:40;39864:6;39852:10;39849:22;39828:18;39816:10;39813:34;39810:62;39807:88;;;39875:18;;:::i;:::-;39807:88;39915:10;39911:2;39904:22;39694:238;39651:281;;:::o;39938:233::-;39977:3;40000:24;40018:5;40000:24;:::i;:::-;39991:33;;40046:66;40039:5;40036:77;40033:103;;;40116:18;;:::i;:::-;40033:103;40163:1;40156:5;40152:13;40145:20;;39938:233;;;:::o;40177:167::-;40214:3;40237:22;40253:5;40237:22;:::i;:::-;40228:31;;40281:4;40274:5;40271:15;40268:41;;;40289:18;;:::i;:::-;40268:41;40336:1;40329:5;40325:13;40318:20;;40177:167;;;:::o;40350:176::-;40382:1;40399:20;40417:1;40399:20;:::i;:::-;40394:25;;40433:20;40451:1;40433:20;:::i;:::-;40428:25;;40472:1;40462:35;;40477:18;;:::i;:::-;40462:35;40518:1;40515;40511:9;40506:14;;40350:176;;;;:::o;40532:180::-;40580:77;40577:1;40570:88;40677:4;40674:1;40667:15;40701:4;40698:1;40691:15;40718:180;40766:77;40763:1;40756:88;40863:4;40860:1;40853:15;40887:4;40884:1;40877:15;40904:180;40952:77;40949:1;40942:88;41049:4;41046:1;41039:15;41073:4;41070:1;41063:15;41090:180;41138:77;41135:1;41128:88;41235:4;41232:1;41225:15;41259:4;41256:1;41249:15;41276:180;41324:77;41321:1;41314:88;41421:4;41418:1;41411:15;41445:4;41442:1;41435:15;41462:117;41571:1;41568;41561:12;41585:117;41694:1;41691;41684:12;41708:117;41817:1;41814;41807:12;41831:117;41940:1;41937;41930:12;41954:102;41995:6;42046:2;42042:7;42037:2;42030:5;42026:14;42022:28;42012:38;;41954:102;;;:::o;42062:237::-;42202:34;42198:1;42190:6;42186:14;42179:58;42271:20;42266:2;42258:6;42254:15;42247:45;42062:237;:::o;42305:173::-;42445:25;42441:1;42433:6;42429:14;42422:49;42305:173;:::o;42484:225::-;42624:34;42620:1;42612:6;42608:14;42601:58;42693:8;42688:2;42680:6;42676:15;42669:33;42484:225;:::o;42715:178::-;42855:30;42851:1;42843:6;42839:14;42832:54;42715:178;:::o;42899:165::-;43039:17;43035:1;43027:6;43023:14;43016:41;42899:165;:::o;43070:223::-;43210:34;43206:1;43198:6;43194:14;43187:58;43279:6;43274:2;43266:6;43262:15;43255:31;43070:223;:::o;43299:175::-;43439:27;43435:1;43427:6;43423:14;43416:51;43299:175;:::o;43480:231::-;43620:34;43616:1;43608:6;43604:14;43597:58;43689:14;43684:2;43676:6;43672:15;43665:39;43480:231;:::o;43717:243::-;43857:34;43853:1;43845:6;43841:14;43834:58;43926:26;43921:2;43913:6;43909:15;43902:51;43717:243;:::o;43966:165::-;44106:17;44102:1;44094:6;44090:14;44083:41;43966:165;:::o;44137:229::-;44277:34;44273:1;44265:6;44261:14;44254:58;44346:12;44341:2;44333:6;44329:15;44322:37;44137:229;:::o;44372:228::-;44512:34;44508:1;44500:6;44496:14;44489:58;44581:11;44576:2;44568:6;44564:15;44557:36;44372:228;:::o;44606:168::-;44746:20;44742:1;44734:6;44730:14;44723:44;44606:168;:::o;44780:182::-;44920:34;44916:1;44908:6;44904:14;44897:58;44780:182;:::o;44968:236::-;45108:34;45104:1;45096:6;45092:14;45085:58;45177:19;45172:2;45164:6;45160:15;45153:44;44968:236;:::o;45210:231::-;45350:34;45346:1;45338:6;45334:14;45327:58;45419:14;45414:2;45406:6;45402:15;45395:39;45210:231;:::o;45447:155::-;45587:7;45583:1;45575:6;45571:14;45564:31;45447:155;:::o;45608:182::-;45748:34;45744:1;45736:6;45732:14;45725:58;45608:182;:::o;45796:228::-;45936:34;45932:1;45924:6;45920:14;45913:58;46005:11;46000:2;45992:6;45988:15;45981:36;45796:228;:::o;46030:234::-;46170:34;46166:1;46158:6;46154:14;46147:58;46239:17;46234:2;46226:6;46222:15;46215:42;46030:234;:::o;46270:167::-;46410:19;46406:1;46398:6;46394:14;46387:43;46270:167;:::o;46443:220::-;46583:34;46579:1;46571:6;46567:14;46560:58;46652:3;46647:2;46639:6;46635:15;46628:28;46443:220;:::o;46669:164::-;46809:16;46805:1;46797:6;46793:14;46786:40;46669:164;:::o;46839:114::-;;:::o;46959:236::-;47099:34;47095:1;47087:6;47083:14;47076:58;47168:19;47163:2;47155:6;47151:15;47144:44;46959:236;:::o;47201:166::-;47341:18;47337:1;47329:6;47325:14;47318:42;47201:166;:::o;47373:158::-;47513:10;47509:1;47501:6;47497:14;47490:34;47373:158;:::o;47537:122::-;47610:24;47628:5;47610:24;:::i;:::-;47603:5;47600:35;47590:63;;47649:1;47646;47639:12;47590:63;47537:122;:::o;47665:116::-;47735:21;47750:5;47735:21;:::i;:::-;47728:5;47725:32;47715:60;;47771:1;47768;47761:12;47715:60;47665:116;:::o;47787:120::-;47859:23;47876:5;47859:23;:::i;:::-;47852:5;47849:34;47839:62;;47897:1;47894;47887:12;47839:62;47787:120;:::o;47913:122::-;47986:24;48004:5;47986:24;:::i;:::-;47979:5;47976:35;47966:63;;48025:1;48022;48015:12;47966:63;47913:122;:::o
Swarm Source
ipfs://21f67c6f7e67ca23fec6295d968e73c418aba309d056c8ce738daa9af79b98d9
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.