ERC-721
NFT
Overview
Max Total Supply
10,000 GFS
Holders
3,448
Market
Volume (24H)
0.0002 ETH
Min Price (24H)
$0.27 @ 0.000100 ETH
Max Price (24H)
$0.27 @ 0.000100 ETH
Other Info
Token Contract
Balance
1 GFSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GlueFactoryShow
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; contract GlueFactoryShow is ERC721 { event Mint(address indexed from, uint256 indexed tokenId); modifier mintingStarted() { require( startMintDate != 0 && startMintDate <= block.timestamp, "You are too early" ); _; } modifier callerNotAContract() { require(tx.origin == msg.sender, "The caller can only be a user and not a contract"); _; } // 10k total NFTs uint256 private totalHorses = 10000; // Each transaction allows the user to mint only 10 NFTs. One user can't mint more than 150 NFTs. uint256 private maxHorsesPerWallet = 150; uint256 private maxHorsesPerTransaction = 10; // Setting Mint date to 4pm PST, 08/08/2021 uint256 private startMintDate = 1628524800; // Price per NFT: 0.1 ETH uint256 private horsePrice = 100000000000000000; uint256 private totalMintedHorses = 0; uint256 public premintCount = 125; bool public premintingComplete = false; // IPFS base URI for NFT metadata for OpenSea string private baseURI = "https://ipfs.io/ipfs/Qmbd9N5yse7xAUiQAHrdezaJH6z2VAW5jc7FavLxDvK5kk/"; // Ledger of NFTs minted and owned by each unique wallet address. mapping(address => uint256) private claimedHorsesPerWallet; uint16[] availableHorses; constructor() ERC721("Glue Factory Show", "GFS") { addAvailableHorses(); } // ONLY OWNER /** * @dev Allows to withdraw the Ether in the contract to the address of the owner. */ function withdraw() external onlyOwner { uint256 totalBalance = address(this).balance; payable(msg.sender).transfer(totalBalance); } /** * @dev Sets the base URI for the API that provides the NFT data. */ function setBaseTokenURI(string memory _uri) external onlyOwner { baseURI = _uri; } /** * @dev Sets the mint price for each horse */ function setHorsePrice(uint256 _horsePrice) external onlyOwner { horsePrice = _horsePrice; } /** * @dev Adds all horses to the available list. */ function addAvailableHorses() internal onlyOwner { for (uint16 i = 0; i <= 9999; i++) { availableHorses.push(i); } } /** * @dev Handpick horses for promised giveaways. */ function allocateSpecificHorsesForGiveaways(uint256[] memory tokenIds) internal { require(availableHorses.length == 0, "Available horses are already set"); _batchMint(msg.sender, tokenIds); totalMintedHorses += tokenIds.length; } /** * @dev Prem */ function premintHorses() external onlyOwner { require( !premintingComplete, "You can only premint the horses once" ); require( availableHorses.length >= premintCount, "No horses left to be claimed" ); totalMintedHorses += premintCount; for (uint256 i; i < premintCount; i++) { _mint(msg.sender, getHorseToBeClaimed()); } premintingComplete = true; } // END ONLY OWNER FUNCTIONS /** * @dev Claim up to 10 horses at once */ function mintHorses(uint256 amount) external payable callerNotAContract mintingStarted { require( msg.value >= horsePrice * amount, "Not enough Ether to claim the horses" ); require( claimedHorsesPerWallet[msg.sender] + amount <= maxHorsesPerWallet, "You cannot claim more horses" ); require(availableHorses.length >= amount, "No horses left to be claimed"); uint256[] memory tokenIds = new uint256[](amount); claimedHorsesPerWallet[msg.sender] += amount; totalMintedHorses += amount; for (uint256 i; i < amount; i++) { tokenIds[i] = getHorseToBeClaimed(); } _batchMint(msg.sender, tokenIds); } /** * @dev Returns the tokenId by index */ function tokenByIndex(uint256 tokenId) external view returns (uint256) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); return tokenId; } /** * @dev Returns the base URI for the tokens API. */ function baseTokenURI() external view returns (string memory) { return baseURI; } /** * @dev Returns how many horses are still available to be claimed */ function getAvailableHorses() external view returns (uint256) { return availableHorses.length; } /** * @dev Returns the claim price */ function gethorsePrice() external view returns (uint256) { return horsePrice; } /** * @dev Returns the minting start date */ function getMintingStartDate() external view returns (uint256) { return startMintDate; } /** * @dev Returns the total supply */ function totalSupply() external view virtual returns (uint256) { return totalMintedHorses; } // Private and Internal functions /** * @dev Returns a random available horse to be claimed */ function getHorseToBeClaimed() private returns (uint256) { uint256 random = _getRandomNumber(availableHorses.length); uint256 tokenId = uint256(availableHorses[random]); availableHorses[random] = availableHorses[availableHorses.length - 1]; availableHorses.pop(); return tokenId; } /** * @dev Generates a pseudo-random number. */ function _getRandomNumber(uint256 _upper) private view returns (uint256) { uint256 random = uint256( keccak256( abi.encodePacked( availableHorses.length, blockhash(block.number - 1), block.coinbase, block.difficulty, msg.sender ) ) ); return random % _upper; } /** * @dev See {ERC721}. */ function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mulScale( uint256 x, uint256 y, uint128 scale ) internal pure returns (uint256) { uint256 a = x / scale; uint256 b = x % scale; uint256 c = y / scale; uint256 d = y % scale; return a * c * scale + a * d + b * c + (b * d) / scale; } }
// 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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// 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 "./IERC721Enumerable.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; import "./Ownable.sol"; import "./Ownable.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, Ownable { 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) internal _owners; // Mapping owner address to token count mapping(address => uint256) internal _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}. 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 || ERC721.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 || ERC721.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); } function _batchMint(address to, uint256[] memory tokenIds) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); _balances[to] += tokenIds.length; for (uint256 i; i < tokenIds.length; i++) { require(!_exists(tokenIds[i]), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenIds[i]); _owners[tokenIds[i]] = to; emit Transfer(address(0), to, tokenIds[i]); } } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { // solhint-disable-next-line no-inline-assembly 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` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// 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 enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[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":[],"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":"from","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAvailableHorses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintingStartDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gethorsePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}],"name":"mintHorses","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":"premintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premintHorses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"premintingComplete","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_horsePrice","type":"uint256"}],"name":"setHorsePrice","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":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526127106007556096600855600a6009556361115100600a5567016345785d8a0000600b556000600c55607d600d556000600e60006101000a81548160ff021916908315150217905550604051806080016040528060448152602001620046f660449139600f90805190602001906200007e92919062000327565b503480156200008c57600080fd5b506040518060400160405280601181526020017f476c756520466163746f72792053686f770000000000000000000000000000008152506040518060400160405280600381526020017f474653000000000000000000000000000000000000000000000000000000000081525060006200010b620001f360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508160019080519060200190620001c192919062000327565b508060029080519060200190620001da92919062000327565b505050620001ed620001fb60201b60201c565b6200052c565b600033905090565b6200020b620001f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000231620002fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200028a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028190620003fe565b60405180910390fd5b60005b61270f8161ffff1611620002fb5760118190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055508080620002f29062000475565b9150506200028d565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000335906200043f565b90600052602060002090601f016020900481019282620003595760008555620003a5565b82601f106200037457805160ff1916838001178555620003a5565b82800160010185558215620003a5579182015b82811115620003a457825182559160200191906001019062000387565b5b509050620003b49190620003b8565b5090565b5b80821115620003d3576000816000905550600101620003b9565b5090565b6000620003e660208362000420565b9150620003f38262000503565b602082019050919050565b600060208201905081810360008301526200041981620003d7565b9050919050565b600082825260208201905092915050565b600061ffff82169050919050565b600060028204905060018216806200045857607f821691505b602082108114156200046f576200046e620004d4565b5b50919050565b6000620004828262000431565b915061ffff8214156200049a5762000499620004a5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6141ba806200053c6000396000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c51461061c578063ead1750614610659578063f2fde38b14610684578063f56bce83146106ad576101c2565b8063b88d4fde14610560578063c87b56dd14610589578063d547cfb7146105c6578063d7e3b322146105f1576101c2565b806395d89b41116100d157806395d89b41146104b85780639b3c4c8d146104e35780639d9ee6731461050c578063a22cb46514610537576101c2565b8063715018a61461044b5780637279dc5f146104625780638da5cb5b1461048d576101c2565b806330176e13116101645780634f6ccce71161013e5780634f6ccce71461037d5780636352211e146103ba5780636fcbd49f146103f757806370a082311461040e576101c2565b806330176e13146103145780633ccfd60b1461033d57806342842e0e14610354576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806318160ddd146102955780632344e918146102c057806323b872dd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612dca565b6106c9565b6040516101fb919061339e565b60405180910390f35b34801561021057600080fd5b506102196107ab565b60405161022691906133b9565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612e5d565b61083d565b6040516102639190613337565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612d8e565b6108c2565b005b3480156102a157600080fd5b506102aa6109da565b6040516102b7919061369b565b60405180910390f35b3480156102cc57600080fd5b506102d56109e4565b6040516102e2919061339e565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612c88565b6109f7565b005b34801561032057600080fd5b5061033b60048036038101906103369190612e1c565b610a57565b005b34801561034957600080fd5b50610352610aed565b005b34801561036057600080fd5b5061037b60048036038101906103769190612c88565b610bb8565b005b34801561038957600080fd5b506103a4600480360381019061039f9190612e5d565b610bd8565b6040516103b1919061369b565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190612e5d565b610c2a565b6040516103ee9190613337565b60405180910390f35b34801561040357600080fd5b5061040c610cdc565b005b34801561041a57600080fd5b5061043560048036038101906104309190612c23565b610e5c565b604051610442919061369b565b60405180910390f35b34801561045757600080fd5b50610460610f14565b005b34801561046e57600080fd5b5061047761104e565b604051610484919061369b565b60405180910390f35b34801561049957600080fd5b506104a261105b565b6040516104af9190613337565b60405180910390f35b3480156104c457600080fd5b506104cd611084565b6040516104da91906133b9565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190612e5d565b611116565b005b34801561051857600080fd5b5061052161119c565b60405161052e919061369b565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612d52565b6111a2565b005b34801561056c57600080fd5b5061058760048036038101906105829190612cd7565b611323565b005b34801561059557600080fd5b506105b060048036038101906105ab9190612e5d565b611385565b6040516105bd91906133b9565b60405180910390f35b3480156105d257600080fd5b506105db61142c565b6040516105e891906133b9565b60405180910390f35b3480156105fd57600080fd5b506106066114be565b604051610613919061369b565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e9190612c4c565b6114c8565b604051610650919061339e565b60405180910390f35b34801561066557600080fd5b5061066e61155c565b60405161067b919061369b565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612c23565b611566565b005b6106c760048036038101906106c29190612e5d565b61170f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061079457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107a457506107a382611a54565b5b9050919050565b6060600180546107ba90613967565b80601f01602080910402602001604051908101604052809291908181526020018280546107e690613967565b80156108335780601f1061080857610100808354040283529160200191610833565b820191906000526020600020905b81548152906001019060200180831161081657829003601f168201915b5050505050905090565b600061084882611abe565b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e9061359b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108cd82610c2a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109359061363b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661095d611b2a565b73ffffffffffffffffffffffffffffffffffffffff16148061098c575061098b81610986611b2a565b6114c8565b5b6109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c2906134fb565b60405180910390fd5b6109d58383611b32565b505050565b6000600c54905090565b600e60009054906101000a900460ff1681565b610a08610a02611b2a565b82611beb565b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e9061365b565b60405180910390fd5b610a52838383611cc9565b505050565b610a5f611b2a565b73ffffffffffffffffffffffffffffffffffffffff16610a7d61105b565b73ffffffffffffffffffffffffffffffffffffffff1614610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca906135bb565b60405180910390fd5b80600f9080519060200190610ae9929190612a47565b5050565b610af5611b2a565b73ffffffffffffffffffffffffffffffffffffffff16610b1361105b565b73ffffffffffffffffffffffffffffffffffffffff1614610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b60906135bb565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bb4573d6000803e3d6000fd5b5050565b610bd383838360405180602001604052806000815250611323565b505050565b6000610be382611abe565b610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c19906134db565b60405180910390fd5b819050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca9061355b565b60405180910390fd5b80915050919050565b610ce4611b2a565b73ffffffffffffffffffffffffffffffffffffffff16610d0261105b565b73ffffffffffffffffffffffffffffffffffffffff1614610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f906135bb565b60405180910390fd5b600e60009054906101000a900460ff1615610da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9f9061347b565b60405180910390fd5b600d546011805490501015610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de99061361b565b60405180910390fd5b600d54600c6000828254610e069190613780565b9250508190555060005b600d54811015610e3e57610e2b33610e26611f25565b6120e4565b8080610e36906139ca565b915050610e10565b506001600e60006101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec49061353b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f1c611b2a565b73ffffffffffffffffffffffffffffffffffffffff16610f3a61105b565b73ffffffffffffffffffffffffffffffffffffffff1614610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f87906135bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601180549050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461109390613967565b80601f01602080910402602001604051908101604052809291908181526020018280546110bf90613967565b801561110c5780601f106110e15761010080835404028352916020019161110c565b820191906000526020600020905b8154815290600101906020018083116110ef57829003601f168201915b5050505050905090565b61111e611b2a565b73ffffffffffffffffffffffffffffffffffffffff1661113c61105b565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611189906135bb565b60405180910390fd5b80600b8190555050565b600d5481565b6111aa611b2a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906134bb565b60405180910390fd5b8060066000611225611b2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112d2611b2a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611317919061339e565b60405180910390a35050565b61133461132e611b2a565b83611beb565b611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a9061365b565b60405180910390fd5b61137f848484846122b2565b50505050565b606061139082611abe565b6113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c6906135fb565b60405180910390fd5b60006113d961230e565b905060008151116113f95760405180602001604052806000815250611424565b80611403846123a0565b6040516020016114149291906132b4565b6040516020818303038152906040525b915050919050565b6060600f805461143b90613967565b80601f016020809104026020016040519081016040528092919081815260200182805461146790613967565b80156114b45780601f10611489576101008083540402835291602001916114b4565b820191906000526020600020905b81548152906001019060200180831161149757829003601f168201915b5050505050905090565b6000600b54905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600a54905090565b61156e611b2a565b73ffffffffffffffffffffffffffffffffffffffff1661158c61105b565b73ffffffffffffffffffffffffffffffffffffffff16146115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d9906135bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116499061343b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461177d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117749061341b565b60405180910390fd5b6000600a5414158015611792575042600a5411155b6117d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c89061351b565b60405180910390fd5b80600b546117df9190613807565b341015611821576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118189061367b565b60405180910390fd5b60085481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461186f9190613780565b11156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906133db565b60405180910390fd5b8060118054905010156118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef9061361b565b60405180910390fd5b60008167ffffffffffffffff81111561193a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156119685781602001602082028036833780820191505090505b50905081601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ba9190613780565b9250508190555081600c60008282546119d39190613780565b9250508190555060005b82811015611a45576119ed611f25565b828281518110611a26577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611a3d906139ca565b9150506119dd565b50611a50338261254d565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ba583610c2a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bf682611abe565b611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c906134db565b60405180910390fd5b6000611c4083610c2a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611caf57508373ffffffffffffffffffffffffffffffffffffffff16611c978461083d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cc05750611cbf81856114c8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ce982610c2a565b73ffffffffffffffffffffffffffffffffffffffff1614611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906135db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da69061349b565b60405180910390fd5b611dba83838361283b565b611dc5600082611b32565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e159190613861565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e6c9190613780565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080611f36601180549050612840565b9050600060118281548110611f74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16905060116001601180549050611fb29190613861565b81548110611fe9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660118381548110612047577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060118054806120ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff02191690559055809250505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b9061357b565b60405180910390fd5b61215d81611abe565b1561219d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121949061345b565b60405180910390fd5b6121a96000838361283b565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121f99190613780565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6122bd848484611cc9565b6122c98484848461289d565b612308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ff906133fb565b60405180910390fd5b50505050565b6060600f805461231d90613967565b80601f016020809104026020016040519081016040528092919081815260200182805461234990613967565b80156123965780601f1061236b57610100808354040283529160200191612396565b820191906000526020600020905b81548152906001019060200180831161237957829003601f168201915b5050505050905090565b606060008214156123e8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612548565b600082905060005b6000821461241a578080612403906139ca565b915050600a8261241391906137d6565b91506123f0565b60008167ffffffffffffffff81111561245c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561248e5781602001600182028036833780820191505090505b5090505b60008514612541576001826124a79190613861565b9150600a856124b69190613a5d565b60306124c29190613780565b60f81b8183815181106124fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561253a91906137d6565b9450612492565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b49061357b565b60405180910390fd5b8051600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260d9190613780565b9250508190555060005b81518110156128365761266982828151811061265c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611abe565b156126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a09061345b565b60405180910390fd5b6126f56000848484815181106126e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161283b565b8260036000848481518110612733577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181815181106127c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808061282e906139ca565b915050612617565b505050565b505050565b6000806011805490506001436128569190613861565b4041443360405160200161286e9594939291906132d8565b6040516020818303038152906040528051906020012060001c905082816128959190613a5d565b915050919050565b60006128be8473ffffffffffffffffffffffffffffffffffffffff16612a34565b15612a27578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128e7611b2a565b8786866040518563ffffffff1660e01b81526004016129099493929190613352565b602060405180830381600087803b15801561292357600080fd5b505af192505050801561295457506040513d601f19601f820116820180604052508101906129519190612df3565b60015b6129d7573d8060008114612984576040519150601f19603f3d011682016040523d82523d6000602084013e612989565b606091505b506000815114156129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c6906133fb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a2c565b600190505b949350505050565b600080823b905060008111915050919050565b828054612a5390613967565b90600052602060002090601f016020900481019282612a755760008555612abc565b82601f10612a8e57805160ff1916838001178555612abc565b82800160010185558215612abc579182015b82811115612abb578251825591602001919060010190612aa0565b5b509050612ac99190612acd565b5090565b5b80821115612ae6576000816000905550600101612ace565b5090565b6000612afd612af8846136db565b6136b6565b905082815260208101848484011115612b1557600080fd5b612b20848285613925565b509392505050565b6000612b3b612b368461370c565b6136b6565b905082815260208101848484011115612b5357600080fd5b612b5e848285613925565b509392505050565b600081359050612b7581614128565b92915050565b600081359050612b8a8161413f565b92915050565b600081359050612b9f81614156565b92915050565b600081519050612bb481614156565b92915050565b600082601f830112612bcb57600080fd5b8135612bdb848260208601612aea565b91505092915050565b600082601f830112612bf557600080fd5b8135612c05848260208601612b28565b91505092915050565b600081359050612c1d8161416d565b92915050565b600060208284031215612c3557600080fd5b6000612c4384828501612b66565b91505092915050565b60008060408385031215612c5f57600080fd5b6000612c6d85828601612b66565b9250506020612c7e85828601612b66565b9150509250929050565b600080600060608486031215612c9d57600080fd5b6000612cab86828701612b66565b9350506020612cbc86828701612b66565b9250506040612ccd86828701612c0e565b9150509250925092565b60008060008060808587031215612ced57600080fd5b6000612cfb87828801612b66565b9450506020612d0c87828801612b66565b9350506040612d1d87828801612c0e565b925050606085013567ffffffffffffffff811115612d3a57600080fd5b612d4687828801612bba565b91505092959194509250565b60008060408385031215612d6557600080fd5b6000612d7385828601612b66565b9250506020612d8485828601612b7b565b9150509250929050565b60008060408385031215612da157600080fd5b6000612daf85828601612b66565b9250506020612dc085828601612c0e565b9150509250929050565b600060208284031215612ddc57600080fd5b6000612dea84828501612b90565b91505092915050565b600060208284031215612e0557600080fd5b6000612e1384828501612ba5565b91505092915050565b600060208284031215612e2e57600080fd5b600082013567ffffffffffffffff811115612e4857600080fd5b612e5484828501612be4565b91505092915050565b600060208284031215612e6f57600080fd5b6000612e7d84828501612c0e565b91505092915050565b612e97612e92826138a7565b613a25565b82525050565b612ea681613895565b82525050565b612ebd612eb882613895565b613a13565b82525050565b612ecc816138b9565b82525050565b612ee3612ede826138c5565b613a37565b82525050565b6000612ef48261373d565b612efe8185613753565b9350612f0e818560208601613934565b612f1781613b4a565b840191505092915050565b6000612f2d82613748565b612f378185613764565b9350612f47818560208601613934565b612f5081613b4a565b840191505092915050565b6000612f6682613748565b612f708185613775565b9350612f80818560208601613934565b80840191505092915050565b6000612f99601c83613764565b9150612fa482613b68565b602082019050919050565b6000612fbc603283613764565b9150612fc782613b91565b604082019050919050565b6000612fdf603083613764565b9150612fea82613be0565b604082019050919050565b6000613002602683613764565b915061300d82613c2f565b604082019050919050565b6000613025601c83613764565b915061303082613c7e565b602082019050919050565b6000613048602483613764565b915061305382613ca7565b604082019050919050565b600061306b602483613764565b915061307682613cf6565b604082019050919050565b600061308e601983613764565b915061309982613d45565b602082019050919050565b60006130b1602c83613764565b91506130bc82613d6e565b604082019050919050565b60006130d4603883613764565b91506130df82613dbd565b604082019050919050565b60006130f7601183613764565b915061310282613e0c565b602082019050919050565b600061311a602a83613764565b915061312582613e35565b604082019050919050565b600061313d602983613764565b915061314882613e84565b604082019050919050565b6000613160602083613764565b915061316b82613ed3565b602082019050919050565b6000613183602c83613764565b915061318e82613efc565b604082019050919050565b60006131a6602083613764565b91506131b182613f4b565b602082019050919050565b60006131c9602983613764565b91506131d482613f74565b604082019050919050565b60006131ec602f83613764565b91506131f782613fc3565b604082019050919050565b600061320f601c83613764565b915061321a82614012565b602082019050919050565b6000613232602183613764565b915061323d8261403b565b604082019050919050565b6000613255603183613764565b91506132608261408a565b604082019050919050565b6000613278602483613764565b9150613283826140d9565b604082019050919050565b6132978161391b565b82525050565b6132ae6132a98261391b565b613a53565b82525050565b60006132c08285612f5b565b91506132cc8284612f5b565b91508190509392505050565b60006132e4828861329d565b6020820191506132f48287612ed2565b6020820191506133048286612e86565b601482019150613314828561329d565b6020820191506133248284612eac565b6014820191508190509695505050505050565b600060208201905061334c6000830184612e9d565b92915050565b60006080820190506133676000830187612e9d565b6133746020830186612e9d565b613381604083018561328e565b81810360608301526133938184612ee9565b905095945050505050565b60006020820190506133b36000830184612ec3565b92915050565b600060208201905081810360008301526133d38184612f22565b905092915050565b600060208201905081810360008301526133f481612f8c565b9050919050565b6000602082019050818103600083015261341481612faf565b9050919050565b6000602082019050818103600083015261343481612fd2565b9050919050565b6000602082019050818103600083015261345481612ff5565b9050919050565b6000602082019050818103600083015261347481613018565b9050919050565b600060208201905081810360008301526134948161303b565b9050919050565b600060208201905081810360008301526134b48161305e565b9050919050565b600060208201905081810360008301526134d481613081565b9050919050565b600060208201905081810360008301526134f4816130a4565b9050919050565b60006020820190508181036000830152613514816130c7565b9050919050565b60006020820190508181036000830152613534816130ea565b9050919050565b600060208201905081810360008301526135548161310d565b9050919050565b6000602082019050818103600083015261357481613130565b9050919050565b6000602082019050818103600083015261359481613153565b9050919050565b600060208201905081810360008301526135b481613176565b9050919050565b600060208201905081810360008301526135d481613199565b9050919050565b600060208201905081810360008301526135f4816131bc565b9050919050565b60006020820190508181036000830152613614816131df565b9050919050565b6000602082019050818103600083015261363481613202565b9050919050565b6000602082019050818103600083015261365481613225565b9050919050565b6000602082019050818103600083015261367481613248565b9050919050565b600060208201905081810360008301526136948161326b565b9050919050565b60006020820190506136b0600083018461328e565b92915050565b60006136c06136d1565b90506136cc8282613999565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f6576136f5613b1b565b5b6136ff82613b4a565b9050602081019050919050565b600067ffffffffffffffff82111561372757613726613b1b565b5b61373082613b4a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061378b8261391b565b91506137968361391b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137cb576137ca613a8e565b5b828201905092915050565b60006137e18261391b565b91506137ec8361391b565b9250826137fc576137fb613abd565b5b828204905092915050565b60006138128261391b565b915061381d8361391b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561385657613855613a8e565b5b828202905092915050565b600061386c8261391b565b91506138778361391b565b92508282101561388a57613889613a8e565b5b828203905092915050565b60006138a0826138fb565b9050919050565b60006138b2826138fb565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613952578082015181840152602081019050613937565b83811115613961576000848401525b50505050565b6000600282049050600182168061397f57607f821691505b6020821081141561399357613992613aec565b5b50919050565b6139a282613b4a565b810181811067ffffffffffffffff821117156139c1576139c0613b1b565b5b80604052505050565b60006139d58261391b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a0857613a07613a8e565b5b600182019050919050565b6000613a1e82613a41565b9050919050565b6000613a3082613a41565b9050919050565b6000819050919050565b6000613a4c82613b5b565b9050919050565b6000819050919050565b6000613a688261391b565b9150613a738361391b565b925082613a8357613a82613abd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f596f752063616e6e6f7420636c61696d206d6f726520686f7273657300000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f5468652063616c6c65722063616e206f6e6c792062652061207573657220616e60008201527f64206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f752063616e206f6e6c79207072656d696e742074686520686f727365732060008201527f6f6e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752061726520746f6f206561726c79000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f20686f72736573206c65667420746f20626520636c61696d656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820457468657220746f20636c61696d2074686520686f60008201527f7273657300000000000000000000000000000000000000000000000000000000602082015250565b61413181613895565b811461413c57600080fd5b50565b614148816138b9565b811461415357600080fd5b50565b61415f816138cf565b811461416a57600080fd5b50565b6141768161391b565b811461418157600080fd5b5056fea2646970667358221220e5e0377b85607cbdcf54f75998c3ff9c8d7c7cdadf52b630703939219ad4eff864736f6c6343000804003368747470733a2f2f697066732e696f2f697066732f516d6264394e3579736537784155695141487264657a614a48367a32564157356a63374661764c7844764b356b6b2f
Deployed Bytecode
0x6080604052600436106101c25760003560e01c8063715018a6116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c51461061c578063ead1750614610659578063f2fde38b14610684578063f56bce83146106ad576101c2565b8063b88d4fde14610560578063c87b56dd14610589578063d547cfb7146105c6578063d7e3b322146105f1576101c2565b806395d89b41116100d157806395d89b41146104b85780639b3c4c8d146104e35780639d9ee6731461050c578063a22cb46514610537576101c2565b8063715018a61461044b5780637279dc5f146104625780638da5cb5b1461048d576101c2565b806330176e13116101645780634f6ccce71161013e5780634f6ccce71461037d5780636352211e146103ba5780636fcbd49f146103f757806370a082311461040e576101c2565b806330176e13146103145780633ccfd60b1461033d57806342842e0e14610354576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806318160ddd146102955780632344e918146102c057806323b872dd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612dca565b6106c9565b6040516101fb919061339e565b60405180910390f35b34801561021057600080fd5b506102196107ab565b60405161022691906133b9565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612e5d565b61083d565b6040516102639190613337565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612d8e565b6108c2565b005b3480156102a157600080fd5b506102aa6109da565b6040516102b7919061369b565b60405180910390f35b3480156102cc57600080fd5b506102d56109e4565b6040516102e2919061339e565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612c88565b6109f7565b005b34801561032057600080fd5b5061033b60048036038101906103369190612e1c565b610a57565b005b34801561034957600080fd5b50610352610aed565b005b34801561036057600080fd5b5061037b60048036038101906103769190612c88565b610bb8565b005b34801561038957600080fd5b506103a4600480360381019061039f9190612e5d565b610bd8565b6040516103b1919061369b565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190612e5d565b610c2a565b6040516103ee9190613337565b60405180910390f35b34801561040357600080fd5b5061040c610cdc565b005b34801561041a57600080fd5b5061043560048036038101906104309190612c23565b610e5c565b604051610442919061369b565b60405180910390f35b34801561045757600080fd5b50610460610f14565b005b34801561046e57600080fd5b5061047761104e565b604051610484919061369b565b60405180910390f35b34801561049957600080fd5b506104a261105b565b6040516104af9190613337565b60405180910390f35b3480156104c457600080fd5b506104cd611084565b6040516104da91906133b9565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190612e5d565b611116565b005b34801561051857600080fd5b5061052161119c565b60405161052e919061369b565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612d52565b6111a2565b005b34801561056c57600080fd5b5061058760048036038101906105829190612cd7565b611323565b005b34801561059557600080fd5b506105b060048036038101906105ab9190612e5d565b611385565b6040516105bd91906133b9565b60405180910390f35b3480156105d257600080fd5b506105db61142c565b6040516105e891906133b9565b60405180910390f35b3480156105fd57600080fd5b506106066114be565b604051610613919061369b565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e9190612c4c565b6114c8565b604051610650919061339e565b60405180910390f35b34801561066557600080fd5b5061066e61155c565b60405161067b919061369b565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612c23565b611566565b005b6106c760048036038101906106c29190612e5d565b61170f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061079457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107a457506107a382611a54565b5b9050919050565b6060600180546107ba90613967565b80601f01602080910402602001604051908101604052809291908181526020018280546107e690613967565b80156108335780601f1061080857610100808354040283529160200191610833565b820191906000526020600020905b81548152906001019060200180831161081657829003601f168201915b5050505050905090565b600061084882611abe565b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e9061359b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108cd82610c2a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109359061363b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661095d611b2a565b73ffffffffffffffffffffffffffffffffffffffff16148061098c575061098b81610986611b2a565b6114c8565b5b6109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c2906134fb565b60405180910390fd5b6109d58383611b32565b505050565b6000600c54905090565b600e60009054906101000a900460ff1681565b610a08610a02611b2a565b82611beb565b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e9061365b565b60405180910390fd5b610a52838383611cc9565b505050565b610a5f611b2a565b73ffffffffffffffffffffffffffffffffffffffff16610a7d61105b565b73ffffffffffffffffffffffffffffffffffffffff1614610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca906135bb565b60405180910390fd5b80600f9080519060200190610ae9929190612a47565b5050565b610af5611b2a565b73ffffffffffffffffffffffffffffffffffffffff16610b1361105b565b73ffffffffffffffffffffffffffffffffffffffff1614610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b60906135bb565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bb4573d6000803e3d6000fd5b5050565b610bd383838360405180602001604052806000815250611323565b505050565b6000610be382611abe565b610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c19906134db565b60405180910390fd5b819050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca9061355b565b60405180910390fd5b80915050919050565b610ce4611b2a565b73ffffffffffffffffffffffffffffffffffffffff16610d0261105b565b73ffffffffffffffffffffffffffffffffffffffff1614610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f906135bb565b60405180910390fd5b600e60009054906101000a900460ff1615610da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9f9061347b565b60405180910390fd5b600d546011805490501015610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de99061361b565b60405180910390fd5b600d54600c6000828254610e069190613780565b9250508190555060005b600d54811015610e3e57610e2b33610e26611f25565b6120e4565b8080610e36906139ca565b915050610e10565b506001600e60006101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec49061353b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f1c611b2a565b73ffffffffffffffffffffffffffffffffffffffff16610f3a61105b565b73ffffffffffffffffffffffffffffffffffffffff1614610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f87906135bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601180549050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461109390613967565b80601f01602080910402602001604051908101604052809291908181526020018280546110bf90613967565b801561110c5780601f106110e15761010080835404028352916020019161110c565b820191906000526020600020905b8154815290600101906020018083116110ef57829003601f168201915b5050505050905090565b61111e611b2a565b73ffffffffffffffffffffffffffffffffffffffff1661113c61105b565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611189906135bb565b60405180910390fd5b80600b8190555050565b600d5481565b6111aa611b2a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906134bb565b60405180910390fd5b8060066000611225611b2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112d2611b2a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611317919061339e565b60405180910390a35050565b61133461132e611b2a565b83611beb565b611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a9061365b565b60405180910390fd5b61137f848484846122b2565b50505050565b606061139082611abe565b6113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c6906135fb565b60405180910390fd5b60006113d961230e565b905060008151116113f95760405180602001604052806000815250611424565b80611403846123a0565b6040516020016114149291906132b4565b6040516020818303038152906040525b915050919050565b6060600f805461143b90613967565b80601f016020809104026020016040519081016040528092919081815260200182805461146790613967565b80156114b45780601f10611489576101008083540402835291602001916114b4565b820191906000526020600020905b81548152906001019060200180831161149757829003601f168201915b5050505050905090565b6000600b54905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600a54905090565b61156e611b2a565b73ffffffffffffffffffffffffffffffffffffffff1661158c61105b565b73ffffffffffffffffffffffffffffffffffffffff16146115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d9906135bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116499061343b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461177d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117749061341b565b60405180910390fd5b6000600a5414158015611792575042600a5411155b6117d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c89061351b565b60405180910390fd5b80600b546117df9190613807565b341015611821576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118189061367b565b60405180910390fd5b60085481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461186f9190613780565b11156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906133db565b60405180910390fd5b8060118054905010156118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef9061361b565b60405180910390fd5b60008167ffffffffffffffff81111561193a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156119685781602001602082028036833780820191505090505b50905081601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ba9190613780565b9250508190555081600c60008282546119d39190613780565b9250508190555060005b82811015611a45576119ed611f25565b828281518110611a26577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611a3d906139ca565b9150506119dd565b50611a50338261254d565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ba583610c2a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bf682611abe565b611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c906134db565b60405180910390fd5b6000611c4083610c2a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611caf57508373ffffffffffffffffffffffffffffffffffffffff16611c978461083d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cc05750611cbf81856114c8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ce982610c2a565b73ffffffffffffffffffffffffffffffffffffffff1614611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906135db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da69061349b565b60405180910390fd5b611dba83838361283b565b611dc5600082611b32565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e159190613861565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e6c9190613780565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080611f36601180549050612840565b9050600060118281548110611f74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16905060116001601180549050611fb29190613861565b81548110611fe9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660118381548110612047577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060118054806120ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff02191690559055809250505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b9061357b565b60405180910390fd5b61215d81611abe565b1561219d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121949061345b565b60405180910390fd5b6121a96000838361283b565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121f99190613780565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6122bd848484611cc9565b6122c98484848461289d565b612308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ff906133fb565b60405180910390fd5b50505050565b6060600f805461231d90613967565b80601f016020809104026020016040519081016040528092919081815260200182805461234990613967565b80156123965780601f1061236b57610100808354040283529160200191612396565b820191906000526020600020905b81548152906001019060200180831161237957829003601f168201915b5050505050905090565b606060008214156123e8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612548565b600082905060005b6000821461241a578080612403906139ca565b915050600a8261241391906137d6565b91506123f0565b60008167ffffffffffffffff81111561245c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561248e5781602001600182028036833780820191505090505b5090505b60008514612541576001826124a79190613861565b9150600a856124b69190613a5d565b60306124c29190613780565b60f81b8183815181106124fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561253a91906137d6565b9450612492565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b49061357b565b60405180910390fd5b8051600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260d9190613780565b9250508190555060005b81518110156128365761266982828151811061265c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611abe565b156126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a09061345b565b60405180910390fd5b6126f56000848484815181106126e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161283b565b8260036000848481518110612733577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181815181106127c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808061282e906139ca565b915050612617565b505050565b505050565b6000806011805490506001436128569190613861565b4041443360405160200161286e9594939291906132d8565b6040516020818303038152906040528051906020012060001c905082816128959190613a5d565b915050919050565b60006128be8473ffffffffffffffffffffffffffffffffffffffff16612a34565b15612a27578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128e7611b2a565b8786866040518563ffffffff1660e01b81526004016129099493929190613352565b602060405180830381600087803b15801561292357600080fd5b505af192505050801561295457506040513d601f19601f820116820180604052508101906129519190612df3565b60015b6129d7573d8060008114612984576040519150601f19603f3d011682016040523d82523d6000602084013e612989565b606091505b506000815114156129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c6906133fb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a2c565b600190505b949350505050565b600080823b905060008111915050919050565b828054612a5390613967565b90600052602060002090601f016020900481019282612a755760008555612abc565b82601f10612a8e57805160ff1916838001178555612abc565b82800160010185558215612abc579182015b82811115612abb578251825591602001919060010190612aa0565b5b509050612ac99190612acd565b5090565b5b80821115612ae6576000816000905550600101612ace565b5090565b6000612afd612af8846136db565b6136b6565b905082815260208101848484011115612b1557600080fd5b612b20848285613925565b509392505050565b6000612b3b612b368461370c565b6136b6565b905082815260208101848484011115612b5357600080fd5b612b5e848285613925565b509392505050565b600081359050612b7581614128565b92915050565b600081359050612b8a8161413f565b92915050565b600081359050612b9f81614156565b92915050565b600081519050612bb481614156565b92915050565b600082601f830112612bcb57600080fd5b8135612bdb848260208601612aea565b91505092915050565b600082601f830112612bf557600080fd5b8135612c05848260208601612b28565b91505092915050565b600081359050612c1d8161416d565b92915050565b600060208284031215612c3557600080fd5b6000612c4384828501612b66565b91505092915050565b60008060408385031215612c5f57600080fd5b6000612c6d85828601612b66565b9250506020612c7e85828601612b66565b9150509250929050565b600080600060608486031215612c9d57600080fd5b6000612cab86828701612b66565b9350506020612cbc86828701612b66565b9250506040612ccd86828701612c0e565b9150509250925092565b60008060008060808587031215612ced57600080fd5b6000612cfb87828801612b66565b9450506020612d0c87828801612b66565b9350506040612d1d87828801612c0e565b925050606085013567ffffffffffffffff811115612d3a57600080fd5b612d4687828801612bba565b91505092959194509250565b60008060408385031215612d6557600080fd5b6000612d7385828601612b66565b9250506020612d8485828601612b7b565b9150509250929050565b60008060408385031215612da157600080fd5b6000612daf85828601612b66565b9250506020612dc085828601612c0e565b9150509250929050565b600060208284031215612ddc57600080fd5b6000612dea84828501612b90565b91505092915050565b600060208284031215612e0557600080fd5b6000612e1384828501612ba5565b91505092915050565b600060208284031215612e2e57600080fd5b600082013567ffffffffffffffff811115612e4857600080fd5b612e5484828501612be4565b91505092915050565b600060208284031215612e6f57600080fd5b6000612e7d84828501612c0e565b91505092915050565b612e97612e92826138a7565b613a25565b82525050565b612ea681613895565b82525050565b612ebd612eb882613895565b613a13565b82525050565b612ecc816138b9565b82525050565b612ee3612ede826138c5565b613a37565b82525050565b6000612ef48261373d565b612efe8185613753565b9350612f0e818560208601613934565b612f1781613b4a565b840191505092915050565b6000612f2d82613748565b612f378185613764565b9350612f47818560208601613934565b612f5081613b4a565b840191505092915050565b6000612f6682613748565b612f708185613775565b9350612f80818560208601613934565b80840191505092915050565b6000612f99601c83613764565b9150612fa482613b68565b602082019050919050565b6000612fbc603283613764565b9150612fc782613b91565b604082019050919050565b6000612fdf603083613764565b9150612fea82613be0565b604082019050919050565b6000613002602683613764565b915061300d82613c2f565b604082019050919050565b6000613025601c83613764565b915061303082613c7e565b602082019050919050565b6000613048602483613764565b915061305382613ca7565b604082019050919050565b600061306b602483613764565b915061307682613cf6565b604082019050919050565b600061308e601983613764565b915061309982613d45565b602082019050919050565b60006130b1602c83613764565b91506130bc82613d6e565b604082019050919050565b60006130d4603883613764565b91506130df82613dbd565b604082019050919050565b60006130f7601183613764565b915061310282613e0c565b602082019050919050565b600061311a602a83613764565b915061312582613e35565b604082019050919050565b600061313d602983613764565b915061314882613e84565b604082019050919050565b6000613160602083613764565b915061316b82613ed3565b602082019050919050565b6000613183602c83613764565b915061318e82613efc565b604082019050919050565b60006131a6602083613764565b91506131b182613f4b565b602082019050919050565b60006131c9602983613764565b91506131d482613f74565b604082019050919050565b60006131ec602f83613764565b91506131f782613fc3565b604082019050919050565b600061320f601c83613764565b915061321a82614012565b602082019050919050565b6000613232602183613764565b915061323d8261403b565b604082019050919050565b6000613255603183613764565b91506132608261408a565b604082019050919050565b6000613278602483613764565b9150613283826140d9565b604082019050919050565b6132978161391b565b82525050565b6132ae6132a98261391b565b613a53565b82525050565b60006132c08285612f5b565b91506132cc8284612f5b565b91508190509392505050565b60006132e4828861329d565b6020820191506132f48287612ed2565b6020820191506133048286612e86565b601482019150613314828561329d565b6020820191506133248284612eac565b6014820191508190509695505050505050565b600060208201905061334c6000830184612e9d565b92915050565b60006080820190506133676000830187612e9d565b6133746020830186612e9d565b613381604083018561328e565b81810360608301526133938184612ee9565b905095945050505050565b60006020820190506133b36000830184612ec3565b92915050565b600060208201905081810360008301526133d38184612f22565b905092915050565b600060208201905081810360008301526133f481612f8c565b9050919050565b6000602082019050818103600083015261341481612faf565b9050919050565b6000602082019050818103600083015261343481612fd2565b9050919050565b6000602082019050818103600083015261345481612ff5565b9050919050565b6000602082019050818103600083015261347481613018565b9050919050565b600060208201905081810360008301526134948161303b565b9050919050565b600060208201905081810360008301526134b48161305e565b9050919050565b600060208201905081810360008301526134d481613081565b9050919050565b600060208201905081810360008301526134f4816130a4565b9050919050565b60006020820190508181036000830152613514816130c7565b9050919050565b60006020820190508181036000830152613534816130ea565b9050919050565b600060208201905081810360008301526135548161310d565b9050919050565b6000602082019050818103600083015261357481613130565b9050919050565b6000602082019050818103600083015261359481613153565b9050919050565b600060208201905081810360008301526135b481613176565b9050919050565b600060208201905081810360008301526135d481613199565b9050919050565b600060208201905081810360008301526135f4816131bc565b9050919050565b60006020820190508181036000830152613614816131df565b9050919050565b6000602082019050818103600083015261363481613202565b9050919050565b6000602082019050818103600083015261365481613225565b9050919050565b6000602082019050818103600083015261367481613248565b9050919050565b600060208201905081810360008301526136948161326b565b9050919050565b60006020820190506136b0600083018461328e565b92915050565b60006136c06136d1565b90506136cc8282613999565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f6576136f5613b1b565b5b6136ff82613b4a565b9050602081019050919050565b600067ffffffffffffffff82111561372757613726613b1b565b5b61373082613b4a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061378b8261391b565b91506137968361391b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137cb576137ca613a8e565b5b828201905092915050565b60006137e18261391b565b91506137ec8361391b565b9250826137fc576137fb613abd565b5b828204905092915050565b60006138128261391b565b915061381d8361391b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561385657613855613a8e565b5b828202905092915050565b600061386c8261391b565b91506138778361391b565b92508282101561388a57613889613a8e565b5b828203905092915050565b60006138a0826138fb565b9050919050565b60006138b2826138fb565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613952578082015181840152602081019050613937565b83811115613961576000848401525b50505050565b6000600282049050600182168061397f57607f821691505b6020821081141561399357613992613aec565b5b50919050565b6139a282613b4a565b810181811067ffffffffffffffff821117156139c1576139c0613b1b565b5b80604052505050565b60006139d58261391b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a0857613a07613a8e565b5b600182019050919050565b6000613a1e82613a41565b9050919050565b6000613a3082613a41565b9050919050565b6000819050919050565b6000613a4c82613b5b565b9050919050565b6000819050919050565b6000613a688261391b565b9150613a738361391b565b925082613a8357613a82613abd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f596f752063616e6e6f7420636c61696d206d6f726520686f7273657300000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f5468652063616c6c65722063616e206f6e6c792062652061207573657220616e60008201527f64206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f752063616e206f6e6c79207072656d696e742074686520686f727365732060008201527f6f6e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752061726520746f6f206561726c79000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f20686f72736573206c65667420746f20626520636c61696d656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820457468657220746f20636c61696d2074686520686f60008201527f7273657300000000000000000000000000000000000000000000000000000000602082015250565b61413181613895565b811461413c57600080fd5b50565b614148816138b9565b811461415357600080fd5b50565b61415f816138cf565b811461416a57600080fd5b50565b6141768161391b565b811461418157600080fd5b5056fea2646970667358221220e5e0377b85607cbdcf54f75998c3ff9c8d7c7cdadf52b630703939219ad4eff864736f6c63430008040033
Deployed Bytecode Sourcemap
81:6632:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1524:344:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2642:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4188:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3703:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5174:104:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1045:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5202:364:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1870:95:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1626:152;;;;;;;;;;;;;:::i;:::-;;5632:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4213:220:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2267:313:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2763:502:4;;;;;;;;;;;;;:::i;:::-;;1927:283:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1693:145:10;;;;;;;;;;;;;:::i;:::-;;4693:108:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1061:85:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2804:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2034:104:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1001:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4550:318:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5877:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2972:451;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4508:93:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4859:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4934:206:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5015:100:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1987:240:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3362:788:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1524:344:3;1666:4;1720:25;1705:40;;;:11;:40;;;;:104;;;;1776:33;1761:48;;;:11;:48;;;;1705:104;:156;;;;1825:36;1849:11;1825:23;:36::i;:::-;1705:156;1686:175;;1524:344;;;:::o;2642:98::-;2696:13;2728:5;2721:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2642:98;:::o;4188:295::-;4304:7;4348:16;4356:7;4348;:16::i;:::-;4327:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;4452:15;:24;4468:7;4452:24;;;;;;;;;;;;;;;;;;;;;4445:31;;4188:295;;;:::o;3703:424::-;3783:13;3799:23;3814:7;3799:14;:23::i;:::-;3783:39;;3846:5;3840:11;;:2;:11;;;;3832:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3937:5;3921:21;;:12;:10;:12::i;:::-;:21;;;:85;;;;3962:44;3986:5;3993:12;:10;:12::i;:::-;3962:23;:44::i;:::-;3921:85;3900:188;;;;;;;;;;;;:::i;:::-;;;;;;;;;4099:21;4108:2;4112:7;4099:8;:21::i;:::-;3703:424;;;:::o;5174:104:4:-;5228:7;5254:17;;5247:24;;5174:104;:::o;1045:38::-;;;;;;;;;;;;;:::o;5202:364:3:-;5404:41;5423:12;:10;:12::i;:::-;5437:7;5404:18;:41::i;:::-;5383:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;5531:28;5541:4;5547:2;5551:7;5531:9;:28::i;:::-;5202:364;;;:::o;1870:95:4:-;1284:12:10;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1954:4:4::1;1944:7;:14;;;;;;;;;;;;:::i;:::-;;1870:95:::0;:::o;1626:152::-;1284:12:10;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1675:20:4::1;1698:21;1675:44;;1737:10;1729:28;;:42;1758:12;1729:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;1343:1:10;1626:152:4:o:0;5632:179:3:-;5765:39;5782:4;5788:2;5792:7;5765:39;;;;;;;;;;;;:16;:39::i;:::-;5632:179;;;:::o;4213:220:4:-;4275:7;4315:16;4323:7;4315;:16::i;:::-;4294:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;4419:7;4412:14;;4213:220;;;:::o;2267:313:3:-;2379:7;2402:13;2418:7;:16;2426:7;2418:16;;;;;;;;;;;;;;;;;;;;;2402:32;;2482:1;2465:19;;:5;:19;;;;2444:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2568:5;2561:12;;;2267:313;;;:::o;2763:502:4:-;1284:12:10;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2859:18:4::1;;;;;;;;;;;2858:19;2837:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;3000:12;;2974:15;:22;;;;:38;;2953:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;3097:12;;3076:17;;:33;;;;;;;:::i;:::-;;;;;;;;3125:9;3120:104;3140:12;;3136:1;:16;3120:104;;;3173:40;3179:10;3191:21;:19;:21::i;:::-;3173:5;:40::i;:::-;3154:3;;;;;:::i;:::-;;;;3120:104;;;;3254:4;3233:18;;:25;;;;;;;;;;;;;;;;;;2763:502::o:0;1927:283:3:-;2039:7;2100:1;2083:19;;:5;:19;;;;2062:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;2187:9;:16;2197:5;2187:16;;;;;;;;;;;;;;;;2180:23;;1927:283;;;:::o;1693:145:10:-;1284:12;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1799:1:::1;1762:40;;1783:6;::::0;::::1;;;;;;;;1762:40;;;;;;;;;;;;1829:1;1812:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1693:145::o:0;4693:108:4:-;4746:7;4772:15;:22;;;;4765:29;;4693:108;:::o;1061:85:10:-;1107:7;1133:6;;;;;;;;;;;1126:13;;1061:85;:::o;2804:102:3:-;2860:13;2892:7;2885:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2804:102;:::o;2034:104:4:-;1284:12:10;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2120:11:4::1;2107:10;:24;;;;2034:104:::0;:::o;1001:33::-;;;;:::o;4550:318:3:-;4692:12;:10;:12::i;:::-;4680:24;;:8;:24;;;;4672:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:8;4745:18;:32;4764:12;:10;:12::i;:::-;4745:32;;;;;;;;;;;;;;;:42;4778:8;4745:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4842:8;4813:48;;4828:12;:10;:12::i;:::-;4813:48;;;4852:8;4813:48;;;;;;:::i;:::-;;;;;;;;4550:318;;:::o;5877:354::-;6059:41;6078:12;:10;:12::i;:::-;6092:7;6059:18;:41::i;:::-;6038:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;6185:39;6199:4;6205:2;6209:7;6218:5;6185:13;:39::i;:::-;5877:354;;;;:::o;2972:451::-;3085:13;3135:16;3143:7;3135;:16::i;:::-;3114:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3235:21;3259:10;:8;:10::i;:::-;3235:34;;3322:1;3304:7;3298:21;:25;:118;;;;;;;;;;;;;;;;;3366:7;3375:18;:7;:16;:18::i;:::-;3349:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3298:118;3279:137;;;2972:451;;;:::o;4508:93:4:-;4555:13;4587:7;4580:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4508:93;:::o;4859:91::-;4907:7;4933:10;;4926:17;;4859:91;:::o;4934:206:3:-;5071:4;5098:18;:25;5117:5;5098:25;;;;;;;;;;;;;;;:35;5124:8;5098:35;;;;;;;;;;;;;;;;;;;;;;;;;5091:42;;4934:206;;;;:::o;5015:100:4:-;5069:7;5095:13;;5088:20;;5015:100;:::o;1987:240:10:-;1284:12;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2095:1:::1;2075:22;;:8;:22;;;;2067:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2184:8;2155:38;;2176:6;::::0;::::1;;;;;;;;2155:38;;;;;;;;;;;;2212:8;2203:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1987:240:::0;:::o;3362:788:4:-;426:10;413:23;;:9;:23;;;405:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;261:1:::1;244:13;;:18;;:54;;;;;283:15;266:13;;:32;;244:54;223:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;3542:6:::2;3529:10;;:19;;;;:::i;:::-;3516:9;:32;;3495:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;3689:18;;3679:6;3642:22;:34;3665:10;3642:34;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:65;;3621:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;3806:6;3780:15;:22;;;;:32;;3772:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3856:25;3898:6;3884:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:49;;3954:6;3916:22;:34;3939:10;3916:34;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;3991:6;3970:17;;:27;;;;;;;:::i;:::-;;;;;;;;4013:9;4008:93;4028:6;4024:1;:10;4008:93;;;4069:21;:19;:21::i;:::-;4055:8;4064:1;4055:11;;;;;;;;;;;;;;;;;;;;;:35;;;::::0;::::2;4036:3;;;;;:::i;:::-;;;;4008:93;;;;4111:32;4122:10;4134:8;4111:10;:32::i;:::-;351:1;3362:788:::0;:::o;763:155:2:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;7737:125:3:-;7802:4;7853:1;7825:30;;:7;:16;7833:7;7825:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7818:37;;7737:125;;;:::o;586:96:1:-;639:7;665:10;658:17;;586:96;:::o;12245:171:3:-;12346:2;12319:15;:24;12335:7;12319:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12401:7;12397:2;12363:46;;12372:23;12387:7;12372:14;:23::i;:::-;12363:46;;;;;;;;;;;;12245:171;;:::o;8020:445::-;8145:4;8186:16;8194:7;8186;:16::i;:::-;8165:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;8282:13;8298:23;8313:7;8298:14;:23::i;:::-;8282:39;;8350:5;8339:16;;:7;:16;;;:63;;;;8395:7;8371:31;;:20;8383:7;8371:11;:20::i;:::-;:31;;;8339:63;:118;;;;8418:39;8442:5;8449:7;8418:23;:39::i;:::-;8339:118;8331:127;;;8020:445;;;;:::o;11540:594::-;11707:4;11680:31;;:23;11695:7;11680:14;:23::i;:::-;:31;;;11659:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;11810:1;11796:16;;:2;:16;;;;11788:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11864:39;11885:4;11891:2;11895:7;11864:20;:39::i;:::-;11965:29;11982:1;11986:7;11965:8;:29::i;:::-;12024:1;12005:9;:15;12015:4;12005:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;12052:1;12035:9;:13;12045:2;12035:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;12082:2;12063:7;:16;12071:7;12063:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12119:7;12115:2;12100:27;;12109:4;12100:27;;;;;;;;;;;;11540:594;;;:::o;5398:327:4:-;5446:7;5465:14;5482:40;5499:15;:22;;;;5482:16;:40::i;:::-;5465:57;;5532:15;5558;5574:6;5558:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5550:32;;5532:50;;5619:15;5660:1;5635:15;:22;;;;:26;;;;:::i;:::-;5619:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5593:15;5609:6;5593:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:69;;;;;;;;;;;;;;;;;;5672:15;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5711:7;5704:14;;;;5398:327;:::o;9757:372:3:-;9850:1;9836:16;;:2;:16;;;;9828:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9908:16;9916:7;9908;:16::i;:::-;9907:17;9899:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9968:45;9997:1;10001:2;10005:7;9968:20;:45::i;:::-;10041:1;10024:9;:13;10034:2;10024:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10071:2;10052:7;:16;10060:7;10052:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10114:7;10110:2;10089:33;;10106:1;10089:33;;;;;;;;;;;;9757:372;;:::o;7093:341::-;7244:28;7254:4;7260:2;7264:7;7244:9;:28::i;:::-;7303:48;7326:4;7332:2;7336:7;7345:5;7303:22;:48::i;:::-;7282:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;7093:341;;;;:::o;6286:106:4:-;6346:13;6378:7;6371:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6286:106;:::o;271:703:11:-;327:13;553:1;544:5;:10;540:51;;;570:10;;;;;;;;;;;;;;;;;;;;;540:51;600:12;615:5;600:20;;630:14;654:75;669:1;661:4;:9;654:75;;686:8;;;;;:::i;:::-;;;;716:2;708:10;;;;;:::i;:::-;;;654:75;;;738:19;770:6;760:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;738:39;;787:150;803:1;794:5;:10;787:150;;830:1;820:11;;;;;:::i;:::-;;;896:2;888:5;:10;;;;:::i;:::-;875:2;:24;;;;:::i;:::-;862:39;;845:6;852;845:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;924:2;915:11;;;;;:::i;:::-;;;787:150;;;960:6;946:21;;;;;271:703;;;;:::o;10135:516:3:-;10263:1;10249:16;;:2;:16;;;;10241:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;10329:8;:15;10312:9;:13;10322:2;10312:13;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;10360:9;10355:290;10375:8;:15;10371:1;:19;10355:290;;;10420:20;10428:8;10437:1;10428:11;;;;;;;;;;;;;;;;;;;;;;10420:7;:20::i;:::-;10419:21;10411:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10488:49;10517:1;10521:2;10525:8;10534:1;10525:11;;;;;;;;;;;;;;;;;;;;;;10488:20;:49::i;:::-;10575:2;10552:7;:20;10560:8;10569:1;10560:11;;;;;;;;;;;;;;;;;;;;;;10552:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;10622:8;10631:1;10622:11;;;;;;;;;;;;;;;;;;;;;;10618:2;10597:37;;10614:1;10597:37;;;;;;;;;;;;10392:3;;;;;:::i;:::-;;;;10355:290;;;;10135:516;;:::o;14595:122::-;;;;:::o;5793:445:4:-;5857:7;5876:14;5979:15;:22;;;;6048:1;6033:12;:16;;;;:::i;:::-;6023:27;6072:14;6108:16;6146:10;5941:233;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5914:274;;;;;;5893:305;;5876:322;;6225:6;6216;:15;;;;:::i;:::-;6209:22;;;5793:445;;;:::o;12969:1022:3:-;13119:4;13139:15;:2;:13;;;:15::i;:::-;13135:850;;;13206:2;13190:36;;;13248:12;:10;:12::i;:::-;13282:4;13308:7;13337:5;13190:170;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13170:763;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13560:1;13543:6;:13;:18;13539:380;;;13585:106;;;;;;;;;;:::i;:::-;;;;;;;;13539:380;13871:6;13865:13;13856:6;13852:2;13848:15;13841:38;13170:763;13432:45;;;13422:55;;;:6;:55;;;;13415:62;;;;;13135:850;13970:4;13963:11;;12969:1022;;;;;;;:::o;718:413:0:-;778:4;981:12;1090:7;1078:20;1070:28;;1123:1;1116:4;:8;1109:15;;;718:413;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:12:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:260::-;4941:6;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5049:1;5074:52;5118:7;5109:6;5098:9;5094:22;5074:52;:::i;:::-;5064:62;;5020:116;4948:195;;;;:::o;5149:282::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:2;;;5283:1;5280;5273:12;5235:2;5326:1;5351:63;5406:7;5397:6;5386:9;5382:22;5351:63;:::i;:::-;5341:73;;5297:127;5225:206;;;;:::o;5437:375::-;5506:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5732:63;5787:7;5778:6;5767:9;5763:22;5732:63;:::i;:::-;5722:73;;5585:220;5513:299;;;;:::o;5818:262::-;5877:6;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5942:1;5939;5932:12;5894:2;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5884:196;;;;:::o;6086:189::-;6207:61;6235:32;6261:5;6235:32;:::i;:::-;6207:61;:::i;:::-;6202:3;6195:74;6185:90;;:::o;6281:118::-;6368:24;6386:5;6368:24;:::i;:::-;6363:3;6356:37;6346:53;;:::o;6405:157::-;6510:45;6530:24;6548:5;6530:24;:::i;:::-;6510:45;:::i;:::-;6505:3;6498:58;6488:74;;:::o;6568:109::-;6649:21;6664:5;6649:21;:::i;:::-;6644:3;6637:34;6627:50;;:::o;6683:157::-;6788:45;6808:24;6826:5;6808:24;:::i;:::-;6788:45;:::i;:::-;6783:3;6776:58;6766:74;;:::o;6846:360::-;6932:3;6960:38;6992:5;6960:38;:::i;:::-;7014:70;7077:6;7072:3;7014:70;:::i;:::-;7007:77;;7093:52;7138:6;7133:3;7126:4;7119:5;7115:16;7093:52;:::i;:::-;7170:29;7192:6;7170:29;:::i;:::-;7165:3;7161:39;7154:46;;6936:270;;;;;:::o;7212:364::-;7300:3;7328:39;7361:5;7328:39;:::i;:::-;7383:71;7447:6;7442:3;7383:71;:::i;:::-;7376:78;;7463:52;7508:6;7503:3;7496:4;7489:5;7485:16;7463:52;:::i;:::-;7540:29;7562:6;7540:29;:::i;:::-;7535:3;7531:39;7524:46;;7304:272;;;;;:::o;7582:377::-;7688:3;7716:39;7749:5;7716:39;:::i;:::-;7771:89;7853:6;7848:3;7771:89;:::i;:::-;7764:96;;7869:52;7914:6;7909:3;7902:4;7895:5;7891:16;7869:52;:::i;:::-;7946:6;7941:3;7937:16;7930:23;;7692:267;;;;;:::o;7965:366::-;8107:3;8128:67;8192:2;8187:3;8128:67;:::i;:::-;8121:74;;8204:93;8293:3;8204:93;:::i;:::-;8322:2;8317:3;8313:12;8306:19;;8111:220;;;:::o;8337:366::-;8479:3;8500:67;8564:2;8559:3;8500:67;:::i;:::-;8493:74;;8576:93;8665:3;8576:93;:::i;:::-;8694:2;8689:3;8685:12;8678:19;;8483:220;;;:::o;8709:366::-;8851:3;8872:67;8936:2;8931:3;8872:67;:::i;:::-;8865:74;;8948:93;9037:3;8948:93;:::i;:::-;9066:2;9061:3;9057:12;9050:19;;8855:220;;;:::o;9081:366::-;9223:3;9244:67;9308:2;9303:3;9244:67;:::i;:::-;9237:74;;9320:93;9409:3;9320:93;:::i;:::-;9438:2;9433:3;9429:12;9422:19;;9227:220;;;:::o;9453:366::-;9595:3;9616:67;9680:2;9675:3;9616:67;:::i;:::-;9609:74;;9692:93;9781:3;9692:93;:::i;:::-;9810:2;9805:3;9801:12;9794:19;;9599:220;;;:::o;9825:366::-;9967:3;9988:67;10052:2;10047:3;9988:67;:::i;:::-;9981:74;;10064:93;10153:3;10064:93;:::i;:::-;10182:2;10177:3;10173:12;10166:19;;9971:220;;;:::o;10197:366::-;10339:3;10360:67;10424:2;10419:3;10360:67;:::i;:::-;10353:74;;10436:93;10525:3;10436:93;:::i;:::-;10554:2;10549:3;10545:12;10538:19;;10343:220;;;:::o;10569:366::-;10711:3;10732:67;10796:2;10791:3;10732:67;:::i;:::-;10725:74;;10808:93;10897:3;10808:93;:::i;:::-;10926:2;10921:3;10917:12;10910:19;;10715:220;;;:::o;10941:366::-;11083:3;11104:67;11168:2;11163:3;11104:67;:::i;:::-;11097:74;;11180:93;11269:3;11180:93;:::i;:::-;11298:2;11293:3;11289:12;11282:19;;11087:220;;;:::o;11313:366::-;11455:3;11476:67;11540:2;11535:3;11476:67;:::i;:::-;11469:74;;11552:93;11641:3;11552:93;:::i;:::-;11670:2;11665:3;11661:12;11654:19;;11459:220;;;:::o;11685:366::-;11827:3;11848:67;11912:2;11907:3;11848:67;:::i;:::-;11841:74;;11924:93;12013:3;11924:93;:::i;:::-;12042:2;12037:3;12033:12;12026:19;;11831:220;;;:::o;12057:366::-;12199:3;12220:67;12284:2;12279:3;12220:67;:::i;:::-;12213:74;;12296:93;12385:3;12296:93;:::i;:::-;12414:2;12409:3;12405:12;12398:19;;12203:220;;;:::o;12429:366::-;12571:3;12592:67;12656:2;12651:3;12592:67;:::i;:::-;12585:74;;12668:93;12757:3;12668:93;:::i;:::-;12786:2;12781:3;12777:12;12770:19;;12575:220;;;:::o;12801:366::-;12943:3;12964:67;13028:2;13023:3;12964:67;:::i;:::-;12957:74;;13040:93;13129:3;13040:93;:::i;:::-;13158:2;13153:3;13149:12;13142:19;;12947:220;;;:::o;13173:366::-;13315:3;13336:67;13400:2;13395:3;13336:67;:::i;:::-;13329:74;;13412:93;13501:3;13412:93;:::i;:::-;13530:2;13525:3;13521:12;13514:19;;13319:220;;;:::o;13545:366::-;13687:3;13708:67;13772:2;13767:3;13708:67;:::i;:::-;13701:74;;13784:93;13873:3;13784:93;:::i;:::-;13902:2;13897:3;13893:12;13886:19;;13691:220;;;:::o;13917:366::-;14059:3;14080:67;14144:2;14139:3;14080:67;:::i;:::-;14073:74;;14156:93;14245:3;14156:93;:::i;:::-;14274:2;14269:3;14265:12;14258:19;;14063:220;;;:::o;14289:366::-;14431:3;14452:67;14516:2;14511:3;14452:67;:::i;:::-;14445:74;;14528:93;14617:3;14528:93;:::i;:::-;14646:2;14641:3;14637:12;14630:19;;14435:220;;;:::o;14661:366::-;14803:3;14824:67;14888:2;14883:3;14824:67;:::i;:::-;14817:74;;14900:93;14989:3;14900:93;:::i;:::-;15018:2;15013:3;15009:12;15002:19;;14807:220;;;:::o;15033:366::-;15175:3;15196:67;15260:2;15255:3;15196:67;:::i;:::-;15189:74;;15272:93;15361:3;15272:93;:::i;:::-;15390:2;15385:3;15381:12;15374:19;;15179:220;;;:::o;15405:366::-;15547:3;15568:67;15632:2;15627:3;15568:67;:::i;:::-;15561:74;;15644:93;15733:3;15644:93;:::i;:::-;15762:2;15757:3;15753:12;15746:19;;15551:220;;;:::o;15777:366::-;15919:3;15940:67;16004:2;15999:3;15940:67;:::i;:::-;15933:74;;16016:93;16105:3;16016:93;:::i;:::-;16134:2;16129:3;16125:12;16118:19;;15923:220;;;:::o;16149:118::-;16236:24;16254:5;16236:24;:::i;:::-;16231:3;16224:37;16214:53;;:::o;16273:157::-;16378:45;16398:24;16416:5;16398:24;:::i;:::-;16378:45;:::i;:::-;16373:3;16366:58;16356:74;;:::o;16436:435::-;16616:3;16638:95;16729:3;16720:6;16638:95;:::i;:::-;16631:102;;16750:95;16841:3;16832:6;16750:95;:::i;:::-;16743:102;;16862:3;16855:10;;16620:251;;;;;:::o;16877:852::-;17117:3;17132:75;17203:3;17194:6;17132:75;:::i;:::-;17232:2;17227:3;17223:12;17216:19;;17245:75;17316:3;17307:6;17245:75;:::i;:::-;17345:2;17340:3;17336:12;17329:19;;17358:91;17445:3;17436:6;17358:91;:::i;:::-;17474:2;17469:3;17465:12;17458:19;;17487:75;17558:3;17549:6;17487:75;:::i;:::-;17587:2;17582:3;17578:12;17571:19;;17600:75;17671:3;17662:6;17600:75;:::i;:::-;17700:2;17695:3;17691:12;17684:19;;17720:3;17713:10;;17121:608;;;;;;;;:::o;17735:222::-;17828:4;17866:2;17855:9;17851:18;17843:26;;17879:71;17947:1;17936:9;17932:17;17923:6;17879:71;:::i;:::-;17833:124;;;;:::o;17963:640::-;18158:4;18196:3;18185:9;18181:19;18173:27;;18210:71;18278:1;18267:9;18263:17;18254:6;18210:71;:::i;:::-;18291:72;18359:2;18348:9;18344:18;18335:6;18291:72;:::i;:::-;18373;18441:2;18430:9;18426:18;18417:6;18373:72;:::i;:::-;18492:9;18486:4;18482:20;18477:2;18466:9;18462:18;18455:48;18520:76;18591:4;18582:6;18520:76;:::i;:::-;18512:84;;18163:440;;;;;;;:::o;18609:210::-;18696:4;18734:2;18723:9;18719:18;18711:26;;18747:65;18809:1;18798:9;18794:17;18785:6;18747:65;:::i;:::-;18701:118;;;;:::o;18825:313::-;18938:4;18976:2;18965:9;18961:18;18953:26;;19025:9;19019:4;19015:20;19011:1;19000:9;18996:17;18989:47;19053:78;19126:4;19117:6;19053:78;:::i;:::-;19045:86;;18943:195;;;;:::o;19144:419::-;19310:4;19348:2;19337:9;19333:18;19325:26;;19397:9;19391:4;19387:20;19383:1;19372:9;19368:17;19361:47;19425:131;19551:4;19425:131;:::i;:::-;19417:139;;19315:248;;;:::o;19569:419::-;19735:4;19773:2;19762:9;19758:18;19750:26;;19822:9;19816:4;19812:20;19808:1;19797:9;19793:17;19786:47;19850:131;19976:4;19850:131;:::i;:::-;19842:139;;19740:248;;;:::o;19994:419::-;20160:4;20198:2;20187:9;20183:18;20175:26;;20247:9;20241:4;20237:20;20233:1;20222:9;20218:17;20211:47;20275:131;20401:4;20275:131;:::i;:::-;20267:139;;20165:248;;;:::o;20419:419::-;20585:4;20623:2;20612:9;20608:18;20600:26;;20672:9;20666:4;20662:20;20658:1;20647:9;20643:17;20636:47;20700:131;20826:4;20700:131;:::i;:::-;20692:139;;20590:248;;;:::o;20844:419::-;21010:4;21048:2;21037:9;21033:18;21025:26;;21097:9;21091:4;21087:20;21083:1;21072:9;21068:17;21061:47;21125:131;21251:4;21125:131;:::i;:::-;21117:139;;21015:248;;;:::o;21269:419::-;21435:4;21473:2;21462:9;21458:18;21450:26;;21522:9;21516:4;21512:20;21508:1;21497:9;21493:17;21486:47;21550:131;21676:4;21550:131;:::i;:::-;21542:139;;21440:248;;;:::o;21694:419::-;21860:4;21898:2;21887:9;21883:18;21875:26;;21947:9;21941:4;21937:20;21933:1;21922:9;21918:17;21911:47;21975:131;22101:4;21975:131;:::i;:::-;21967:139;;21865:248;;;:::o;22119:419::-;22285:4;22323:2;22312:9;22308:18;22300:26;;22372:9;22366:4;22362:20;22358:1;22347:9;22343:17;22336:47;22400:131;22526:4;22400:131;:::i;:::-;22392:139;;22290:248;;;:::o;22544:419::-;22710:4;22748:2;22737:9;22733:18;22725:26;;22797:9;22791:4;22787:20;22783:1;22772:9;22768:17;22761:47;22825:131;22951:4;22825:131;:::i;:::-;22817:139;;22715:248;;;:::o;22969:419::-;23135:4;23173:2;23162:9;23158:18;23150:26;;23222:9;23216:4;23212:20;23208:1;23197:9;23193:17;23186:47;23250:131;23376:4;23250:131;:::i;:::-;23242:139;;23140:248;;;:::o;23394:419::-;23560:4;23598:2;23587:9;23583:18;23575:26;;23647:9;23641:4;23637:20;23633:1;23622:9;23618:17;23611:47;23675:131;23801:4;23675:131;:::i;:::-;23667:139;;23565:248;;;:::o;23819:419::-;23985:4;24023:2;24012:9;24008:18;24000:26;;24072:9;24066:4;24062:20;24058:1;24047:9;24043:17;24036:47;24100:131;24226:4;24100:131;:::i;:::-;24092:139;;23990:248;;;:::o;24244:419::-;24410:4;24448:2;24437:9;24433:18;24425:26;;24497:9;24491:4;24487:20;24483:1;24472:9;24468:17;24461:47;24525:131;24651:4;24525:131;:::i;:::-;24517:139;;24415:248;;;:::o;24669:419::-;24835:4;24873:2;24862:9;24858:18;24850:26;;24922:9;24916:4;24912:20;24908:1;24897:9;24893:17;24886:47;24950:131;25076:4;24950:131;:::i;:::-;24942:139;;24840:248;;;:::o;25094:419::-;25260:4;25298:2;25287:9;25283:18;25275:26;;25347:9;25341:4;25337:20;25333:1;25322:9;25318:17;25311:47;25375:131;25501:4;25375:131;:::i;:::-;25367:139;;25265:248;;;:::o;25519:419::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25772:9;25766:4;25762:20;25758:1;25747:9;25743:17;25736:47;25800:131;25926:4;25800:131;:::i;:::-;25792:139;;25690:248;;;:::o;25944:419::-;26110:4;26148:2;26137:9;26133:18;26125:26;;26197:9;26191:4;26187:20;26183:1;26172:9;26168:17;26161:47;26225:131;26351:4;26225:131;:::i;:::-;26217:139;;26115:248;;;:::o;26369:419::-;26535:4;26573:2;26562:9;26558:18;26550:26;;26622:9;26616:4;26612:20;26608:1;26597:9;26593:17;26586:47;26650:131;26776:4;26650:131;:::i;:::-;26642:139;;26540:248;;;:::o;26794:419::-;26960:4;26998:2;26987:9;26983:18;26975:26;;27047:9;27041:4;27037:20;27033:1;27022:9;27018:17;27011:47;27075:131;27201:4;27075:131;:::i;:::-;27067:139;;26965:248;;;:::o;27219:419::-;27385:4;27423:2;27412:9;27408:18;27400:26;;27472:9;27466:4;27462:20;27458:1;27447:9;27443:17;27436:47;27500:131;27626:4;27500:131;:::i;:::-;27492:139;;27390:248;;;:::o;27644:419::-;27810:4;27848:2;27837:9;27833:18;27825:26;;27897:9;27891:4;27887:20;27883:1;27872:9;27868:17;27861:47;27925:131;28051:4;27925:131;:::i;:::-;27917:139;;27815:248;;;:::o;28069:419::-;28235:4;28273:2;28262:9;28258:18;28250:26;;28322:9;28316:4;28312:20;28308:1;28297:9;28293:17;28286:47;28350:131;28476:4;28350:131;:::i;:::-;28342:139;;28240:248;;;:::o;28494:222::-;28587:4;28625:2;28614:9;28610:18;28602:26;;28638:71;28706:1;28695:9;28691:17;28682:6;28638:71;:::i;:::-;28592:124;;;;:::o;28722:129::-;28756:6;28783:20;;:::i;:::-;28773:30;;28812:33;28840:4;28832:6;28812:33;:::i;:::-;28763:88;;;:::o;28857:75::-;28890:6;28923:2;28917:9;28907:19;;28897:35;:::o;28938:307::-;28999:4;29089:18;29081:6;29078:30;29075:2;;;29111:18;;:::i;:::-;29075:2;29149:29;29171:6;29149:29;:::i;:::-;29141:37;;29233:4;29227;29223:15;29215:23;;29004:241;;;:::o;29251:308::-;29313:4;29403:18;29395:6;29392:30;29389:2;;;29425:18;;:::i;:::-;29389:2;29463:29;29485:6;29463:29;:::i;:::-;29455:37;;29547:4;29541;29537:15;29529:23;;29318:241;;;:::o;29565:98::-;29616:6;29650:5;29644:12;29634:22;;29623:40;;;:::o;29669:99::-;29721:6;29755:5;29749:12;29739:22;;29728:40;;;:::o;29774:168::-;29857:11;29891:6;29886:3;29879:19;29931:4;29926:3;29922:14;29907:29;;29869:73;;;;:::o;29948:169::-;30032:11;30066:6;30061:3;30054:19;30106:4;30101:3;30097:14;30082:29;;30044:73;;;;:::o;30123:148::-;30225:11;30262:3;30247:18;;30237:34;;;;:::o;30277:305::-;30317:3;30336:20;30354:1;30336:20;:::i;:::-;30331:25;;30370:20;30388:1;30370:20;:::i;:::-;30365:25;;30524:1;30456:66;30452:74;30449:1;30446:81;30443:2;;;30530:18;;:::i;:::-;30443:2;30574:1;30571;30567:9;30560:16;;30321:261;;;;:::o;30588:185::-;30628:1;30645:20;30663:1;30645:20;:::i;:::-;30640:25;;30679:20;30697:1;30679:20;:::i;:::-;30674:25;;30718:1;30708:2;;30723:18;;:::i;:::-;30708:2;30765:1;30762;30758:9;30753:14;;30630:143;;;;:::o;30779:348::-;30819:7;30842:20;30860:1;30842:20;:::i;:::-;30837:25;;30876:20;30894:1;30876:20;:::i;:::-;30871:25;;31064:1;30996:66;30992:74;30989:1;30986:81;30981:1;30974:9;30967:17;30963:105;30960:2;;;31071:18;;:::i;:::-;30960:2;31119:1;31116;31112:9;31101:20;;30827:300;;;;:::o;31133:191::-;31173:4;31193:20;31211:1;31193:20;:::i;:::-;31188:25;;31227:20;31245:1;31227:20;:::i;:::-;31222:25;;31266:1;31263;31260:8;31257:2;;;31271:18;;:::i;:::-;31257:2;31316:1;31313;31309:9;31301:17;;31178:146;;;;:::o;31330:96::-;31367:7;31396:24;31414:5;31396:24;:::i;:::-;31385:35;;31375:51;;;:::o;31432:104::-;31477:7;31506:24;31524:5;31506:24;:::i;:::-;31495:35;;31485:51;;;:::o;31542:90::-;31576:7;31619:5;31612:13;31605:21;31594:32;;31584:48;;;:::o;31638:77::-;31675:7;31704:5;31693:16;;31683:32;;;:::o;31721:149::-;31757:7;31797:66;31790:5;31786:78;31775:89;;31765:105;;;:::o;31876:126::-;31913:7;31953:42;31946:5;31942:54;31931:65;;31921:81;;;:::o;32008:77::-;32045:7;32074:5;32063:16;;32053:32;;;:::o;32091:154::-;32175:6;32170:3;32165;32152:30;32237:1;32228:6;32223:3;32219:16;32212:27;32142:103;;;:::o;32251:307::-;32319:1;32329:113;32343:6;32340:1;32337:13;32329:113;;;32428:1;32423:3;32419:11;32413:18;32409:1;32404:3;32400:11;32393:39;32365:2;32362:1;32358:10;32353:15;;32329:113;;;32460:6;32457:1;32454:13;32451:2;;;32540:1;32531:6;32526:3;32522:16;32515:27;32451:2;32300:258;;;;:::o;32564:320::-;32608:6;32645:1;32639:4;32635:12;32625:22;;32692:1;32686:4;32682:12;32713:18;32703:2;;32769:4;32761:6;32757:17;32747:27;;32703:2;32831;32823:6;32820:14;32800:18;32797:38;32794:2;;;32850:18;;:::i;:::-;32794:2;32615:269;;;;:::o;32890:281::-;32973:27;32995:4;32973:27;:::i;:::-;32965:6;32961:40;33103:6;33091:10;33088:22;33067:18;33055:10;33052:34;33049:62;33046:2;;;33114:18;;:::i;:::-;33046:2;33154:10;33150:2;33143:22;32933:238;;;:::o;33177:233::-;33216:3;33239:24;33257:5;33239:24;:::i;:::-;33230:33;;33285:66;33278:5;33275:77;33272:2;;;33355:18;;:::i;:::-;33272:2;33402:1;33395:5;33391:13;33384:20;;33220:190;;;:::o;33416:100::-;33455:7;33484:26;33504:5;33484:26;:::i;:::-;33473:37;;33463:53;;;:::o;33522:108::-;33569:7;33598:26;33618:5;33598:26;:::i;:::-;33587:37;;33577:53;;;:::o;33636:79::-;33675:7;33704:5;33693:16;;33683:32;;;:::o;33721:94::-;33760:7;33789:20;33803:5;33789:20;:::i;:::-;33778:31;;33768:47;;;:::o;33821:79::-;33860:7;33889:5;33878:16;;33868:32;;;:::o;33906:176::-;33938:1;33955:20;33973:1;33955:20;:::i;:::-;33950:25;;33989:20;34007:1;33989:20;:::i;:::-;33984:25;;34028:1;34018:2;;34033:18;;:::i;:::-;34018:2;34074:1;34071;34067:9;34062:14;;33940:142;;;;:::o;34088:180::-;34136:77;34133:1;34126:88;34233:4;34230:1;34223:15;34257:4;34254:1;34247:15;34274:180;34322:77;34319:1;34312:88;34419:4;34416:1;34409:15;34443:4;34440:1;34433:15;34460:180;34508:77;34505:1;34498:88;34605:4;34602:1;34595:15;34629:4;34626:1;34619:15;34646:180;34694:77;34691:1;34684:88;34791:4;34788:1;34781:15;34815:4;34812:1;34805:15;34832:102;34873:6;34924:2;34920:7;34915:2;34908:5;34904:14;34900:28;34890:38;;34880:54;;;:::o;34940:94::-;34973:8;35021:5;35017:2;35013:14;34992:35;;34982:52;;;:::o;35040:178::-;35180:30;35176:1;35168:6;35164:14;35157:54;35146:72;:::o;35224:237::-;35364:34;35360:1;35352:6;35348:14;35341:58;35433:20;35428:2;35420:6;35416:15;35409:45;35330:131;:::o;35467:235::-;35607:34;35603:1;35595:6;35591:14;35584:58;35676:18;35671:2;35663:6;35659:15;35652:43;35573:129;:::o;35708:225::-;35848:34;35844:1;35836:6;35832:14;35825:58;35917:8;35912:2;35904:6;35900:15;35893:33;35814:119;:::o;35939:178::-;36079:30;36075:1;36067:6;36063:14;36056:54;36045:72;:::o;36123:223::-;36263:34;36259:1;36251:6;36247:14;36240:58;36332:6;36327:2;36319:6;36315:15;36308:31;36229:117;:::o;36352:223::-;36492:34;36488:1;36480:6;36476:14;36469:58;36561:6;36556:2;36548:6;36544:15;36537:31;36458:117;:::o;36581:175::-;36721:27;36717:1;36709:6;36705:14;36698:51;36687:69;:::o;36762:231::-;36902:34;36898:1;36890:6;36886:14;36879:58;36971:14;36966:2;36958:6;36954:15;36947:39;36868:125;:::o;36999:243::-;37139:34;37135:1;37127:6;37123:14;37116:58;37208:26;37203:2;37195:6;37191:15;37184:51;37105:137;:::o;37248:167::-;37388:19;37384:1;37376:6;37372:14;37365:43;37354:61;:::o;37421:229::-;37561:34;37557:1;37549:6;37545:14;37538:58;37630:12;37625:2;37617:6;37613:15;37606:37;37527:123;:::o;37656:228::-;37796:34;37792:1;37784:6;37780:14;37773:58;37865:11;37860:2;37852:6;37848:15;37841:36;37762:122;:::o;37890:182::-;38030:34;38026:1;38018:6;38014:14;38007:58;37996:76;:::o;38078:231::-;38218:34;38214:1;38206:6;38202:14;38195:58;38287:14;38282:2;38274:6;38270:15;38263:39;38184:125;:::o;38315:182::-;38455:34;38451:1;38443:6;38439:14;38432:58;38421:76;:::o;38503:228::-;38643:34;38639:1;38631:6;38627:14;38620:58;38712:11;38707:2;38699:6;38695:15;38688:36;38609:122;:::o;38737:234::-;38877:34;38873:1;38865:6;38861:14;38854:58;38946:17;38941:2;38933:6;38929:15;38922:42;38843:128;:::o;38977:178::-;39117:30;39113:1;39105:6;39101:14;39094:54;39083:72;:::o;39161:220::-;39301:34;39297:1;39289:6;39285:14;39278:58;39370:3;39365:2;39357:6;39353:15;39346:28;39267:114;:::o;39387:236::-;39527:34;39523:1;39515:6;39511:14;39504:58;39596:19;39591:2;39583:6;39579:15;39572:44;39493:130;:::o;39629:223::-;39769:34;39765:1;39757:6;39753:14;39746:58;39838:6;39833:2;39825:6;39821:15;39814:31;39735:117;:::o;39858:122::-;39931:24;39949:5;39931:24;:::i;:::-;39924:5;39921:35;39911:2;;39970:1;39967;39960:12;39911:2;39901:79;:::o;39986:116::-;40056:21;40071:5;40056:21;:::i;:::-;40049:5;40046:32;40036:2;;40092:1;40089;40082:12;40036:2;40026:76;:::o;40108:120::-;40180:23;40197:5;40180:23;:::i;:::-;40173:5;40170:34;40160:2;;40218:1;40215;40208:12;40160:2;40150:78;:::o;40234:122::-;40307:24;40325:5;40307:24;:::i;:::-;40300:5;40297:35;40287:2;;40346:1;40343;40336:12;40287:2;40277:79;:::o
Swarm Source
ipfs://e5e0377b85607cbdcf54f75998c3ff9c8d7c7cdadf52b630703939219ad4eff8
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.