Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 123 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Approve | 16305922 | 551 days ago | IN | 0 ETH | 0.00086962 | ||||
Approve | 16305914 | 551 days ago | IN | 0 ETH | 0.00088937 | ||||
Approve | 16305909 | 551 days ago | IN | 0 ETH | 0.00091991 | ||||
Approve | 16305899 | 551 days ago | IN | 0 ETH | 0.00084811 | ||||
Approve | 16305891 | 551 days ago | IN | 0 ETH | 0.00091028 | ||||
Approve | 16305876 | 551 days ago | IN | 0 ETH | 0.00087929 | ||||
Approve | 16305868 | 551 days ago | IN | 0 ETH | 0.00083189 | ||||
Approve | 16305860 | 551 days ago | IN | 0 ETH | 0.00092191 | ||||
Approve | 16305850 | 551 days ago | IN | 0 ETH | 0.00090929 | ||||
Approve | 16305840 | 551 days ago | IN | 0 ETH | 0.00092037 | ||||
Approve | 16305807 | 551 days ago | IN | 0 ETH | 0.00091992 | ||||
Approve | 16305791 | 551 days ago | IN | 0 ETH | 0.00089728 | ||||
Approve | 16305760 | 551 days ago | IN | 0 ETH | 0.00105474 | ||||
Approve | 16305748 | 551 days ago | IN | 0 ETH | 0.0009651 | ||||
Approve | 16305730 | 551 days ago | IN | 0 ETH | 0.00057568 | ||||
Approve | 16305717 | 551 days ago | IN | 0 ETH | 0.00060653 | ||||
Approve | 16305708 | 551 days ago | IN | 0 ETH | 0.00057392 | ||||
Approve | 16305700 | 551 days ago | IN | 0 ETH | 0.00061435 | ||||
Approve | 16305686 | 551 days ago | IN | 0 ETH | 0.00079215 | ||||
Approve | 16305653 | 551 days ago | IN | 0 ETH | 0.00080331 | ||||
Approve | 16305632 | 551 days ago | IN | 0 ETH | 0.0004657 | ||||
Approve | 16305631 | 551 days ago | IN | 0 ETH | 0.00047936 | ||||
Approve | 16305631 | 551 days ago | IN | 0 ETH | 0.00047936 | ||||
Approve | 16305631 | 551 days ago | IN | 0 ETH | 0.00080883 | ||||
Approve | 16305583 | 551 days ago | IN | 0 ETH | 0.00089343 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
14356933 | 848 days ago | 0.000276 ETH | ||||
14356933 | 848 days ago | 0.069 ETH | ||||
14356933 | 848 days ago | 0.022908 ETH | ||||
14356933 | 848 days ago | 0.022908 ETH | ||||
14356933 | 848 days ago | 0.022908 ETH | ||||
14251282 | 864 days ago | 0.019458 ETH | ||||
14251282 | 864 days ago | 4.8645 ETH | ||||
14251282 | 864 days ago | 1.615014 ETH | ||||
14251282 | 864 days ago | 1.615014 ETH | ||||
14251282 | 864 days ago | 1.615014 ETH |
Loading...
Loading
Contract Name:
HazyHares
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; contract HazyHares is ERC721 { event Mint(address indexed from, uint256 indexed tokenId); modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } modifier onlyCollaborator() { bool isCollaborator = false; for (uint256 i; i < collaborators.length; i++) { if (collaborators[i].addr == msg.sender) { isCollaborator = true; break; } } require( owner() == _msgSender() || isCollaborator, "Ownable: caller is not the owner nor a collaborator" ); _; } modifier claimStarted() { require( startClaimDate != 0 && startClaimDate <= block.timestamp, "You are too early" ); _; } modifier presaleStarted() { require( startPresaleDate != 0 && startPresaleDate <= block.timestamp, "Presale not started yet" ); _; } struct Collaborators { address addr; uint256 cut; } uint256 private startClaimDate = 1644699600; uint256 private startPresaleDate = 1644688800; uint256 private mintPrice = 69000000000000000; uint256 private presaleMintPrice = 69000000000000000; uint256 private totalTokens = 10000; uint256 private totalMintedTokens = 0; uint256 private maxHarePerTransactionDuringPresale = 20; uint256 private maxHarePerTransaction = 20; uint128 private basisPoints = 10000; string private baseURI = "https://hazyhares.s3.amazonaws.com/"; uint256 public giveawayCount = 50; mapping(address => uint256) public claimedHarePerWallet; uint16[] availableHares; Collaborators[] private collaborators; mapping (address => bool) whitelistedAddresses; uint256 private firstFreeProbabilityGenerator = 10; uint256 private secondFreeProbabilityGenerator = 13; uint256 private thirdFreeProbabilityGenerator = 20; uint256 private fourthFreeProbabilityGenerator = 40; uint256 private firstProbabilitySwitch = 2000; uint256 private secondProbabilitySwitch = 4000; uint256 private thirdProbabilitySwitch = 6000; uint256 private fourthProbabilitySwitch = 8000; uint256 private targetValue = 7; constructor() ERC721("HazyHaresNFT", "HZH") {} // ONLY OWNER /** * Sets the collaborators of the project with their cuts */ function addCollaborators(Collaborators[] memory _collaborators) external onlyOwner { require(collaborators.length == 0, "Collaborators were already set"); uint128 totalCut; for (uint256 i; i < _collaborators.length; i++) { collaborators.push(_collaborators[i]); totalCut += uint128(_collaborators[i].cut); } require(totalCut == basisPoints, "Total cut does not add to 100%"); } // ONLY COLLABORATORS /** * @dev Allows to withdraw the Ether in the contract and split it among the collaborators */ function withdraw() external onlyCollaborator { uint256 totalBalance = address(this).balance; for (uint256 i; i < collaborators.length; i++) { payable(collaborators[i].addr).transfer( mulScale(totalBalance, collaborators[i].cut, basisPoints) ); } } /** * @dev Sets the base URI for the API that provides the NFT data. */ function setBaseTokenURI(string memory _uri) external onlyCollaborator { baseURI = _uri; } /** * @dev Sets the claim price for each hare in public sale */ function setMintPrice(uint256 _mintPrice) external onlyCollaborator { mintPrice = _mintPrice; } /** * @dev Sets the claim price for each hare in presale */ function setPresaleMintPrice(uint256 _presaleMintPrice) external onlyCollaborator { presaleMintPrice = _presaleMintPrice; } /** * @dev Sets the giveaway count */ function setGiveawayCount(uint256 _giveawayCount) external onlyCollaborator { giveawayCount = _giveawayCount; } /** * @dev Sets the firstFreeProbabilityGenerator */ function setFirstFreeProbabilityGenerator(uint256 _firstFreeProbabilityGenerator) external onlyCollaborator { firstFreeProbabilityGenerator = _firstFreeProbabilityGenerator; } /** * @dev Sets the secondFreeProbabilityGenerator */ function setSecondFreeProbabilityGenerator(uint256 _secondFreeProbabilityGenerator) external onlyCollaborator { secondFreeProbabilityGenerator = _secondFreeProbabilityGenerator; } /** * @dev Sets the thirdFreeProbabilityGenerator */ function setThirdFreeProbabilityGenerator(uint256 _thirdFreeProbabilityGenerator) external onlyCollaborator { thirdFreeProbabilityGenerator = _thirdFreeProbabilityGenerator; } /** * @dev Sets the fourthFreeProbabilityGenerator */ function setFourthFreeProbabilityGenerator(uint256 _fourthFreeProbabilityGenerator) external onlyCollaborator { fourthFreeProbabilityGenerator = _fourthFreeProbabilityGenerator; } /** * @dev Populates the available hares */ function addAvailableHares(uint16 from, uint16 to) external onlyCollaborator { for (uint16 i = from; i <= to; i++) { availableHares.push(i); } } /** * @dev Removes a chosen hare from the available list, only a utility function */ function removeHareFromAvailableHares(uint16 tokenId) external onlyCollaborator { for (uint16 i; i <= availableHares.length; i++) { if (availableHares[i] != tokenId) { continue; } availableHares[i] = availableHares[availableHares.length - 1]; availableHares.pop(); break; } } /** * @dev Sets the date that users can start claiming hares */ function setStartClaimDate(uint256 _startClaimDate) external onlyCollaborator { startClaimDate = _startClaimDate; } /** * @dev Sets the date that users can start claiming hares for presale */ function setStartPresaleDate(uint256 _startPresaleDate) external onlyCollaborator { startPresaleDate = _startPresaleDate; } /** * @dev Checks if a hare is in the available list */ function isHareAvailable(uint16 tokenId) external view onlyCollaborator returns (bool) { for (uint16 i; i < availableHares.length; i++) { if (availableHares[i] == tokenId) { return true; } } return false; } /** * @dev Give random hares to the provided address */ function reserveGiveawayHares(address _address) external onlyCollaborator { require(availableHares.length >= giveawayCount, "No hares left to be claimed"); totalMintedTokens += giveawayCount; uint256[] memory tokenIds = new uint256[](giveawayCount); for (uint256 i; i < giveawayCount; i++) { tokenIds[i] = getHareToBeClaimed(); } _batchMint(_address, tokenIds); giveawayCount = 0; } /** * @dev Whitelist addresses */ function whitelistAddress (address[] memory users) external onlyCollaborator { for (uint i = 0; i < users.length; i++) { whitelistedAddresses[users[i]] = true; } } /** * @dev Claim up to 20 hares at once */ function claimHares(uint256 quantity) external payable callerIsUser claimStarted returns (uint256[] memory) { require( msg.value >= mintPrice * quantity, "Not enough Ether to claim the Hares" ); require(quantity <= maxHarePerTransaction, "You can only claim 20 Hares per transaction"); require(availableHares.length >= quantity, "Not enough hares left"); require(availableHares.length - giveawayCount >= quantity, "No Hares left to be claimed"); // means that available hares is between 10k and 8k if (availableHares.length <= 10000 && availableHares.length > 10000 - firstProbabilitySwitch) { uint256 randomNumber = _random(firstFreeProbabilityGenerator); if (randomNumber == targetValue) { quantity = quantity + 1; } } // means that available hares is between 8k and 6k else if (availableHares.length <= 10000 - firstProbabilitySwitch && availableHares.length > 10000 - secondProbabilitySwitch) { uint256 randomNumber = _random(secondFreeProbabilityGenerator); if (randomNumber == targetValue) { quantity = quantity + 1; } } // means that available hares is between 6k and 4k else if (availableHares.length <= 10000 - secondProbabilitySwitch && availableHares.length > 10000 - thirdProbabilitySwitch) { uint256 randomNumber = _random(thirdFreeProbabilityGenerator); if (randomNumber == targetValue) { quantity = quantity + 1; } } // means that available hares is between 4k and 2k else if (availableHares.length <= 10000 - thirdProbabilitySwitch && availableHares.length > 10000 - fourthProbabilitySwitch) { uint256 randomNumber = _random(fourthFreeProbabilityGenerator); if (randomNumber == targetValue) { quantity = quantity + 1; } } uint256[] memory tokenIds = new uint256[](quantity); claimedHarePerWallet[msg.sender] += quantity; totalMintedTokens += quantity; for (uint256 i; i < quantity; i++) { tokenIds[i] = getHareToBeClaimed(); } _batchMint(msg.sender, tokenIds); return tokenIds; } /** * @dev Claim up to 20 hares at once in presale */ function presaleMintHares(uint256 quantity) external payable callerIsUser presaleStarted returns (uint256[] memory) { require( msg.value >= presaleMintPrice * quantity, "Not enough Ether to claim the Hares" ); require(quantity <= maxHarePerTransactionDuringPresale, "You can only claim 20 hares per transaction"); require(availableHares.length >= quantity, "Not enough hares left"); require(availableHares.length - giveawayCount >= quantity, "No Hares left to be claimed"); // means that available hares is between 10k and 8k if (availableHares.length <= 10000 && availableHares.length > 10000 - firstProbabilitySwitch) { uint256 randomNumber = _random(firstFreeProbabilityGenerator); if (randomNumber == targetValue) { quantity = quantity + 1; } } // means that available hares is between 8k and 6k else if (availableHares.length <= 10000 - firstProbabilitySwitch && availableHares.length > 10000 - secondProbabilitySwitch) { uint256 randomNumber = _random(secondFreeProbabilityGenerator); if (randomNumber == targetValue) { quantity = quantity + 1; } } // means that available hares is between 6k and 4k else if (availableHares.length <= 10000 - secondProbabilitySwitch && availableHares.length > 10000 - thirdProbabilitySwitch) { uint256 randomNumber = _random(thirdFreeProbabilityGenerator); if (randomNumber == targetValue) { quantity = quantity + 1; } } // means that available hares is between 4k and 2k else if (availableHares.length <= 10000 - thirdProbabilitySwitch && availableHares.length > 10000 - fourthProbabilitySwitch) { uint256 randomNumber = _random(fourthFreeProbabilityGenerator); if (randomNumber == targetValue) { quantity = quantity + 1; } } uint256[] memory tokenIds = new uint256[](quantity); claimedHarePerWallet[msg.sender] += quantity; totalMintedTokens += quantity; for (uint256 i; i < quantity; i++) { tokenIds[i] = getHareToBeClaimed(); } _batchMint(msg.sender, tokenIds); return 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 Hares are still available to be claimed */ function getAvailableHares() external view returns (uint256) { return availableHares.length; } /** * @dev Returns the claim price */ function getmintPrice() external view returns (uint256) { return mintPrice; } /** * @dev Returns the total supply */ function totalSupply() external view virtual returns (uint256) { return totalMintedTokens; } // Private and Internal functions /** * @dev Returns a random available Hare to be claimed */ function getHareToBeClaimed() private returns (uint256) { uint256 random = _getRandomNumber(availableHares.length); uint256 tokenId = uint256(availableHares[random]); availableHares[random] = availableHares[availableHares.length - 1]; availableHares.pop(); return tokenId; } /** * @dev Generates a pseudo-random number. */ function _getRandomNumber(uint256 _upper) private view returns (uint256) { uint256 random = uint256( keccak256( abi.encodePacked( availableHares.length, blockhash(block.number - 1), block.coinbase, block.difficulty, msg.sender ) ) ); return random % _upper; } /** * @dev Generates a pseudo-random number given a range */ function _random(uint256 _upper) private view returns (uint256) { uint256 randomHash = uint256(keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 1), block.difficulty, msg.sender))); return randomHash % _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"; /** * @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; // /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// 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":"uint16","name":"from","type":"uint16"},{"internalType":"uint16","name":"to","type":"uint16"}],"name":"addAvailableHares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"cut","type":"uint256"}],"internalType":"struct HazyHares.Collaborators[]","name":"_collaborators","type":"tuple[]"}],"name":"addCollaborators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"claimHares","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedHarePerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAvailableHares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getmintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayCount","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":"uint16","name":"tokenId","type":"uint16"}],"name":"isHareAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"presaleMintHares","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"removeHareFromAvailableHares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"reserveGiveawayHares","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":"_firstFreeProbabilityGenerator","type":"uint256"}],"name":"setFirstFreeProbabilityGenerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fourthFreeProbabilityGenerator","type":"uint256"}],"name":"setFourthFreeProbabilityGenerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_giveawayCount","type":"uint256"}],"name":"setGiveawayCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleMintPrice","type":"uint256"}],"name":"setPresaleMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_secondFreeProbabilityGenerator","type":"uint256"}],"name":"setSecondFreeProbabilityGenerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startClaimDate","type":"uint256"}],"name":"setStartClaimDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startPresaleDate","type":"uint256"}],"name":"setStartPresaleDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_thirdFreeProbabilityGenerator","type":"uint256"}],"name":"setThirdFreeProbabilityGenerator","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":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6362081fd0600755636207f5a060085566f52322698080006009819055600a55612710600b8190556000600c556014600d819055600e55600f80546001600160801b031916909117905560e06040526023608081815290620040e860a039805162000073916010916020909101906200018d565b506032601155600a601655600d601755601460185560286019556107d0601a55610fa0601b55611770601c55611f40601d556007601e55348015620000b757600080fd5b506040518060400160405280600c81526020016b12185e9e52185c995cd3919560a21b81525060405180604001604052806003815260200162090b4960eb1b81525060006200010b6200018960201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200016a9060019060208501906200018d565b508051620001809060029060208401906200018d565b50505062000270565b3390565b8280546200019b9062000233565b90600052602060002090601f016020900481019282620001bf57600085556200020a565b82601f10620001da57805160ff19168380011785556200020a565b828001600101855582156200020a579182015b828111156200020a578251825591602001919060010190620001ed565b50620002189291506200021c565b5090565b5b808211156200021857600081556001016200021d565b6002810460018216806200024857607f821691505b602082108114156200026a57634e487b7160e01b600052602260045260246000fd5b50919050565b613e6880620002806000396000f3fe6080604052600436106102515760003560e01c8063715018a611610139578063c87b56dd116100b6578063e985e9c51161007a578063e985e9c5146106a5578063e9be0f3f146106c5578063f2fde38b146106da578063f3de3ac3146106fa578063f4a0a5281461071a578063f980baf41461073a57610251565b8063c87b56dd1461061d578063cb6f11f21461063d578063d4444d9714610650578063d547cfb714610670578063e699ac271461068557610251565b806395d89b41116100fd57806395d89b4114610588578063a22cb4651461059d578063b31d61b0146105bd578063b88d4fde146105dd578063c6cf02a2146105fd57610251565b8063715018a61461050957806374baf5631461051e578063867c45391461053e5780638d4823541461055e5780638da5cb5b1461057357610251565b806323b872dd116101d25780634f6ccce7116101965780634f6ccce7146104495780635258bc32146104695780636352211e146104895780636d44aef5146104a95780636f3d2004146104c957806370a08231146104e957610251565b806323b872dd146103b457806330176e13146103d457806337a13193146103f45780633ccfd60b1461041457806342842e0e1461042957610251565b8063081812fc11610219578063081812fc146103125780630955f63c1461033f578063095ea7b31461035f57806318160ddd1461037f57806323ab18f11461039457610251565b806301ffc9a714610256578063020ef2311461028c578063035f86f9146102ae578063064a2d0d146102d057806306fdde03146102f0575b600080fd5b34801561026257600080fd5b506102766102713660046132c3565b61075a565b60405161028391906134f6565b60405180910390f35b34801561029857600080fd5b506102a16107a2565b6040516102839190613c4a565b3480156102ba57600080fd5b506102ce6102c9366004613384565b6107a8565b005b3480156102dc57600080fd5b506102a16102eb366004612fef565b610873565b3480156102fc57600080fd5b50610305610885565b6040516102839190613501565b34801561031e57600080fd5b5061033261032d366004613384565b610917565b6040516102839190613461565b34801561034b57600080fd5b506102ce61035a3660046131ee565b61095a565b34801561036b57600080fd5b506102ce61037a366004613129565b610ab0565b34801561038b57600080fd5b506102a1610b48565b3480156103a057600080fd5b506102ce6103af366004613384565b610b4e565b3480156103c057600080fd5b506102ce6103cf36600461303b565b610c10565b3480156103e057600080fd5b506102ce6103ef3660046132fb565b610c48565b34801561040057600080fd5b506102ce61040f366004613384565b610d17565b34801561042057600080fd5b506102ce610dd9565b34801561043557600080fd5b506102ce61044436600461303b565b610f7a565b34801561045557600080fd5b506102a1610464366004613384565b610f95565b34801561047557600080fd5b506102ce610484366004612fef565b610fc0565b34801561049557600080fd5b506103326104a4366004613384565b611178565b3480156104b557600080fd5b506102ce6104c4366004613384565b6111ad565b3480156104d557600080fd5b506102ce6104e4366004613384565b61126f565b3480156104f557600080fd5b506102a1610504366004612fef565b611331565b34801561051557600080fd5b506102ce611375565b34801561052a57600080fd5b50610276610539366004613341565b6113fe565b61055161054c366004613384565b611546565b60405161028391906134b2565b34801561056a57600080fd5b506102a161185b565b34801561057f57600080fd5b50610332611861565b34801561059457600080fd5b50610305611870565b3480156105a957600080fd5b506102ce6105b83660046130ef565b61187f565b3480156105c957600080fd5b506102ce6105d8366004613152565b61194d565b3480156105e957600080fd5b506102ce6105f8366004613076565b611a7f565b34801561060957600080fd5b506102ce61061836600461335b565b611abe565b34801561062957600080fd5b50610305610638366004613384565b611bf5565b61055161064b366004613384565b611c78565b34801561065c57600080fd5b506102ce61066b366004613384565b611f82565b34801561067c57600080fd5b50610305612044565b34801561069157600080fd5b506102ce6106a0366004613384565b612053565b3480156106b157600080fd5b506102766106c0366004613009565b612115565b3480156106d157600080fd5b506102a1612143565b3480156106e657600080fd5b506102ce6106f5366004612fef565b612149565b34801561070657600080fd5b506102ce610715366004613384565b612209565b34801561072657600080fd5b506102ce610735366004613384565b6122cb565b34801561074657600080fd5b506102ce610755366004613341565b61238d565b60006001600160e01b031982166380ac58cd60e01b148061078b57506001600160e01b03198216635b5e139f60e01b145b8061079a575061079a826125b7565b90505b919050565b60135490565b6000805b60145481101561081c57336001600160a01b0316601482815481106107e157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561080a576001915061081c565b8061081481613da8565b9150506107ac565b506108256125d0565b6001600160a01b0316610836611861565b6001600160a01b031614806108485750805b61086d5760405162461bcd60e51b815260040161086490613b1a565b60405180910390fd5b50601755565b60126020526000908152604090205481565b60606001805461089490613d51565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090613d51565b801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b5050505050905090565b6000610922826125d4565b61093e5760405162461bcd60e51b815260040161086490613993565b506000908152600560205260409020546001600160a01b031690565b6109626125d0565b6001600160a01b0316610973611861565b6001600160a01b0316146109995760405162461bcd60e51b8152600401610864906139df565b601454156109b95760405162461bcd60e51b815260040161086490613671565b6000805b8251811015610a7e5760148382815181106109e857634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b039092169190911781559101519101558251839082908110610a5357634e487b7160e01b600052603260045260246000fd5b60200260200101516020015182610a6a9190613ca1565b915080610a7681613da8565b9150506109bd565b50600f546001600160801b03828116911614610aac5760405162461bcd60e51b81526004016108649061375a565b5050565b6000610abb82611178565b9050806001600160a01b0316836001600160a01b03161415610aef5760405162461bcd60e51b815260040161086490613bb8565b806001600160a01b0316610b016125d0565b6001600160a01b03161480610b1d5750610b1d816106c06125d0565b610b395760405162461bcd60e51b815260040161086490613843565b610b4383836125f1565b505050565b600c5490565b6000805b601454811015610bc257336001600160a01b031660148281548110610b8757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610bb05760019150610bc2565b80610bba81613da8565b915050610b52565b50610bcb6125d0565b6001600160a01b0316610bdc611861565b6001600160a01b03161480610bee5750805b610c0a5760405162461bcd60e51b815260040161086490613b1a565b50600755565b610c21610c1b6125d0565b8261265f565b610c3d5760405162461bcd60e51b815260040161086490613bf9565b610b438383836126e4565b6000805b601454811015610cbc57336001600160a01b031660148281548110610c8157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610caa5760019150610cbc565b80610cb481613da8565b915050610c4c565b50610cc56125d0565b6001600160a01b0316610cd6611861565b6001600160a01b03161480610ce85750805b610d045760405162461bcd60e51b815260040161086490613b1a565b8151610b43906010906020850190612ede565b6000805b601454811015610d8b57336001600160a01b031660148281548110610d5057634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610d795760019150610d8b565b80610d8381613da8565b915050610d1b565b50610d946125d0565b6001600160a01b0316610da5611861565b6001600160a01b03161480610db75750805b610dd35760405162461bcd60e51b815260040161086490613b1a565b50600a55565b6000805b601454811015610e4d57336001600160a01b031660148281548110610e1257634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610e3b5760019150610e4d565b80610e4581613da8565b915050610ddd565b50610e566125d0565b6001600160a01b0316610e67611861565b6001600160a01b03161480610e795750805b610e955760405162461bcd60e51b815260040161086490613b1a565b4760005b601454811015610b435760148181548110610ec457634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000160009054906101000a90046001600160a01b03166001600160a01b03166108fc610f3f8460148581548110610f1a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912060016002909202010154600f546001600160801b0316612811565b6040518115909202916000818181858888f19350505050158015610f67573d6000803e3d6000fd5b5080610f7281613da8565b915050610e99565b610b4383838360405180602001604052806000815250611a7f565b6000610fa0826125d4565b610fbc5760405162461bcd60e51b815260040161086490613791565b5090565b6000805b60145481101561103457336001600160a01b031660148281548110610ff957634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156110225760019150611034565b8061102c81613da8565b915050610fc4565b5061103d6125d0565b6001600160a01b031661104e611861565b6001600160a01b031614806110605750805b61107c5760405162461bcd60e51b815260040161086490613b1a565b60115460135410156110a05760405162461bcd60e51b815260040161086490613a5d565b601154600c60008282546110b49190613cc3565b909155505060115460009067ffffffffffffffff8111156110e557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561110e578160200160208202803683370190505b50905060005b601154811015611163576111266128e8565b82828151811061114657634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061115b81613da8565b915050611114565b5061116e8382612a3f565b5050600060115550565b6000818152600360205260408120546001600160a01b03168061079a5760405162461bcd60e51b815260040161086490613915565b6000805b60145481101561122157336001600160a01b0316601482815481106111e657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561120f5760019150611221565b8061121981613da8565b9150506111b1565b5061122a6125d0565b6001600160a01b031661123b611861565b6001600160a01b0316148061124d5750805b6112695760405162461bcd60e51b815260040161086490613b1a565b50600855565b6000805b6014548110156112e357336001600160a01b0316601482815481106112a857634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156112d157600191506112e3565b806112db81613da8565b915050611273565b506112ec6125d0565b6001600160a01b03166112fd611861565b6001600160a01b0316148061130f5750805b61132b5760405162461bcd60e51b815260040161086490613b1a565b50601655565b60006001600160a01b0382166113595760405162461bcd60e51b8152600401610864906138cb565b506001600160a01b031660009081526004602052604090205490565b61137d6125d0565b6001600160a01b031661138e611861565b6001600160a01b0316146113b45760405162461bcd60e51b8152600401610864906139df565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080805b60145481101561147357336001600160a01b03166014828154811061143857634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156114615760019150611473565b8061146b81613da8565b915050611403565b5061147c6125d0565b6001600160a01b031661148d611861565b6001600160a01b0316148061149f5750805b6114bb5760405162461bcd60e51b815260040161086490613b1a565b60005b60135461ffff8216101561153a578361ffff1660138261ffff16815481106114f657634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff161415611528576001925050611540565b8061153281613d86565b9150506114be565b50600091505b50919050565b60603233146115675760405162461bcd60e51b81526004016108649061380c565b6008541580159061157a57504260085411155b6115965760405162461bcd60e51b815260040161086490613ae3565b81600a546115a49190613cef565b3410156115c35760405162461bcd60e51b815260040161086490613514565b600d548211156115e55760405162461bcd60e51b815260040161086490613557565b6013548211156116075760405162461bcd60e51b8152600401610864906137dd565b601154601354839161161891613d0e565b10156116365760405162461bcd60e51b8152600401610864906136a8565b601354612710108015906116595750601a5461165490612710613d0e565b601354115b1561168b57600061166b601654612bfb565b9050601e5481141561168557611682836001613cc3565b92505b5061176a565b601a5461169a90612710613d0e565b601354118015906116ba5750601b546116b590612710613d0e565b601354115b156116cc57600061166b601754612bfb565b601b546116db90612710613d0e565b601354118015906116fb5750601c546116f690612710613d0e565b601354115b1561170d57600061166b601854612bfb565b601c5461171c90612710613d0e565b6013541180159061173c5750601d5461173790612710613d0e565b601354115b1561176a57600061174e601954612bfb565b9050601e5481141561176857611765836001613cc3565b92505b505b60008267ffffffffffffffff81111561179357634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156117bc578160200160208202803683370190505b50336000908152601260205260408120805492935085929091906117e1908490613cc3565b9250508190555082600c60008282546117fa9190613cc3565b90915550600090505b83811015611850576118136128e8565b82828151811061183357634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061184881613da8565b915050611803565b5061079a3382612a3f565b60095490565b6000546001600160a01b031690565b60606002805461089490613d51565b6118876125d0565b6001600160a01b0316826001600160a01b031614156118b85760405162461bcd60e51b815260040161086490613723565b80600660006118c56125d0565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119096125d0565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194191906134f6565b60405180910390a35050565b6000805b6014548110156119c157336001600160a01b03166014828154811061198657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156119af57600191506119c1565b806119b981613da8565b915050611951565b506119ca6125d0565b6001600160a01b03166119db611861565b6001600160a01b031614806119ed5750805b611a095760405162461bcd60e51b815260040161086490613b1a565b60005b8251811015610b4357600160156000858481518110611a3b57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611a7781613da8565b915050611a0c565b611a90611a8a6125d0565b8361265f565b611aac5760405162461bcd60e51b815260040161086490613bf9565b611ab884848484612c44565b50505050565b6000805b601454811015611b3257336001600160a01b031660148281548110611af757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611b205760019150611b32565b80611b2a81613da8565b915050611ac2565b50611b3b6125d0565b6001600160a01b0316611b4c611861565b6001600160a01b03161480611b5e5750805b611b7a5760405162461bcd60e51b815260040161086490613b1a565b825b8261ffff168161ffff1611611ab857601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09060108204018054600f9092166002026101000a61ffff818102199093169284160291909117905580611bed81613d86565b915050611b7c565b6060611c00826125d4565b611c1c5760405162461bcd60e51b815260040161086490613a94565b6000611c26612044565b90506000815111611c465760405180602001604052806000815250611c71565b80611c5084612c77565b604051602001611c619291906133c8565b6040516020818303038152906040525b9392505050565b6060323314611c995760405162461bcd60e51b81526004016108649061380c565b60075415801590611cac57504260075411155b611cc85760405162461bcd60e51b8152600401610864906138a0565b81600954611cd69190613cef565b341015611cf55760405162461bcd60e51b815260040161086490613514565b600e54821115611d175760405162461bcd60e51b815260040161086490613b6d565b601354821115611d395760405162461bcd60e51b8152600401610864906137dd565b6011546013548391611d4a91613d0e565b1015611d685760405162461bcd60e51b8152600401610864906136a8565b60135461271010801590611d8b5750601a54611d8690612710613d0e565b601354115b15611dbd576000611d9d601654612bfb565b9050601e54811415611db757611db4836001613cc3565b92505b50611e9c565b601a54611dcc90612710613d0e565b60135411801590611dec5750601b54611de790612710613d0e565b601354115b15611dfe576000611d9d601754612bfb565b601b54611e0d90612710613d0e565b60135411801590611e2d5750601c54611e2890612710613d0e565b601354115b15611e3f576000611d9d601854612bfb565b601c54611e4e90612710613d0e565b60135411801590611e6e5750601d54611e6990612710613d0e565b601354115b15611e9c576000611e80601954612bfb565b9050601e54811415611e9a57611e97836001613cc3565b92505b505b60008267ffffffffffffffff811115611ec557634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611eee578160200160208202803683370190505b5033600090815260126020526040812080549293508592909190611f13908490613cc3565b9250508190555082600c6000828254611f2c9190613cc3565b90915550600090505b8381101561185057611f456128e8565b828281518110611f6557634e487b7160e01b600052603260045260246000fd5b602090810291909101015280611f7a81613da8565b915050611f35565b6000805b601454811015611ff657336001600160a01b031660148281548110611fbb57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611fe45760019150611ff6565b80611fee81613da8565b915050611f86565b50611fff6125d0565b6001600160a01b0316612010611861565b6001600160a01b031614806120225750805b61203e5760405162461bcd60e51b815260040161086490613b1a565b50601855565b60606010805461089490613d51565b6000805b6014548110156120c757336001600160a01b03166014828154811061208c57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156120b557600191506120c7565b806120bf81613da8565b915050612057565b506120d06125d0565b6001600160a01b03166120e1611861565b6001600160a01b031614806120f35750805b61210f5760405162461bcd60e51b815260040161086490613b1a565b50601155565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b60115481565b6121516125d0565b6001600160a01b0316612162611861565b6001600160a01b0316146121885760405162461bcd60e51b8152600401610864906139df565b6001600160a01b0381166121ae5760405162461bcd60e51b8152600401610864906135f4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b60145481101561227d57336001600160a01b03166014828154811061224257634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561226b576001915061227d565b8061227581613da8565b91505061220d565b506122866125d0565b6001600160a01b0316612297611861565b6001600160a01b031614806122a95750805b6122c55760405162461bcd60e51b815260040161086490613b1a565b50601955565b6000805b60145481101561233f57336001600160a01b03166014828154811061230457634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561232d576001915061233f565b8061233781613da8565b9150506122cf565b506123486125d0565b6001600160a01b0316612359611861565b6001600160a01b0316148061236b5750805b6123875760405162461bcd60e51b815260040161086490613b1a565b50600955565b6000805b60145481101561240157336001600160a01b0316601482815481106123c657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156123ef5760019150612401565b806123f981613da8565b915050612391565b5061240a6125d0565b6001600160a01b031661241b611861565b6001600160a01b0316148061242d5750805b6124495760405162461bcd60e51b815260040161086490613b1a565b60005b60135461ffff821611610b43578261ffff1660138261ffff168154811061248357634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16146124af576125a5565b601380546124bf90600190613d0e565b815481106124dd57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660138261ffff168154811061252657634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550601380548061257457634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a02191690559055610b43565b806125af81613d86565b91505061244c565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061262682611178565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061266a826125d4565b6126865760405162461bcd60e51b815260040161086490613791565b600061269183611178565b9050806001600160a01b0316846001600160a01b031614806126cc5750836001600160a01b03166126c184610917565b6001600160a01b0316145b806126dc57506126dc8185612115565b949350505050565b826001600160a01b03166126f782611178565b6001600160a01b03161461271d5760405162461bcd60e51b815260040161086490613a14565b6001600160a01b0382166127435760405162461bcd60e51b8152600401610864906136df565b61274e838383610b43565b6127596000826125f1565b6001600160a01b0383166000908152600460205260408120805460019290612782908490613d0e565b90915550506001600160a01b03821660009081526004602052604081208054600192906127b0908490613cc3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000806128276001600160801b03841686613cdb565b9050600061283e6001600160801b03851687613dc3565b905060006128556001600160801b03861687613cdb565b9050600061286c6001600160801b03871688613dc3565b90506001600160801b0386166128828285613cef565b61288c9190613cdb565b6128968385613cef565b6128a08387613cef565b6001600160801b0389166128b48689613cef565b6128be9190613cef565b6128c89190613cc3565b6128d29190613cc3565b6128dc9190613cc3565b98975050505050505050565b6000806128f9601380549050612d92565b905060006013828154811061291e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1690506013600160138054905061295c9190613d0e565b8154811061297a57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff16601383815481106129bf57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506013805480612a0d57634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905591505090565b6001600160a01b038216612a655760405162461bcd60e51b81526004016108649061395e565b80516001600160a01b03831660009081526004602052604081208054909190612a8f908490613cc3565b90915550600090505b8151811015610b4357612ad1828281518110612ac457634e487b7160e01b600052603260045260246000fd5b60200260200101516125d4565b15612aee5760405162461bcd60e51b81526004016108649061363a565b612b21600084848481518110612b1457634e487b7160e01b600052603260045260246000fd5b6020026020010151610b43565b8260036000848481518110612b4657634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818181518110612ba057634e487b7160e01b600052603260045260246000fd5b6020026020010151836001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480612bf381613da8565b915050612a98565b60008042612c0a600143613d0e565b404433604051602001612c209493929190613433565b60408051601f1981840301815291905280516020909101209050611c718382613dc3565b612c4f8484846126e4565b612c5b84848484612dbd565b611ab85760405162461bcd60e51b8152600401610864906135a2565b606081612c9c57506040805180820190915260018152600360fc1b602082015261079d565b8160005b8115612cc65780612cb081613da8565b9150612cbf9050600a83613cdb565b9150612ca0565b60008167ffffffffffffffff811115612cef57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d19576020820181803683370190505b5090505b84156126dc57612d2e600183613d0e565b9150612d3b600a86613dc3565b612d46906030613cc3565b60f81b818381518110612d6957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612d8b600a86613cdb565b9450612d1d565b6013546000908190612da5600143613d0e565b40414433604051602001612c209594939291906133f7565b6000612dd1846001600160a01b0316612ed8565b15612ecd57836001600160a01b031663150b7a02612ded6125d0565b8786866040518563ffffffff1660e01b8152600401612e0f9493929190613475565b602060405180830381600087803b158015612e2957600080fd5b505af1925050508015612e59575060408051601f3d908101601f19168201909252612e56918101906132df565b60015b612eb3573d808015612e87576040519150601f19603f3d011682016040523d82523d6000602084013e612e8c565b606091505b508051612eab5760405162461bcd60e51b8152600401610864906135a2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506126dc565b506001949350505050565b3b151590565b828054612eea90613d51565b90600052602060002090601f016020900481019282612f0c5760008555612f52565b82601f10612f2557805160ff1916838001178555612f52565b82800160010185558215612f52579182015b82811115612f52578251825591602001919060010190612f37565b50610fbc9291505b80821115610fbc5760008155600101612f5a565b600067ffffffffffffffff831115612f8857612f88613e03565b612f9b601f8401601f1916602001613c53565b9050828152838383011115612faf57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461079d57600080fd5b803561ffff8116811461079d57600080fd5b600060208284031215613000578081fd5b611c7182612fc6565b6000806040838503121561301b578081fd5b61302483612fc6565b915061303260208401612fc6565b90509250929050565b60008060006060848603121561304f578081fd5b61305884612fc6565b925061306660208501612fc6565b9150604084013590509250925092565b6000806000806080858703121561308b578081fd5b61309485612fc6565b93506130a260208601612fc6565b925060408501359150606085013567ffffffffffffffff8111156130c4578182fd5b8501601f810187136130d4578182fd5b6130e387823560208401612f6e565b91505092959194509250565b60008060408385031215613101578182fd5b61310a83612fc6565b91506020830135801515811461311e578182fd5b809150509250929050565b6000806040838503121561313b578182fd5b61314483612fc6565b946020939093013593505050565b60006020808385031215613164578182fd5b823567ffffffffffffffff81111561317a578283fd5b8301601f8101851361318a578283fd5b803561319d61319882613c7d565b613c53565b81815283810190838501858402850186018910156131b9578687fd5b8694505b838510156131e2576131ce81612fc6565b8352600194909401939185019185016131bd565b50979650505050505050565b60006020808385031215613200578182fd5b823567ffffffffffffffff80821115613217578384fd5b818501915085601f83011261322a578384fd5b813561323861319882613c7d565b818152848101908486016040808502870188018b1015613256578889fd5b8896505b848710156132b45780828c031215613270578889fd5b8051818101818110888211171561328957613289613e03565b825261329483612fc6565b81528289013589820152845260019690960195928701929081019061325a565b50909998505050505050505050565b6000602082840312156132d4578081fd5b8135611c7181613e19565b6000602082840312156132f0578081fd5b8151611c7181613e19565b60006020828403121561330c578081fd5b813567ffffffffffffffff811115613322578182fd5b8201601f81018413613332578182fd5b6126dc84823560208401612f6e565b600060208284031215613352578081fd5b611c7182612fdd565b6000806040838503121561336d578182fd5b61337683612fdd565b915061303260208401612fdd565b600060208284031215613395578081fd5b5035919050565b600081518084526133b4816020860160208601613d25565b601f01601f19169290920160200192915050565b600083516133da818460208801613d25565b8351908301906133ee818360208801613d25565b01949350505050565b94855260208501939093526bffffffffffffffffffffffff19606092831b81166040860152605485019190915291901b16607482015260880190565b93845260208401929092526040830152606090811b6bffffffffffffffffffffffff19169082015260740190565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906134a89083018461339c565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156134ea578351835292840192918401916001016134ce565b50909695505050505050565b901515815260200190565b600060208252611c71602083018461339c565b60208082526023908201527f4e6f7420656e6f75676820457468657220746f20636c61696d2074686520486160408201526272657360e81b606082015260800190565b6020808252602b908201527f596f752063616e206f6e6c7920636c61696d203230206861726573207065722060408201526a3a3930b739b0b1ba34b7b760a91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252601e908201527f436f6c6c61626f7261746f7273207765726520616c7265616479207365740000604082015260600190565b6020808252601b908201527f4e6f204861726573206c65667420746f20626520636c61696d65640000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601e908201527f546f74616c2063757420646f6573206e6f742061646420746f20313030250000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b602080825260159082015274139bdd08195b9bdd59da081a185c995cc81b19599d605a1b604082015260600190565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b602080825260119082015270596f752061726520746f6f206561726c7960781b604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252601b908201527f4e6f206861726573206c65667420746f20626520636c61696d65640000000000604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526017908201527f50726573616c65206e6f74207374617274656420796574000000000000000000604082015260600190565b60208082526033908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015272103737b910309031b7b63630b137b930ba37b960691b606082015260800190565b6020808252602b908201527f596f752063616e206f6e6c7920636c61696d203230204861726573207065722060408201526a3a3930b739b0b1ba34b7b760a91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b90815260200190565b60405181810167ffffffffffffffff81118282101715613c7557613c75613e03565b604052919050565b600067ffffffffffffffff821115613c9757613c97613e03565b5060209081020190565b60006001600160801b038083168185168083038211156133ee576133ee613dd7565b60008219821115613cd657613cd6613dd7565b500190565b600082613cea57613cea613ded565b500490565b6000816000190483118215151615613d0957613d09613dd7565b500290565b600082821015613d2057613d20613dd7565b500390565b60005b83811015613d40578181015183820152602001613d28565b83811115611ab85750506000910152565b600281046001821680613d6557607f821691505b6020821081141561154057634e487b7160e01b600052602260045260246000fd5b600061ffff80831681811415613d9e57613d9e613dd7565b6001019392505050565b6000600019821415613dbc57613dbc613dd7565b5060010190565b600082613dd257613dd2613ded565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114613e2f57600080fd5b5056fea2646970667358221220ce2c957a804ad7f58778ac31db95ddeb89f6ce2c34cb863e22b1bfb8572b279564736f6c6343000800003368747470733a2f2f68617a7968617265732e73332e616d617a6f6e6177732e636f6d2f
Deployed Bytecode
0x6080604052600436106102515760003560e01c8063715018a611610139578063c87b56dd116100b6578063e985e9c51161007a578063e985e9c5146106a5578063e9be0f3f146106c5578063f2fde38b146106da578063f3de3ac3146106fa578063f4a0a5281461071a578063f980baf41461073a57610251565b8063c87b56dd1461061d578063cb6f11f21461063d578063d4444d9714610650578063d547cfb714610670578063e699ac271461068557610251565b806395d89b41116100fd57806395d89b4114610588578063a22cb4651461059d578063b31d61b0146105bd578063b88d4fde146105dd578063c6cf02a2146105fd57610251565b8063715018a61461050957806374baf5631461051e578063867c45391461053e5780638d4823541461055e5780638da5cb5b1461057357610251565b806323b872dd116101d25780634f6ccce7116101965780634f6ccce7146104495780635258bc32146104695780636352211e146104895780636d44aef5146104a95780636f3d2004146104c957806370a08231146104e957610251565b806323b872dd146103b457806330176e13146103d457806337a13193146103f45780633ccfd60b1461041457806342842e0e1461042957610251565b8063081812fc11610219578063081812fc146103125780630955f63c1461033f578063095ea7b31461035f57806318160ddd1461037f57806323ab18f11461039457610251565b806301ffc9a714610256578063020ef2311461028c578063035f86f9146102ae578063064a2d0d146102d057806306fdde03146102f0575b600080fd5b34801561026257600080fd5b506102766102713660046132c3565b61075a565b60405161028391906134f6565b60405180910390f35b34801561029857600080fd5b506102a16107a2565b6040516102839190613c4a565b3480156102ba57600080fd5b506102ce6102c9366004613384565b6107a8565b005b3480156102dc57600080fd5b506102a16102eb366004612fef565b610873565b3480156102fc57600080fd5b50610305610885565b6040516102839190613501565b34801561031e57600080fd5b5061033261032d366004613384565b610917565b6040516102839190613461565b34801561034b57600080fd5b506102ce61035a3660046131ee565b61095a565b34801561036b57600080fd5b506102ce61037a366004613129565b610ab0565b34801561038b57600080fd5b506102a1610b48565b3480156103a057600080fd5b506102ce6103af366004613384565b610b4e565b3480156103c057600080fd5b506102ce6103cf36600461303b565b610c10565b3480156103e057600080fd5b506102ce6103ef3660046132fb565b610c48565b34801561040057600080fd5b506102ce61040f366004613384565b610d17565b34801561042057600080fd5b506102ce610dd9565b34801561043557600080fd5b506102ce61044436600461303b565b610f7a565b34801561045557600080fd5b506102a1610464366004613384565b610f95565b34801561047557600080fd5b506102ce610484366004612fef565b610fc0565b34801561049557600080fd5b506103326104a4366004613384565b611178565b3480156104b557600080fd5b506102ce6104c4366004613384565b6111ad565b3480156104d557600080fd5b506102ce6104e4366004613384565b61126f565b3480156104f557600080fd5b506102a1610504366004612fef565b611331565b34801561051557600080fd5b506102ce611375565b34801561052a57600080fd5b50610276610539366004613341565b6113fe565b61055161054c366004613384565b611546565b60405161028391906134b2565b34801561056a57600080fd5b506102a161185b565b34801561057f57600080fd5b50610332611861565b34801561059457600080fd5b50610305611870565b3480156105a957600080fd5b506102ce6105b83660046130ef565b61187f565b3480156105c957600080fd5b506102ce6105d8366004613152565b61194d565b3480156105e957600080fd5b506102ce6105f8366004613076565b611a7f565b34801561060957600080fd5b506102ce61061836600461335b565b611abe565b34801561062957600080fd5b50610305610638366004613384565b611bf5565b61055161064b366004613384565b611c78565b34801561065c57600080fd5b506102ce61066b366004613384565b611f82565b34801561067c57600080fd5b50610305612044565b34801561069157600080fd5b506102ce6106a0366004613384565b612053565b3480156106b157600080fd5b506102766106c0366004613009565b612115565b3480156106d157600080fd5b506102a1612143565b3480156106e657600080fd5b506102ce6106f5366004612fef565b612149565b34801561070657600080fd5b506102ce610715366004613384565b612209565b34801561072657600080fd5b506102ce610735366004613384565b6122cb565b34801561074657600080fd5b506102ce610755366004613341565b61238d565b60006001600160e01b031982166380ac58cd60e01b148061078b57506001600160e01b03198216635b5e139f60e01b145b8061079a575061079a826125b7565b90505b919050565b60135490565b6000805b60145481101561081c57336001600160a01b0316601482815481106107e157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561080a576001915061081c565b8061081481613da8565b9150506107ac565b506108256125d0565b6001600160a01b0316610836611861565b6001600160a01b031614806108485750805b61086d5760405162461bcd60e51b815260040161086490613b1a565b60405180910390fd5b50601755565b60126020526000908152604090205481565b60606001805461089490613d51565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090613d51565b801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b5050505050905090565b6000610922826125d4565b61093e5760405162461bcd60e51b815260040161086490613993565b506000908152600560205260409020546001600160a01b031690565b6109626125d0565b6001600160a01b0316610973611861565b6001600160a01b0316146109995760405162461bcd60e51b8152600401610864906139df565b601454156109b95760405162461bcd60e51b815260040161086490613671565b6000805b8251811015610a7e5760148382815181106109e857634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b039092169190911781559101519101558251839082908110610a5357634e487b7160e01b600052603260045260246000fd5b60200260200101516020015182610a6a9190613ca1565b915080610a7681613da8565b9150506109bd565b50600f546001600160801b03828116911614610aac5760405162461bcd60e51b81526004016108649061375a565b5050565b6000610abb82611178565b9050806001600160a01b0316836001600160a01b03161415610aef5760405162461bcd60e51b815260040161086490613bb8565b806001600160a01b0316610b016125d0565b6001600160a01b03161480610b1d5750610b1d816106c06125d0565b610b395760405162461bcd60e51b815260040161086490613843565b610b4383836125f1565b505050565b600c5490565b6000805b601454811015610bc257336001600160a01b031660148281548110610b8757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610bb05760019150610bc2565b80610bba81613da8565b915050610b52565b50610bcb6125d0565b6001600160a01b0316610bdc611861565b6001600160a01b03161480610bee5750805b610c0a5760405162461bcd60e51b815260040161086490613b1a565b50600755565b610c21610c1b6125d0565b8261265f565b610c3d5760405162461bcd60e51b815260040161086490613bf9565b610b438383836126e4565b6000805b601454811015610cbc57336001600160a01b031660148281548110610c8157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610caa5760019150610cbc565b80610cb481613da8565b915050610c4c565b50610cc56125d0565b6001600160a01b0316610cd6611861565b6001600160a01b03161480610ce85750805b610d045760405162461bcd60e51b815260040161086490613b1a565b8151610b43906010906020850190612ede565b6000805b601454811015610d8b57336001600160a01b031660148281548110610d5057634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610d795760019150610d8b565b80610d8381613da8565b915050610d1b565b50610d946125d0565b6001600160a01b0316610da5611861565b6001600160a01b03161480610db75750805b610dd35760405162461bcd60e51b815260040161086490613b1a565b50600a55565b6000805b601454811015610e4d57336001600160a01b031660148281548110610e1257634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610e3b5760019150610e4d565b80610e4581613da8565b915050610ddd565b50610e566125d0565b6001600160a01b0316610e67611861565b6001600160a01b03161480610e795750805b610e955760405162461bcd60e51b815260040161086490613b1a565b4760005b601454811015610b435760148181548110610ec457634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000160009054906101000a90046001600160a01b03166001600160a01b03166108fc610f3f8460148581548110610f1a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912060016002909202010154600f546001600160801b0316612811565b6040518115909202916000818181858888f19350505050158015610f67573d6000803e3d6000fd5b5080610f7281613da8565b915050610e99565b610b4383838360405180602001604052806000815250611a7f565b6000610fa0826125d4565b610fbc5760405162461bcd60e51b815260040161086490613791565b5090565b6000805b60145481101561103457336001600160a01b031660148281548110610ff957634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156110225760019150611034565b8061102c81613da8565b915050610fc4565b5061103d6125d0565b6001600160a01b031661104e611861565b6001600160a01b031614806110605750805b61107c5760405162461bcd60e51b815260040161086490613b1a565b60115460135410156110a05760405162461bcd60e51b815260040161086490613a5d565b601154600c60008282546110b49190613cc3565b909155505060115460009067ffffffffffffffff8111156110e557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561110e578160200160208202803683370190505b50905060005b601154811015611163576111266128e8565b82828151811061114657634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061115b81613da8565b915050611114565b5061116e8382612a3f565b5050600060115550565b6000818152600360205260408120546001600160a01b03168061079a5760405162461bcd60e51b815260040161086490613915565b6000805b60145481101561122157336001600160a01b0316601482815481106111e657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561120f5760019150611221565b8061121981613da8565b9150506111b1565b5061122a6125d0565b6001600160a01b031661123b611861565b6001600160a01b0316148061124d5750805b6112695760405162461bcd60e51b815260040161086490613b1a565b50600855565b6000805b6014548110156112e357336001600160a01b0316601482815481106112a857634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156112d157600191506112e3565b806112db81613da8565b915050611273565b506112ec6125d0565b6001600160a01b03166112fd611861565b6001600160a01b0316148061130f5750805b61132b5760405162461bcd60e51b815260040161086490613b1a565b50601655565b60006001600160a01b0382166113595760405162461bcd60e51b8152600401610864906138cb565b506001600160a01b031660009081526004602052604090205490565b61137d6125d0565b6001600160a01b031661138e611861565b6001600160a01b0316146113b45760405162461bcd60e51b8152600401610864906139df565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080805b60145481101561147357336001600160a01b03166014828154811061143857634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156114615760019150611473565b8061146b81613da8565b915050611403565b5061147c6125d0565b6001600160a01b031661148d611861565b6001600160a01b0316148061149f5750805b6114bb5760405162461bcd60e51b815260040161086490613b1a565b60005b60135461ffff8216101561153a578361ffff1660138261ffff16815481106114f657634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff161415611528576001925050611540565b8061153281613d86565b9150506114be565b50600091505b50919050565b60603233146115675760405162461bcd60e51b81526004016108649061380c565b6008541580159061157a57504260085411155b6115965760405162461bcd60e51b815260040161086490613ae3565b81600a546115a49190613cef565b3410156115c35760405162461bcd60e51b815260040161086490613514565b600d548211156115e55760405162461bcd60e51b815260040161086490613557565b6013548211156116075760405162461bcd60e51b8152600401610864906137dd565b601154601354839161161891613d0e565b10156116365760405162461bcd60e51b8152600401610864906136a8565b601354612710108015906116595750601a5461165490612710613d0e565b601354115b1561168b57600061166b601654612bfb565b9050601e5481141561168557611682836001613cc3565b92505b5061176a565b601a5461169a90612710613d0e565b601354118015906116ba5750601b546116b590612710613d0e565b601354115b156116cc57600061166b601754612bfb565b601b546116db90612710613d0e565b601354118015906116fb5750601c546116f690612710613d0e565b601354115b1561170d57600061166b601854612bfb565b601c5461171c90612710613d0e565b6013541180159061173c5750601d5461173790612710613d0e565b601354115b1561176a57600061174e601954612bfb565b9050601e5481141561176857611765836001613cc3565b92505b505b60008267ffffffffffffffff81111561179357634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156117bc578160200160208202803683370190505b50336000908152601260205260408120805492935085929091906117e1908490613cc3565b9250508190555082600c60008282546117fa9190613cc3565b90915550600090505b83811015611850576118136128e8565b82828151811061183357634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061184881613da8565b915050611803565b5061079a3382612a3f565b60095490565b6000546001600160a01b031690565b60606002805461089490613d51565b6118876125d0565b6001600160a01b0316826001600160a01b031614156118b85760405162461bcd60e51b815260040161086490613723565b80600660006118c56125d0565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119096125d0565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194191906134f6565b60405180910390a35050565b6000805b6014548110156119c157336001600160a01b03166014828154811061198657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156119af57600191506119c1565b806119b981613da8565b915050611951565b506119ca6125d0565b6001600160a01b03166119db611861565b6001600160a01b031614806119ed5750805b611a095760405162461bcd60e51b815260040161086490613b1a565b60005b8251811015610b4357600160156000858481518110611a3b57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611a7781613da8565b915050611a0c565b611a90611a8a6125d0565b8361265f565b611aac5760405162461bcd60e51b815260040161086490613bf9565b611ab884848484612c44565b50505050565b6000805b601454811015611b3257336001600160a01b031660148281548110611af757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611b205760019150611b32565b80611b2a81613da8565b915050611ac2565b50611b3b6125d0565b6001600160a01b0316611b4c611861565b6001600160a01b03161480611b5e5750805b611b7a5760405162461bcd60e51b815260040161086490613b1a565b825b8261ffff168161ffff1611611ab857601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09060108204018054600f9092166002026101000a61ffff818102199093169284160291909117905580611bed81613d86565b915050611b7c565b6060611c00826125d4565b611c1c5760405162461bcd60e51b815260040161086490613a94565b6000611c26612044565b90506000815111611c465760405180602001604052806000815250611c71565b80611c5084612c77565b604051602001611c619291906133c8565b6040516020818303038152906040525b9392505050565b6060323314611c995760405162461bcd60e51b81526004016108649061380c565b60075415801590611cac57504260075411155b611cc85760405162461bcd60e51b8152600401610864906138a0565b81600954611cd69190613cef565b341015611cf55760405162461bcd60e51b815260040161086490613514565b600e54821115611d175760405162461bcd60e51b815260040161086490613b6d565b601354821115611d395760405162461bcd60e51b8152600401610864906137dd565b6011546013548391611d4a91613d0e565b1015611d685760405162461bcd60e51b8152600401610864906136a8565b60135461271010801590611d8b5750601a54611d8690612710613d0e565b601354115b15611dbd576000611d9d601654612bfb565b9050601e54811415611db757611db4836001613cc3565b92505b50611e9c565b601a54611dcc90612710613d0e565b60135411801590611dec5750601b54611de790612710613d0e565b601354115b15611dfe576000611d9d601754612bfb565b601b54611e0d90612710613d0e565b60135411801590611e2d5750601c54611e2890612710613d0e565b601354115b15611e3f576000611d9d601854612bfb565b601c54611e4e90612710613d0e565b60135411801590611e6e5750601d54611e6990612710613d0e565b601354115b15611e9c576000611e80601954612bfb565b9050601e54811415611e9a57611e97836001613cc3565b92505b505b60008267ffffffffffffffff811115611ec557634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611eee578160200160208202803683370190505b5033600090815260126020526040812080549293508592909190611f13908490613cc3565b9250508190555082600c6000828254611f2c9190613cc3565b90915550600090505b8381101561185057611f456128e8565b828281518110611f6557634e487b7160e01b600052603260045260246000fd5b602090810291909101015280611f7a81613da8565b915050611f35565b6000805b601454811015611ff657336001600160a01b031660148281548110611fbb57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611fe45760019150611ff6565b80611fee81613da8565b915050611f86565b50611fff6125d0565b6001600160a01b0316612010611861565b6001600160a01b031614806120225750805b61203e5760405162461bcd60e51b815260040161086490613b1a565b50601855565b60606010805461089490613d51565b6000805b6014548110156120c757336001600160a01b03166014828154811061208c57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156120b557600191506120c7565b806120bf81613da8565b915050612057565b506120d06125d0565b6001600160a01b03166120e1611861565b6001600160a01b031614806120f35750805b61210f5760405162461bcd60e51b815260040161086490613b1a565b50601155565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b60115481565b6121516125d0565b6001600160a01b0316612162611861565b6001600160a01b0316146121885760405162461bcd60e51b8152600401610864906139df565b6001600160a01b0381166121ae5760405162461bcd60e51b8152600401610864906135f4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b60145481101561227d57336001600160a01b03166014828154811061224257634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561226b576001915061227d565b8061227581613da8565b91505061220d565b506122866125d0565b6001600160a01b0316612297611861565b6001600160a01b031614806122a95750805b6122c55760405162461bcd60e51b815260040161086490613b1a565b50601955565b6000805b60145481101561233f57336001600160a01b03166014828154811061230457634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561232d576001915061233f565b8061233781613da8565b9150506122cf565b506123486125d0565b6001600160a01b0316612359611861565b6001600160a01b0316148061236b5750805b6123875760405162461bcd60e51b815260040161086490613b1a565b50600955565b6000805b60145481101561240157336001600160a01b0316601482815481106123c657634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b031614156123ef5760019150612401565b806123f981613da8565b915050612391565b5061240a6125d0565b6001600160a01b031661241b611861565b6001600160a01b0316148061242d5750805b6124495760405162461bcd60e51b815260040161086490613b1a565b60005b60135461ffff821611610b43578261ffff1660138261ffff168154811061248357634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16146124af576125a5565b601380546124bf90600190613d0e565b815481106124dd57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660138261ffff168154811061252657634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550601380548061257457634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a02191690559055610b43565b806125af81613d86565b91505061244c565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061262682611178565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061266a826125d4565b6126865760405162461bcd60e51b815260040161086490613791565b600061269183611178565b9050806001600160a01b0316846001600160a01b031614806126cc5750836001600160a01b03166126c184610917565b6001600160a01b0316145b806126dc57506126dc8185612115565b949350505050565b826001600160a01b03166126f782611178565b6001600160a01b03161461271d5760405162461bcd60e51b815260040161086490613a14565b6001600160a01b0382166127435760405162461bcd60e51b8152600401610864906136df565b61274e838383610b43565b6127596000826125f1565b6001600160a01b0383166000908152600460205260408120805460019290612782908490613d0e565b90915550506001600160a01b03821660009081526004602052604081208054600192906127b0908490613cc3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000806128276001600160801b03841686613cdb565b9050600061283e6001600160801b03851687613dc3565b905060006128556001600160801b03861687613cdb565b9050600061286c6001600160801b03871688613dc3565b90506001600160801b0386166128828285613cef565b61288c9190613cdb565b6128968385613cef565b6128a08387613cef565b6001600160801b0389166128b48689613cef565b6128be9190613cef565b6128c89190613cc3565b6128d29190613cc3565b6128dc9190613cc3565b98975050505050505050565b6000806128f9601380549050612d92565b905060006013828154811061291e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1690506013600160138054905061295c9190613d0e565b8154811061297a57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff16601383815481106129bf57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506013805480612a0d57634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905591505090565b6001600160a01b038216612a655760405162461bcd60e51b81526004016108649061395e565b80516001600160a01b03831660009081526004602052604081208054909190612a8f908490613cc3565b90915550600090505b8151811015610b4357612ad1828281518110612ac457634e487b7160e01b600052603260045260246000fd5b60200260200101516125d4565b15612aee5760405162461bcd60e51b81526004016108649061363a565b612b21600084848481518110612b1457634e487b7160e01b600052603260045260246000fd5b6020026020010151610b43565b8260036000848481518110612b4657634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818181518110612ba057634e487b7160e01b600052603260045260246000fd5b6020026020010151836001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480612bf381613da8565b915050612a98565b60008042612c0a600143613d0e565b404433604051602001612c209493929190613433565b60408051601f1981840301815291905280516020909101209050611c718382613dc3565b612c4f8484846126e4565b612c5b84848484612dbd565b611ab85760405162461bcd60e51b8152600401610864906135a2565b606081612c9c57506040805180820190915260018152600360fc1b602082015261079d565b8160005b8115612cc65780612cb081613da8565b9150612cbf9050600a83613cdb565b9150612ca0565b60008167ffffffffffffffff811115612cef57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d19576020820181803683370190505b5090505b84156126dc57612d2e600183613d0e565b9150612d3b600a86613dc3565b612d46906030613cc3565b60f81b818381518110612d6957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612d8b600a86613cdb565b9450612d1d565b6013546000908190612da5600143613d0e565b40414433604051602001612c209594939291906133f7565b6000612dd1846001600160a01b0316612ed8565b15612ecd57836001600160a01b031663150b7a02612ded6125d0565b8786866040518563ffffffff1660e01b8152600401612e0f9493929190613475565b602060405180830381600087803b158015612e2957600080fd5b505af1925050508015612e59575060408051601f3d908101601f19168201909252612e56918101906132df565b60015b612eb3573d808015612e87576040519150601f19603f3d011682016040523d82523d6000602084013e612e8c565b606091505b508051612eab5760405162461bcd60e51b8152600401610864906135a2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506126dc565b506001949350505050565b3b151590565b828054612eea90613d51565b90600052602060002090601f016020900481019282612f0c5760008555612f52565b82601f10612f2557805160ff1916838001178555612f52565b82800160010185558215612f52579182015b82811115612f52578251825591602001919060010190612f37565b50610fbc9291505b80821115610fbc5760008155600101612f5a565b600067ffffffffffffffff831115612f8857612f88613e03565b612f9b601f8401601f1916602001613c53565b9050828152838383011115612faf57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461079d57600080fd5b803561ffff8116811461079d57600080fd5b600060208284031215613000578081fd5b611c7182612fc6565b6000806040838503121561301b578081fd5b61302483612fc6565b915061303260208401612fc6565b90509250929050565b60008060006060848603121561304f578081fd5b61305884612fc6565b925061306660208501612fc6565b9150604084013590509250925092565b6000806000806080858703121561308b578081fd5b61309485612fc6565b93506130a260208601612fc6565b925060408501359150606085013567ffffffffffffffff8111156130c4578182fd5b8501601f810187136130d4578182fd5b6130e387823560208401612f6e565b91505092959194509250565b60008060408385031215613101578182fd5b61310a83612fc6565b91506020830135801515811461311e578182fd5b809150509250929050565b6000806040838503121561313b578182fd5b61314483612fc6565b946020939093013593505050565b60006020808385031215613164578182fd5b823567ffffffffffffffff81111561317a578283fd5b8301601f8101851361318a578283fd5b803561319d61319882613c7d565b613c53565b81815283810190838501858402850186018910156131b9578687fd5b8694505b838510156131e2576131ce81612fc6565b8352600194909401939185019185016131bd565b50979650505050505050565b60006020808385031215613200578182fd5b823567ffffffffffffffff80821115613217578384fd5b818501915085601f83011261322a578384fd5b813561323861319882613c7d565b818152848101908486016040808502870188018b1015613256578889fd5b8896505b848710156132b45780828c031215613270578889fd5b8051818101818110888211171561328957613289613e03565b825261329483612fc6565b81528289013589820152845260019690960195928701929081019061325a565b50909998505050505050505050565b6000602082840312156132d4578081fd5b8135611c7181613e19565b6000602082840312156132f0578081fd5b8151611c7181613e19565b60006020828403121561330c578081fd5b813567ffffffffffffffff811115613322578182fd5b8201601f81018413613332578182fd5b6126dc84823560208401612f6e565b600060208284031215613352578081fd5b611c7182612fdd565b6000806040838503121561336d578182fd5b61337683612fdd565b915061303260208401612fdd565b600060208284031215613395578081fd5b5035919050565b600081518084526133b4816020860160208601613d25565b601f01601f19169290920160200192915050565b600083516133da818460208801613d25565b8351908301906133ee818360208801613d25565b01949350505050565b94855260208501939093526bffffffffffffffffffffffff19606092831b81166040860152605485019190915291901b16607482015260880190565b93845260208401929092526040830152606090811b6bffffffffffffffffffffffff19169082015260740190565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906134a89083018461339c565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156134ea578351835292840192918401916001016134ce565b50909695505050505050565b901515815260200190565b600060208252611c71602083018461339c565b60208082526023908201527f4e6f7420656e6f75676820457468657220746f20636c61696d2074686520486160408201526272657360e81b606082015260800190565b6020808252602b908201527f596f752063616e206f6e6c7920636c61696d203230206861726573207065722060408201526a3a3930b739b0b1ba34b7b760a91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252601e908201527f436f6c6c61626f7261746f7273207765726520616c7265616479207365740000604082015260600190565b6020808252601b908201527f4e6f204861726573206c65667420746f20626520636c61696d65640000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601e908201527f546f74616c2063757420646f6573206e6f742061646420746f20313030250000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b602080825260159082015274139bdd08195b9bdd59da081a185c995cc81b19599d605a1b604082015260600190565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b602080825260119082015270596f752061726520746f6f206561726c7960781b604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252601b908201527f4e6f206861726573206c65667420746f20626520636c61696d65640000000000604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526017908201527f50726573616c65206e6f74207374617274656420796574000000000000000000604082015260600190565b60208082526033908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015272103737b910309031b7b63630b137b930ba37b960691b606082015260800190565b6020808252602b908201527f596f752063616e206f6e6c7920636c61696d203230204861726573207065722060408201526a3a3930b739b0b1ba34b7b760a91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b90815260200190565b60405181810167ffffffffffffffff81118282101715613c7557613c75613e03565b604052919050565b600067ffffffffffffffff821115613c9757613c97613e03565b5060209081020190565b60006001600160801b038083168185168083038211156133ee576133ee613dd7565b60008219821115613cd657613cd6613dd7565b500190565b600082613cea57613cea613ded565b500490565b6000816000190483118215151615613d0957613d09613dd7565b500290565b600082821015613d2057613d20613dd7565b500390565b60005b83811015613d40578181015183820152602001613d28565b83811115611ab85750506000910152565b600281046001821680613d6557607f821691505b6020821081141561154057634e487b7160e01b600052602260045260246000fd5b600061ffff80831681811415613d9e57613d9e613dd7565b6001019392505050565b6000600019821415613dbc57613dbc613dd7565b5060010190565b600082613dd257613dd2613ded565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114613e2f57600080fd5b5056fea2646970667358221220ce2c957a804ad7f58778ac31db95ddeb89f6ce2c34cb863e22b1bfb8572b279564736f6c63430008000033
Deployed Bytecode Sourcemap
82:15371:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1500:344:3;;;;;;;;;;-1:-1:-1;1500:344:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13279:106:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4613:191::-;;;;;;;;;;-1:-1:-1;4613:191:4;;;;;:::i;:::-;;:::i;:::-;;1762:55;;;;;;;;;;-1:-1:-1;1762:55:4;;;;;:::i;:::-;;:::i;2618:98:3:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4164:295::-;;;;;;;;;;-1:-1:-1;4164:295:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2570:468:4:-;;;;;;;;;;-1:-1:-1;2570:468:4;;;;;:::i;:::-;;:::i;3679:424:3:-;;;;;;;;;;-1:-1:-1;3679:424:3;;;;;:::i;:::-;;:::i;13591:104:4:-;;;;;;;;;;;;;:::i;6172:147::-;;;;;;;;;;-1:-1:-1;6172:147:4;;;;;:::i;:::-;;:::i;5178:364:3:-;;;;;;;;;;-1:-1:-1;5178:364:3;;;;;:::i;:::-;;:::i;3590:102:4:-;;;;;;;;;;-1:-1:-1;3590:102:4;;;;;:::i;:::-;;:::i;3963:135::-;;;;;;;;;;-1:-1:-1;3963:135:4;;;;;:::i;:::-;;:::i;3181:317::-;;;;;;;;;;;;;:::i;5608:179:3:-;;;;;;;;;;-1:-1:-1;5608:179:3;;;;;:::i;:::-;;:::i;12800:220:4:-;;;;;;;;;;-1:-1:-1;12800:220:4;;;;;:::i;:::-;;:::i;7034:486::-;;;;;;;;;;-1:-1:-1;7034:486:4;;;;;:::i;:::-;;:::i;2243:313:3:-;;;;;;;;;;-1:-1:-1;2243:313:3;;;;;:::i;:::-;;:::i;6415:155:4:-;;;;;;;;;;-1:-1:-1;6415:155:4;;;;;:::i;:::-;;:::i;4352:187::-;;;;;;;;;;-1:-1:-1;4352:187:4;;;;;:::i;:::-;;:::i;1903:283:3:-;;;;;;;;;;-1:-1:-1;1903:283:3;;;;;:::i;:::-;;:::i;1693:145:11:-;;;;;;;;;;;;;:::i;6646:311:4:-;;;;;;;;;;-1:-1:-1;6646:311:4;;;;;:::i;:::-;;:::i;10311:2426::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13443:89::-;;;;;;;;;;;;;:::i;1061:85:11:-;;;;;;;;;;;;;:::i;2780:102:3:-;;;;;;;;;;;;;:::i;4526:318::-;;;;;;;;;;-1:-1:-1;4526:318:3;;;;;:::i;:::-;;:::i;7573:195:4:-;;;;;;;;;;-1:-1:-1;7573:195:4;;;;;:::i;:::-;;:::i;5853:354:3:-;;;;;;;;;;-1:-1:-1;5853:354:3;;;;;:::i;:::-;;:::i;5394:196:4:-;;;;;;;;;;-1:-1:-1;5394:196:4;;;;;:::i;:::-;;:::i;2948:451:3:-;;;;;;;;;;-1:-1:-1;2948:451:3;;;;;:::i;:::-;;:::i;7831:2406:4:-;;;;;;:::i;:::-;;:::i;4878:187::-;;;;;;;;;;-1:-1:-1;4878:187:4;;;;;:::i;:::-;;:::i;13095:93::-;;;;;;;;;;;;;:::i;4156:123::-;;;;;;;;;;-1:-1:-1;4156:123:4;;;;;:::i;:::-;;:::i;4910:206:3:-;;;;;;;;;;-1:-1:-1;4910:206:3;;;;;:::i;:::-;;:::i;1718:33:4:-;;;;;;;;;;;;;:::i;1987:240:11:-;;;;;;;;;;-1:-1:-1;1987:240:11;;;;;:::i;:::-;;:::i;5139:191:4:-;;;;;;;;;;-1:-1:-1;5139:191:4;;;;;:::i;:::-;;:::i;3776:107::-;;;;;;;;;;-1:-1:-1;3776:107:4;;;;;:::i;:::-;;:::i;5695:393::-;;;;;;;;;;-1:-1:-1;5695:393:4;;;;;:::i;:::-;;:::i;1500:344:3:-;1642:4;-1:-1:-1;;;;;;1681:40:3;;-1:-1:-1;;;1681:40:3;;:104;;-1:-1:-1;;;;;;;1737:48:3;;-1:-1:-1;;;1737:48:3;1681:104;:156;;;;1801:36;1825:11;1801:23;:36::i;:::-;1662:175;;1500:344;;;;:::o;13279:106:4:-;13357:14;:21;13279:106;:::o;4613:191::-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;4733:30:4::1;:64:::0;4613:191::o;1762:55::-;;;;;;;;;;;;;:::o;2618:98:3:-;2672:13;2704:5;2697:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2618:98;:::o;4164:295::-;4280:7;4324:16;4332:7;4324;:16::i;:::-;4303:107;;;;-1:-1:-1;;;4303:107:3;;;;;;;:::i;:::-;-1:-1:-1;4428:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4428:24:3;;4164:295::o;2570:468:4:-;1284:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1273:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1273:23:11;;1265:68;;;;-1:-1:-1;;;1265:68:11;;;;;;;:::i;:::-;2692:13:4::1;:20:::0;:25;2684:68:::1;;;;-1:-1:-1::0;;;2684:68:4::1;;;;;;;:::i;:::-;2763:16;2794:9:::0;2789:166:::1;2809:14;:21;2805:1;:25;2789:166;;;2851:13;2870:14;2885:1;2870:17;;;;;;-1:-1:-1::0;;;2870:17:4::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;2851:37;;::::1;::::0;;::::1;::::0;;-1:-1:-1;2851:37:4;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;2851:37:4::1;-1:-1:-1::0;;;;;2851:37:4;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;2922:17;;;;2937:1;;2922:17;::::1;;;-1:-1:-1::0;;;2922:17:4::1;;;;;;;;;;;;;;;:21;;;2902:42;;;;;:::i;:::-;::::0;-1:-1:-1;2832:3:4;::::1;::::0;::::1;:::i;:::-;;;;2789:166;;;-1:-1:-1::0;2985:11:4::1;::::0;-1:-1:-1;;;;;2973:23:4;;::::1;2985:11:::0;::::1;2973:23;2965:66;;;;-1:-1:-1::0;;;2965:66:4::1;;;;;;;:::i;:::-;1343:1:11;2570:468:4::0;:::o;3679:424:3:-;3759:13;3775:23;3790:7;3775:14;:23::i;:::-;3759:39;;3822:5;-1:-1:-1;;;;;3816:11:3;:2;-1:-1:-1;;;;;3816:11:3;;;3808:57;;;;-1:-1:-1;;;3808:57:3;;;;;;;:::i;:::-;3913:5;-1:-1:-1;;;;;3897:21:3;:12;:10;:12::i;:::-;-1:-1:-1;;;;;3897:21:3;;:85;;;;3938:44;3962:5;3969:12;:10;:12::i;3938:44::-;3876:188;;;;-1:-1:-1;;;3876:188:3;;;;;;;:::i;:::-;4075:21;4084:2;4088:7;4075:8;:21::i;:::-;3679:424;;;:::o;13591:104:4:-;13671:17;;13591:104;:::o;6172:147::-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;-1:-1:-1;6280:14:4::1;:32:::0;6172:147::o;5178:364:3:-;5380:41;5399:12;:10;:12::i;:::-;5413:7;5380:18;:41::i;:::-;5359:137;;;;-1:-1:-1;;;5359:137:3;;;;;;;:::i;:::-;5507:28;5517:4;5523:2;5527:7;5507:9;:28::i;3590:102:4:-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;3671:14;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;3963:135::-:0;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;-1:-1:-1;4055:16:4::1;:36:::0;3963:135::o;3181:317::-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;3260:21:::1;3237:20;3292:200;3312:13;:20:::0;3308:24;::::1;3292:200;;;3361:13;3375:1;3361:16;;;;;;-1:-1:-1::0;;;3361:16:4::1;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;-1:-1:-1::0;;;;;3361:21:4::1;-1:-1:-1::0;;;;;3353:39:4::1;:128;3410:57;3419:12;3433:13;3447:1;3433:16;;;;;;-1:-1:-1::0;;;3433:16:4::1;;;;;;;;;;::::0;;;::::1;::::0;;;:20:::1;:16;::::0;;::::1;;:20;::::0;3455:11:::1;::::0;-1:-1:-1;;;;;3455:11:4::1;3410:8;:57::i;:::-;3353:128;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;3334:3:4;::::1;::::0;::::1;:::i;:::-;;;;3292:200;;5608:179:3::0;5741:39;5758:4;5764:2;5768:7;5741:39;;;;;;;;;;;;:16;:39::i;12800:220:4:-;12862:7;12902:16;12910:7;12902;:16::i;:::-;12881:107;;;;-1:-1:-1;;;12881:107:4;;;;;;;:::i;:::-;-1:-1:-1;13006:7:4;12800:220::o;7034:486::-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;7171:13:::1;::::0;7146:14:::1;:21:::0;:38:::1;;7138:78;;;;-1:-1:-1::0;;;7138:78:4::1;;;;;;;:::i;:::-;7256:13;;7235:17;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;7322:13:4::1;::::0;7280:25:::1;::::0;7308:28:::1;::::0;::::1;;;;-1:-1:-1::0;;;7308:28:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;7308:28:4::1;;7280:56;;7352:9;7347:99;7367:13;;7363:1;:17;7347:99;;;7415:20;:18;:20::i;:::-;7401:8;7410:1;7401:11;;;;;;-1:-1:-1::0;;;7401:11:4::1;;;;;;;;;;::::0;;::::1;::::0;;;;;:34;7382:3;::::1;::::0;::::1;:::i;:::-;;;;7347:99;;;;7456:30;7467:8;7477;7456:10;:30::i;:::-;-1:-1:-1::0;;7512:1:4::1;7496:13;:17:::0;-1:-1:-1;7034:486:4:o;2243:313:3:-;2355:7;2394:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2394:16:3;2441:19;2420:107;;;;-1:-1:-1;;;2420:107:3;;;;;;;:::i;6415:155:4:-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;-1:-1:-1;6527:16:4::1;:36:::0;6415:155::o;4352:187::-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;-1:-1:-1;4470:29:4::1;:62:::0;4352:187::o;1903:283:3:-;2015:7;-1:-1:-1;;;;;2059:19:3;;2038:108;;;;-1:-1:-1;;;2038:108:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2163:16:3;;;;;:9;:16;;;;;;;1903:283::o;1693:145:11:-;1284:12;:10;:12::i;:::-;-1:-1:-1;;;;;1273:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1273:23:11;;1265:68;;;;-1:-1:-1;;;1265:68:11;;;;;;;:::i;:::-;1799:1:::1;1783:6:::0;;1762:40:::1;::::0;-1:-1:-1;;;;;1783:6:11;;::::1;::::0;1762:40:::1;::::0;1799:1;;1762:40:::1;1829:1;1812:19:::0;;-1:-1:-1;;;;;;1812:19:11::1;::::0;;1693:145::o;6646:311:4:-;6759:4;;;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;6784:8:::1;6779:149;6798:14;:21:::0;6794:25:::1;::::0;::::1;;6779:149;;;6865:7;6844:28;;:14;6859:1;6844:17;;;;;;;;-1:-1:-1::0;;;6844:17:4::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:28;6840:78;;;6899:4;6892:11;;;;;6840:78;6821:3:::0;::::1;::::0;::::1;:::i;:::-;;;;6779:149;;;;6945:5;6938:12;;730:1;6646:311:::0;;;;:::o;10311:2426::-;10449:16;223:9;236:10;223:23;215:66;;;;-1:-1:-1;;;215:66:4;;;;;;;:::i;:::-;980:16:::1;::::0;:21;;::::1;::::0;:60:::1;;;1025:15;1005:16;;:35;;980:60;959:130;;;;-1:-1:-1::0;;;959:130:4::1;;;;;;;:::i;:::-;10534:8:::2;10515:16;;:27;;;;:::i;:::-;10502:9;:40;;10481:122;;;;-1:-1:-1::0;;;10481:122:4::2;;;;;;;:::i;:::-;10642:34;;10630:8;:46;;10622:102;;;;-1:-1:-1::0;;;10622:102:4::2;;;;;;;:::i;:::-;10743:14;:21:::0;:33;-1:-1:-1;10743:33:4::2;10735:67;;;;-1:-1:-1::0;;;10735:67:4::2;;;;;;;:::i;:::-;10845:13;::::0;10821:14:::2;:21:::0;10862:8;;10821:37:::2;::::0;::::2;:::i;:::-;:49;;10813:89;;;;-1:-1:-1::0;;;10813:89:4::2;;;;;;;:::i;:::-;10977:14;:21:::0;11002:5:::2;-1:-1:-1::0;10977:30:4;::::2;::::0;:88:::2;;-1:-1:-1::0;11043:22:4::2;::::0;11035:30:::2;::::0;:5:::2;:30;:::i;:::-;11011:14;:21:::0;:54:::2;10977:88;10973:1430;;;11081:20;11104:38;11112:29;;11104:7;:38::i;:::-;11081:61;;11176:11;;11160:12;:27;11156:89;;;11218:12;:8:::0;11229:1:::2;11218:12;:::i;:::-;11207:23;;11156:89;10973:1430;;;;11366:22;::::0;11358:30:::2;::::0;:5:::2;:30;:::i;:::-;11333:14;:21:::0;:55:::2;::::0;::::2;::::0;:114:::2;;-1:-1:-1::0;11424:23:4::2;::::0;11416:31:::2;::::0;:5:::2;:31;:::i;:::-;11392:14;:21:::0;:55:::2;11333:114;11329:1074;;;11463:20;11486:39;11494:30;;11486:7;:39::i;11329:1074::-;11749:23;::::0;11741:31:::2;::::0;:5:::2;:31;:::i;:::-;11716:14;:21:::0;:56:::2;::::0;::::2;::::0;:114:::2;;-1:-1:-1::0;11808:22:4::2;::::0;11800:30:::2;::::0;:5:::2;:30;:::i;:::-;11776:14;:21:::0;:54:::2;11716:114;11712:691;;;11846:20;11869:38;11877:29;;11869:7;:38::i;11712:691::-;12131:22;::::0;12123:30:::2;::::0;:5:::2;:30;:::i;:::-;12098:14;:21:::0;:55:::2;::::0;::::2;::::0;:114:::2;;-1:-1:-1::0;12189:23:4::2;::::0;12181:31:::2;::::0;:5:::2;:31;:::i;:::-;12157:14;:21:::0;:55:::2;12098:114;12094:309;;;12228:20;12251:39;12259:30;;12251:7;:39::i;:::-;12228:62;;12324:11;;12308:12;:27;12304:89;;;12366:12;:8:::0;12377:1:::2;12366:12;:::i;:::-;12355:23;;12304:89;12094:309;;12413:25;12455:8;12441:23;;;;;;-1:-1:-1::0;;;12441:23:4::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;12441:23:4::2;-1:-1:-1::0;12496:10:4::2;12475:32;::::0;;;:20:::2;:32;::::0;;;;:44;;12413:51;;-1:-1:-1;12511:8:4;;12475:32;;;:44:::2;::::0;12511:8;;12475:44:::2;:::i;:::-;;;;;;;;12550:8;12529:17;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;12574:9:4::2;::::0;-1:-1:-1;12569:94:4::2;12589:8;12585:1;:12;12569:94;;;12632:20;:18;:20::i;:::-;12618:8;12627:1;12618:11;;;;;;-1:-1:-1::0;;;12618:11:4::2;;;;;;;;;;::::0;;::::2;::::0;;;;;:34;12599:3;::::2;::::0;::::2;:::i;:::-;;;;12569:94;;;;12673:32;12684:10;12696:8;12673:10;:32::i;13443:89::-:0;13516:9;;13443:89;:::o;1061:85:11:-;1107:7;1133:6;-1:-1:-1;;;;;1133:6:11;1061:85;:::o;2780:102:3:-;2836:13;2868:7;2861:14;;;;;:::i;4526:318::-;4668:12;:10;:12::i;:::-;-1:-1:-1;;;;;4656:24:3;:8;-1:-1:-1;;;;;4656:24:3;;;4648:62;;;;-1:-1:-1;;;4648:62:3;;;;;;;:::i;:::-;4766:8;4721:18;:32;4740:12;:10;:12::i;:::-;-1:-1:-1;;;;;4721:32:3;;;;;;;;;;;;;;;;;-1:-1:-1;4721:32:3;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;4721:53:3;;;;;;;;;;;4804:12;:10;:12::i;:::-;-1:-1:-1;;;;;4789:48:3;;4828:8;4789:48;;;;;;:::i;:::-;;;;;;;;4526:318;;:::o;7573:195:4:-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;7665:6:::1;7660:102;7681:5;:12;7677:1;:16;7660:102;;;7747:4;7714:20;:30;7735:5;7741:1;7735:8;;;;;;-1:-1:-1::0;;;7735:8:4::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;7714:30:4::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;7714:30:4;:37;;-1:-1:-1;;7714:37:4::1;::::0;::::1;;::::0;;;::::1;::::0;;7695:3;::::1;::::0;::::1;:::i;:::-;;;;7660:102;;5853:354:3::0;6035:41;6054:12;:10;:12::i;:::-;6068:7;6035:18;:41::i;:::-;6014:137;;;;-1:-1:-1;;;6014:137:3;;;;;;;:::i;:::-;6161:39;6175:4;6181:2;6185:7;6194:5;6161:13;:39::i;:::-;5853:354;;;;:::o;5394:196:4:-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;5517:4;5501:83:::1;5528:2;5523:7;;:1;:7;;;5501:83;;5551:14;:22:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;5551:22:4;;;;;::::1;::::0;::::1;;::::0;;;;;;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;;::::0;;;::::1;::::0;;;5532:3:::1;5551:22:::0;5532:3:::1;:::i;:::-;;;;5501:83;;2948:451:3::0;3061:13;3111:16;3119:7;3111;:16::i;:::-;3090:110;;;;-1:-1:-1;;;3090:110:3;;;;;;;:::i;:::-;3211:21;3235:10;:8;:10::i;:::-;3211:34;;3298:1;3280:7;3274:21;:25;:118;;;;;;;;;;;;;;;;;3342:7;3351:18;:7;:16;:18::i;:::-;3325:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3274:118;3255:137;2948:451;-1:-1:-1;;;2948:451:3:o;7831:2406:4:-;7961:16;223:9;236:10;223:23;215:66;;;;-1:-1:-1;;;215:66:4;;;;;;;:::i;:::-;799:14:::1;::::0;:19;;::::1;::::0;:56:::1;;;840:15;822:14;;:33;;799:56;778:120;;;;-1:-1:-1::0;;;778:120:4::1;;;;;;;:::i;:::-;8039:8:::2;8027:9;;:20;;;;:::i;:::-;8014:9;:33;;7993:115;;;;-1:-1:-1::0;;;7993:115:4::2;;;;;;;:::i;:::-;8147:21;;8135:8;:33;;8127:89;;;;-1:-1:-1::0;;;8127:89:4::2;;;;;;;:::i;:::-;8243:14;:21:::0;:33;-1:-1:-1;8243:33:4::2;8235:67;;;;-1:-1:-1::0;;;8235:67:4::2;;;;;;;:::i;:::-;8345:13;::::0;8321:14:::2;:21:::0;8362:8;;8321:37:::2;::::0;::::2;:::i;:::-;:49;;8313:89;;;;-1:-1:-1::0;;;8313:89:4::2;;;;;;;:::i;:::-;8477:14;:21:::0;8502:5:::2;-1:-1:-1::0;8477:30:4;::::2;::::0;:88:::2;;-1:-1:-1::0;8543:22:4::2;::::0;8535:30:::2;::::0;:5:::2;:30;:::i;:::-;8511:14;:21:::0;:54:::2;8477:88;8473:1430;;;8581:20;8604:38;8612:29;;8604:7;:38::i;:::-;8581:61;;8676:11;;8660:12;:27;8656:89;;;8718:12;:8:::0;8729:1:::2;8718:12;:::i;:::-;8707:23;;8656:89;8473:1430;;;;8866:22;::::0;8858:30:::2;::::0;:5:::2;:30;:::i;:::-;8833:14;:21:::0;:55:::2;::::0;::::2;::::0;:114:::2;;-1:-1:-1::0;8924:23:4::2;::::0;8916:31:::2;::::0;:5:::2;:31;:::i;:::-;8892:14;:21:::0;:55:::2;8833:114;8829:1074;;;8963:20;8986:39;8994:30;;8986:7;:39::i;8829:1074::-;9249:23;::::0;9241:31:::2;::::0;:5:::2;:31;:::i;:::-;9216:14;:21:::0;:56:::2;::::0;::::2;::::0;:114:::2;;-1:-1:-1::0;9308:22:4::2;::::0;9300:30:::2;::::0;:5:::2;:30;:::i;:::-;9276:14;:21:::0;:54:::2;9216:114;9212:691;;;9346:20;9369:38;9377:29;;9369:7;:38::i;9212:691::-;9631:22;::::0;9623:30:::2;::::0;:5:::2;:30;:::i;:::-;9598:14;:21:::0;:55:::2;::::0;::::2;::::0;:114:::2;;-1:-1:-1::0;9689:23:4::2;::::0;9681:31:::2;::::0;:5:::2;:31;:::i;:::-;9657:14;:21:::0;:55:::2;9598:114;9594:309;;;9728:20;9751:39;9759:30;;9751:7;:39::i;:::-;9728:62;;9824:11;;9808:12;:27;9804:89;;;9866:12;:8:::0;9877:1:::2;9866:12;:::i;:::-;9855:23;;9804:89;9594:309;;9913:25;9955:8;9941:23;;;;;;-1:-1:-1::0;;;9941:23:4::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;9941:23:4::2;-1:-1:-1::0;9996:10:4::2;9975:32;::::0;;;:20:::2;:32;::::0;;;;:44;;9913:51;;-1:-1:-1;10011:8:4;;9975:32;;;:44:::2;::::0;10011:8;;9975:44:::2;:::i;:::-;;;;;;;;10050:8;10029:17;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10074:9:4::2;::::0;-1:-1:-1;10069:94:4::2;10089:8;10085:1;:12;10069:94;;;10132:20;:18;:20::i;:::-;10118:8;10127:1;10118:11;;;;;;-1:-1:-1::0;;;10118:11:4::2;;;;;;;;;;::::0;;::::2;::::0;;;;;:34;10099:3;::::2;::::0;::::2;:::i;:::-;;;;10069:94;;4878:187:::0;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;-1:-1:-1;4996:29:4::1;:62:::0;4878:187::o;13095:93::-;13142:13;13174:7;13167:14;;;;;:::i;4156:123::-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;-1:-1:-1;4242:13:4::1;:30:::0;4156:123::o;4910:206:3:-;-1:-1:-1;;;;;5074:25:3;;;5047:4;5074:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4910:206::o;1718:33:4:-;;;;:::o;1987:240:11:-;1284:12;:10;:12::i;:::-;-1:-1:-1;;;;;1273:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1273:23:11;;1265:68;;;;-1:-1:-1;;;1265:68:11;;;;;;;:::i;:::-;-1:-1:-1;;;;;2075:22:11;::::1;2067:73;;;;-1:-1:-1::0;;;2067:73:11::1;;;;;;;:::i;:::-;2176:6;::::0;;2155:38:::1;::::0;-1:-1:-1;;;;;2155:38:11;;::::1;::::0;2176:6;::::1;::::0;2155:38:::1;::::0;::::1;2203:6;:17:::0;;-1:-1:-1;;;;;;2203:17:11::1;-1:-1:-1::0;;;;;2203:17:11;;;::::1;::::0;;;::::1;::::0;;1987:240::o;5139:191:4:-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;-1:-1:-1;5259:30:4::1;:64:::0;5139:191::o;3776:107::-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;-1:-1:-1;3854:9:4::1;:22:::0;3776:107::o;5695:393::-;343:19;385:9;380:190;400:13;:20;396:24;;380:190;;;470:10;-1:-1:-1;;;;;445:35:4;:13;459:1;445:16;;;;;;-1:-1:-1;;;445:16:4;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;445:21:4;:35;441:119;;;517:4;500:21;;540:5;;441:119;422:3;;;;:::i;:::-;;;;380:190;;;;612:12;:10;:12::i;:::-;-1:-1:-1;;;;;601:23:4;:7;:5;:7::i;:::-;-1:-1:-1;;;;;601:23:4;;:41;;;;628:14;601:41;580:139;;;;-1:-1:-1;;;580:139:4;;;;;;;:::i;:::-;5810:8:::1;5805:277;5825:14;:21:::0;5820:26:::1;::::0;::::1;;5805:277;;5892:7;5871:28;;:14;5886:1;5871:17;;;;;;;;-1:-1:-1::0;;;5871:17:4::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:28;5867:75;;5919:8;;5867:75;5976:14;5991:21:::0;;:25:::1;::::0;6015:1:::1;::::0;5991:25:::1;:::i;:::-;5976:41;;;;;;-1:-1:-1::0;;;5976:41:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5956:14;5971:1;5956:17;;;;;;;;-1:-1:-1::0;;;5956:17:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;6031:14;:20;;;;;-1:-1:-1::0;;;6031:20:4::1;;;;;;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;6031:20:4;;;;;::::1;;::::0;;::::1;;::::0;;;::::1;;;;;;::::0;;;;6066:5:::1;;5805:277;5848:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5805:277;;763:155:2::0;-1:-1:-1;;;;;;871:40:2;;-1:-1:-1;;;871:40:2;763:155;;;:::o;586:96:1:-;665:10;586:96;:::o;7713:125:3:-;7778:4;7801:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7801:16:3;:30;;;7713:125::o;12221:171::-;12295:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;12295:29:3;-1:-1:-1;;;;;12295:29:3;;;;;;;;:24;;12348:23;12295:24;12348:14;:23::i;:::-;-1:-1:-1;;;;;12339:46:3;;;;;;;;;;;12221:171;;:::o;7996:445::-;8121:4;8162:16;8170:7;8162;:16::i;:::-;8141:107;;;;-1:-1:-1;;;8141:107:3;;;;;;;:::i;:::-;8258:13;8274:23;8289:7;8274:14;:23::i;:::-;8258:39;;8326:5;-1:-1:-1;;;;;8315:16:3;:7;-1:-1:-1;;;;;8315:16:3;;:63;;;;8371:7;-1:-1:-1;;;;;8347:31:3;:20;8359:7;8347:11;:20::i;:::-;-1:-1:-1;;;;;8347:31:3;;8315:63;:118;;;;8394:39;8418:5;8425:7;8394:23;:39::i;:::-;8307:127;7996:445;-1:-1:-1;;;;7996:445:3:o;11516:594::-;11683:4;-1:-1:-1;;;;;11656:31:3;:23;11671:7;11656:14;:23::i;:::-;-1:-1:-1;;;;;11656:31:3;;11635:119;;;;-1:-1:-1;;;11635:119:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;11772:16:3;;11764:65;;;;-1:-1:-1;;;11764:65:3;;;;;;;:::i;:::-;11840:39;11861:4;11867:2;11871:7;11840:20;:39::i;:::-;11941:29;11958:1;11962:7;11941:8;:29::i;:::-;-1:-1:-1;;;;;11981:15:3;;;;;;:9;:15;;;;;:20;;12000:1;;11981:15;:20;;12000:1;;11981:20;:::i;:::-;;;;-1:-1:-1;;;;;;;12011:13:3;;;;;;:9;:13;;;;;:18;;12028:1;;12011:13;:18;;12028:1;;12011:18;:::i;:::-;;;;-1:-1:-1;;12039:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;12039:21:3;-1:-1:-1;;;;;12039:21:3;;;;;;;;;12076:27;;12039:16;;12076:27;;;;;;;11516:594;;;:::o;15138:313:4:-;15246:7;;15277:9;-1:-1:-1;;;;;15277:9:4;;:1;:9;:::i;:::-;15265:21;-1:-1:-1;15296:9:4;15308;-1:-1:-1;;;;;15308:9:4;;:1;:9;:::i;:::-;15296:21;-1:-1:-1;15327:9:4;15339;-1:-1:-1;;;;;15339:9:4;;:1;:9;:::i;:::-;15327:21;-1:-1:-1;15358:9:4;15370;-1:-1:-1;;;;;15370:9:4;;:1;:9;:::i;:::-;15358:21;-1:-1:-1;;;;;;15429:15:4;;15430:5;15358:21;15430:1;:5;:::i;:::-;15429:15;;;;:::i;:::-;15421:5;15425:1;15421;:5;:::i;:::-;15413;15417:1;15413;:5;:::i;:::-;-1:-1:-1;;;;;15397:13:4;;:5;15401:1;15397;:5;:::i;:::-;:13;;;;:::i;:::-;:21;;;;:::i;:::-;:29;;;;:::i;:::-;:47;;;;:::i;:::-;15390:54;15138:313;-1:-1:-1;;;;;;;;15138:313:4:o;13814:320::-;13861:7;13880:14;13897:39;13914:14;:21;;;;13897:16;:39::i;:::-;13880:56;;13946:15;13972:14;13987:6;13972:22;;;;;;-1:-1:-1;;;13972:22:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13964:31;;13946:49;;14031:14;14070:1;14046:14;:21;;;;:25;;;;:::i;:::-;14031:41;;;;;;-1:-1:-1;;;14031:41:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14006:14;14021:6;14006:22;;;;;;-1:-1:-1;;;14006:22:4;;;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;14082:14;:20;;;;;-1:-1:-1;;;14082:20:4;;;;;;;;;;;;;;;;;-1:-1:-1;;14082:20:4;;;;;;;;;;;;;;;;;;;;;;;;14120:7;-1:-1:-1;;13814:320:4;:::o;10111:516:3:-;-1:-1:-1;;;;;10225:16:3;;10217:61;;;;-1:-1:-1;;;10217:61:3;;;;;;;:::i;:::-;10305:15;;-1:-1:-1;;;;;10288:13:3;;;;;;:9;:13;;;;;:32;;:13;;;:32;;10305:15;;10288:32;:::i;:::-;;;;-1:-1:-1;10336:9:3;;-1:-1:-1;10331:290:3;10351:8;:15;10347:1;:19;10331:290;;;10396:20;10404:8;10413:1;10404:11;;;;;;-1:-1:-1;;;10404:11:3;;;;;;;;;;;;;;;10396:7;:20::i;:::-;10395:21;10387:62;;;;-1:-1:-1;;;10387:62:3;;;;;;;:::i;:::-;10464:49;10493:1;10497:2;10501:8;10510:1;10501:11;;;;;;-1:-1:-1;;;10501:11:3;;;;;;;;;;;;;;;10464:20;:49::i;:::-;10551:2;10528:7;:20;10536:8;10545:1;10536:11;;;;;;-1:-1:-1;;;10536:11:3;;;;;;;;;;;;;;;10528:20;;;;;;;;;;;;:25;;;;;-1:-1:-1;;;;;10528:25:3;;;;;-1:-1:-1;;;;;10528:25:3;;;;;;10598:8;10607:1;10598:11;;;;;;-1:-1:-1;;;10598:11:3;;;;;;;;;;;;;;;10594:2;-1:-1:-1;;;;;10573:37:3;10590:1;-1:-1:-1;;;;;10573:37:3;;;;;;;;;;;10368:3;;;;:::i;:::-;;;;10331:290;;14727:250:4;14782:7;;14857:15;14884:16;14899:1;14884:12;:16;:::i;:::-;14874:27;14903:16;14921:10;14840:92;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;14840:92:4;;;;;;;;;14830:103;;14840:92;14830:103;;;;;-1:-1:-1;14951:19:4;14964:6;14830:103;14951:19;:::i;7069:341:3:-;7220:28;7230:4;7236:2;7240:7;7220:9;:28::i;:::-;7279:48;7302:4;7308:2;7312:7;7321:5;7279:22;:48::i;:::-;7258:145;;;;-1:-1:-1;;;7258:145:3;;;;;;;:::i;271:703:12:-;327:13;544:10;540:51;;-1:-1:-1;570:10:12;;;;;;;;;;;;-1:-1:-1;;;570:10:12;;;;;;540:51;615:5;600:12;654:75;661:9;;654:75;;686:8;;;;:::i;:::-;;-1:-1:-1;708:10:12;;-1:-1:-1;716:2:12;708:10;;:::i;:::-;;;654:75;;;738:19;770:6;760:17;;;;;;-1:-1:-1;;;760:17:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;760:17:12;;738:39;;787:150;794:10;;787:150;;820:11;830:1;820:11;;:::i;:::-;;-1:-1:-1;888:10:12;896:2;888:5;:10;:::i;:::-;875:24;;:2;:24;:::i;:::-;862:39;;845:6;852;845:14;;;;;;-1:-1:-1;;;845:14:12;;;;;;;;;;;;:56;-1:-1:-1;;;;;845:56:12;;;;;;;;-1:-1:-1;915:11:12;924:2;915:11;;:::i;:::-;;;787:150;;14202:444:4;14388:14;:21;14266:7;;;;14441:16;14456:1;14441:12;:16;:::i;:::-;14431:27;14480:14;14516:16;14554:10;14350:232;;;;;;;;;;;;:::i;12945:1022:3:-;13095:4;13115:15;:2;-1:-1:-1;;;;;13115:13:3;;:15::i;:::-;13111:850;;;13182:2;-1:-1:-1;;;;;13166:36:3;;13224:12;:10;:12::i;:::-;13258:4;13284:7;13313:5;13166:170;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13166:170:3;;;;;;;;-1:-1:-1;;13166:170:3;;;;;;;;;;;;:::i;:::-;;;13146:763;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13519:13:3;;13515:380;;13561:106;;-1:-1:-1;;;13561:106:3;;;;;;;:::i;13515:380::-;13847:6;13841:13;13832:6;13828:2;13824:15;13817:38;13146:763;-1:-1:-1;;;;;;13398:55:3;-1:-1:-1;;;13398:55:3;;-1:-1:-1;13391:62:3;;13111:850;-1:-1:-1;13946:4:3;12945:1022;;;;;;:::o;718:413:0:-;1078:20;1116:8;;;718:413::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:409:13;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:13;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:175::-;498:20;;-1:-1:-1;;;;;547:31:13;;537:42;;527:2;;593:1;590;583:12;608:161;677:20;;737:6;726:18;;716:29;;706:2;;759:1;756;749:12;774:198;;886:2;874:9;865:7;861:23;857:32;854:2;;;907:6;899;892:22;854:2;935:31;956:9;935:31;:::i;977:274::-;;;1106:2;1094:9;1085:7;1081:23;1077:32;1074:2;;;1127:6;1119;1112:22;1074:2;1155:31;1176:9;1155:31;:::i;:::-;1145:41;;1205:40;1241:2;1230:9;1226:18;1205:40;:::i;:::-;1195:50;;1064:187;;;;;:::o;1256:342::-;;;;1402:2;1390:9;1381:7;1377:23;1373:32;1370:2;;;1423:6;1415;1408:22;1370:2;1451:31;1472:9;1451:31;:::i;:::-;1441:41;;1501:40;1537:2;1526:9;1522:18;1501:40;:::i;:::-;1491:50;;1588:2;1577:9;1573:18;1560:32;1550:42;;1360:238;;;;;:::o;1603:702::-;;;;;1775:3;1763:9;1754:7;1750:23;1746:33;1743:2;;;1797:6;1789;1782:22;1743:2;1825:31;1846:9;1825:31;:::i;:::-;1815:41;;1875:40;1911:2;1900:9;1896:18;1875:40;:::i;:::-;1865:50;;1962:2;1951:9;1947:18;1934:32;1924:42;;2017:2;2006:9;2002:18;1989:32;2044:18;2036:6;2033:30;2030:2;;;2081:6;2073;2066:22;2030:2;2109:22;;2162:4;2154:13;;2150:27;-1:-1:-1;2140:2:13;;2196:6;2188;2181:22;2140:2;2224:75;2291:7;2286:2;2273:16;2268:2;2264;2260:11;2224:75;:::i;:::-;2214:85;;;1733:572;;;;;;;:::o;2310:369::-;;;2436:2;2424:9;2415:7;2411:23;2407:32;2404:2;;;2457:6;2449;2442:22;2404:2;2485:31;2506:9;2485:31;:::i;:::-;2475:41;;2566:2;2555:9;2551:18;2538:32;2613:5;2606:13;2599:21;2592:5;2589:32;2579:2;;2640:6;2632;2625:22;2579:2;2668:5;2658:15;;;2394:285;;;;;:::o;2684:266::-;;;2813:2;2801:9;2792:7;2788:23;2784:32;2781:2;;;2834:6;2826;2819:22;2781:2;2862:31;2883:9;2862:31;:::i;:::-;2852:41;2940:2;2925:18;;;;2912:32;;-1:-1:-1;;;2771:179:13:o;2955:961::-;;3070:2;3113;3101:9;3092:7;3088:23;3084:32;3081:2;;;3134:6;3126;3119:22;3081:2;3179:9;3166:23;3212:18;3204:6;3201:30;3198:2;;;3249:6;3241;3234:22;3198:2;3277:22;;3330:4;3322:13;;3318:27;-1:-1:-1;3308:2:13;;3364:6;3356;3349:22;3308:2;3405;3392:16;3428:65;3443:49;3489:2;3443:49;:::i;:::-;3428:65;:::i;:::-;3527:15;;;3558:12;;;;3590:11;;;3628;;;3620:20;;3616:29;;3613:42;-1:-1:-1;3610:2:13;;;3673:6;3665;3658:22;3610:2;3700:6;3691:15;;3715:171;3729:2;3726:1;3723:9;3715:171;;;3786:25;3807:3;3786:25;:::i;:::-;3774:38;;3747:1;3740:9;;;;;3832:12;;;;3864;;3715:171;;;-1:-1:-1;3905:5:13;3050:866;-1:-1:-1;;;;;;;3050:866:13:o;3921:1406::-;;4067:2;4110;4098:9;4089:7;4085:23;4081:32;4078:2;;;4131:6;4123;4116:22;4078:2;4176:9;4163:23;4205:18;4246:2;4238:6;4235:14;4232:2;;;4267:6;4259;4252:22;4232:2;4310:6;4299:9;4295:22;4285:32;;4355:7;4348:4;4344:2;4340:13;4336:27;4326:2;;4382:6;4374;4367:22;4326:2;4423;4410:16;4446:65;4461:49;4507:2;4461:49;:::i;4446:65::-;4545:15;;;4576:12;;;;4608:11;;;4638:4;4669:11;;;4661:20;;4657:29;;4654:42;-1:-1:-1;4651:2:13;;;4714:6;4706;4699:22;4651:2;4741:6;4732:15;;4756:541;4770:2;4767:1;4764:9;4756:541;;;4841:2;4835:3;4826:7;4822:17;4818:26;4815:2;;;4862:6;4854;4847:22;4815:2;4904;4898:9;4950:2;4942:6;4938:15;5007:6;4995:10;4992:22;4987:2;4975:10;4972:18;4969:46;4966:2;;;5018:18;;:::i;:::-;5051:22;;5101:25;5122:3;5101:25;:::i;:::-;5086:41;;5177:12;;;5164:26;5147:15;;;5140:51;5204:19;;4788:1;4781:9;;;;;5243:12;;;;5275;;;;4756:541;;;-1:-1:-1;5316:5:13;;4047:1280;-1:-1:-1;;;;;;;;;4047:1280:13:o;5332:257::-;;5443:2;5431:9;5422:7;5418:23;5414:32;5411:2;;;5464:6;5456;5449:22;5411:2;5508:9;5495:23;5527:32;5553:5;5527:32;:::i;5594:261::-;;5716:2;5704:9;5695:7;5691:23;5687:32;5684:2;;;5737:6;5729;5722:22;5684:2;5774:9;5768:16;5793:32;5819:5;5793:32;:::i;5860:482::-;;5982:2;5970:9;5961:7;5957:23;5953:32;5950:2;;;6003:6;5995;5988:22;5950:2;6048:9;6035:23;6081:18;6073:6;6070:30;6067:2;;;6118:6;6110;6103:22;6067:2;6146:22;;6199:4;6191:13;;6187:27;-1:-1:-1;6177:2:13;;6233:6;6225;6218:22;6177:2;6261:75;6328:7;6323:2;6310:16;6305:2;6301;6297:11;6261:75;:::i;6347:196::-;;6458:2;6446:9;6437:7;6433:23;6429:32;6426:2;;;6479:6;6471;6464:22;6426:2;6507:30;6527:9;6507:30;:::i;6548:270::-;;;6675:2;6663:9;6654:7;6650:23;6646:32;6643:2;;;6696:6;6688;6681:22;6643:2;6724:30;6744:9;6724:30;:::i;:::-;6714:40;;6773:39;6808:2;6797:9;6793:18;6773:39;:::i;6823:190::-;;6935:2;6923:9;6914:7;6910:23;6906:32;6903:2;;;6956:6;6948;6941:22;6903:2;-1:-1:-1;6984:23:13;;6893:120;-1:-1:-1;6893:120:13:o;7018:259::-;;7099:5;7093:12;7126:6;7121:3;7114:19;7142:63;7198:6;7191:4;7186:3;7182:14;7175:4;7168:5;7164:16;7142:63;:::i;:::-;7259:2;7238:15;-1:-1:-1;;7234:29:13;7225:39;;;;7266:4;7221:50;;7069:208;-1:-1:-1;;7069:208:13:o;7282:470::-;;7499:6;7493:13;7515:53;7561:6;7556:3;7549:4;7541:6;7537:17;7515:53;:::i;:::-;7631:13;;7590:16;;;;7653:57;7631:13;7590:16;7687:4;7675:17;;7653:57;:::i;:::-;7726:20;;7469:283;-1:-1:-1;;;;7469:283:13:o;7757:546::-;8014:19;;;8058:2;8049:12;;8042:28;;;;-1:-1:-1;;8158:2:13;8154:15;;;8150:24;;8145:2;8136:12;;8129:46;8200:2;8191:12;;8184:28;;;;8247:15;;;8243:24;8237:3;8228:13;;8221:47;8293:3;8284:13;;8004:299::o;8308:425::-;8521:19;;;8565:2;8556:12;;8549:28;;;;8602:2;8593:12;;8586:28;8652:2;8648:15;;;-1:-1:-1;;8644:53:13;8630:12;;;8623:75;8723:3;8714:13;;8511:222::o;8738:203::-;-1:-1:-1;;;;;8902:32:13;;;;8884:51;;8872:2;8857:18;;8839:102::o;8946:490::-;-1:-1:-1;;;;;9215:15:13;;;9197:34;;9267:15;;9262:2;9247:18;;9240:43;9314:2;9299:18;;9292:34;;;9362:3;9357:2;9342:18;;9335:31;;;8946:490;;9383:47;;9410:19;;9402:6;9383:47;:::i;:::-;9375:55;9149:287;-1:-1:-1;;;;;;9149:287:13:o;9441:635::-;9612:2;9664:21;;;9734:13;;9637:18;;;9756:22;;;9441:635;;9612:2;9835:15;;;;9809:2;9794:18;;;9441:635;9881:169;9895:6;9892:1;9889:13;9881:169;;;9956:13;;9944:26;;10025:15;;;;9990:12;;;;9917:1;9910:9;9881:169;;;-1:-1:-1;10067:3:13;;9592:484;-1:-1:-1;;;;;;9592:484:13:o;10081:187::-;10246:14;;10239:22;10221:41;;10209:2;10194:18;;10176:92::o;10273:221::-;;10422:2;10411:9;10404:21;10442:46;10484:2;10473:9;10469:18;10461:6;10442:46;:::i;10499:399::-;10701:2;10683:21;;;10740:2;10720:18;;;10713:30;10779:34;10774:2;10759:18;;10752:62;-1:-1:-1;;;10845:2:13;10830:18;;10823:33;10888:3;10873:19;;10673:225::o;10903:407::-;11105:2;11087:21;;;11144:2;11124:18;;;11117:30;11183:34;11178:2;11163:18;;11156:62;-1:-1:-1;;;11249:2:13;11234:18;;11227:41;11300:3;11285:19;;11077:233::o;11315:414::-;11517:2;11499:21;;;11556:2;11536:18;;;11529:30;11595:34;11590:2;11575:18;;11568:62;-1:-1:-1;;;11661:2:13;11646:18;;11639:48;11719:3;11704:19;;11489:240::o;11734:402::-;11936:2;11918:21;;;11975:2;11955:18;;;11948:30;12014:34;12009:2;11994:18;;11987:62;-1:-1:-1;;;12080:2:13;12065:18;;12058:36;12126:3;12111:19;;11908:228::o;12141:352::-;12343:2;12325:21;;;12382:2;12362:18;;;12355:30;12421;12416:2;12401:18;;12394:58;12484:2;12469:18;;12315:178::o;12498:354::-;12700:2;12682:21;;;12739:2;12719:18;;;12712:30;12778:32;12773:2;12758:18;;12751:60;12843:2;12828:18;;12672:180::o;12857:351::-;13059:2;13041:21;;;13098:2;13078:18;;;13071:30;13137:29;13132:2;13117:18;;13110:57;13199:2;13184:18;;13031:177::o;13213:400::-;13415:2;13397:21;;;13454:2;13434:18;;;13427:30;13493:34;13488:2;13473:18;;13466:62;-1:-1:-1;;;13559:2:13;13544:18;;13537:34;13603:3;13588:19;;13387:226::o;13618:349::-;13820:2;13802:21;;;13859:2;13839:18;;;13832:30;13898:27;13893:2;13878:18;;13871:55;13958:2;13943:18;;13792:175::o;13972:354::-;14174:2;14156:21;;;14213:2;14193:18;;;14186:30;14252:32;14247:2;14232:18;;14225:60;14317:2;14302:18;;14146:180::o;14331:408::-;14533:2;14515:21;;;14572:2;14552:18;;;14545:30;14611:34;14606:2;14591:18;;14584:62;-1:-1:-1;;;14677:2:13;14662:18;;14655:42;14729:3;14714:19;;14505:234::o;14744:345::-;14946:2;14928:21;;;14985:2;14965:18;;;14958:30;-1:-1:-1;;;15019:2:13;15004:18;;14997:51;15080:2;15065:18;;14918:171::o;15094:354::-;15296:2;15278:21;;;15335:2;15315:18;;;15308:30;15374:32;15369:2;15354:18;;15347:60;15439:2;15424:18;;15268:180::o;15453:420::-;15655:2;15637:21;;;15694:2;15674:18;;;15667:30;15733:34;15728:2;15713:18;;15706:62;15804:26;15799:2;15784:18;;15777:54;15863:3;15848:19;;15627:246::o;15878:341::-;16080:2;16062:21;;;16119:2;16099:18;;;16092:30;-1:-1:-1;;;16153:2:13;16138:18;;16131:47;16210:2;16195:18;;16052:167::o;16224:406::-;16426:2;16408:21;;;16465:2;16445:18;;;16438:30;16504:34;16499:2;16484:18;;16477:62;-1:-1:-1;;;16570:2:13;16555:18;;16548:40;16620:3;16605:19;;16398:232::o;16635:405::-;16837:2;16819:21;;;16876:2;16856:18;;;16849:30;16915:34;16910:2;16895:18;;16888:62;-1:-1:-1;;;16981:2:13;16966:18;;16959:39;17030:3;17015:19;;16809:231::o;17045:356::-;17247:2;17229:21;;;17266:18;;;17259:30;17325:34;17320:2;17305:18;;17298:62;17392:2;17377:18;;17219:182::o;17406:408::-;17608:2;17590:21;;;17647:2;17627:18;;;17620:30;17686:34;17681:2;17666:18;;17659:62;-1:-1:-1;;;17752:2:13;17737:18;;17730:42;17804:3;17789:19;;17580:234::o;17819:356::-;18021:2;18003:21;;;18040:18;;;18033:30;18099:34;18094:2;18079:18;;18072:62;18166:2;18151:18;;17993:182::o;18180:405::-;18382:2;18364:21;;;18421:2;18401:18;;;18394:30;18460:34;18455:2;18440:18;;18433:62;-1:-1:-1;;;18526:2:13;18511:18;;18504:39;18575:3;18560:19;;18354:231::o;18590:351::-;18792:2;18774:21;;;18831:2;18811:18;;;18804:30;18870:29;18865:2;18850:18;;18843:57;18932:2;18917:18;;18764:177::o;18946:411::-;19148:2;19130:21;;;19187:2;19167:18;;;19160:30;19226:34;19221:2;19206:18;;19199:62;-1:-1:-1;;;19292:2:13;19277:18;;19270:45;19347:3;19332:19;;19120:237::o;19362:347::-;19564:2;19546:21;;;19603:2;19583:18;;;19576:30;19642:25;19637:2;19622:18;;19615:53;19700:2;19685:18;;19536:173::o;19714:415::-;19916:2;19898:21;;;19955:2;19935:18;;;19928:30;19994:34;19989:2;19974:18;;19967:62;-1:-1:-1;;;20060:2:13;20045:18;;20038:49;20119:3;20104:19;;19888:241::o;20134:407::-;20336:2;20318:21;;;20375:2;20355:18;;;20348:30;20414:34;20409:2;20394:18;;20387:62;-1:-1:-1;;;20480:2:13;20465:18;;20458:41;20531:3;20516:19;;20308:233::o;20546:397::-;20748:2;20730:21;;;20787:2;20767:18;;;20760:30;20826:34;20821:2;20806:18;;20799:62;-1:-1:-1;;;20892:2:13;20877:18;;20870:31;20933:3;20918:19;;20720:223::o;20948:413::-;21150:2;21132:21;;;21189:2;21169:18;;;21162:30;21228:34;21223:2;21208:18;;21201:62;-1:-1:-1;;;21294:2:13;21279:18;;21272:47;21351:3;21336:19;;21122:239::o;21366:177::-;21512:25;;;21500:2;21485:18;;21467:76::o;21548:251::-;21618:2;21612:9;21648:17;;;21695:18;21680:34;;21716:22;;;21677:62;21674:2;;;21742:18;;:::i;:::-;21778:2;21771:22;21592:207;;-1:-1:-1;21592:207:13:o;21804:192::-;;21903:18;21895:6;21892:30;21889:2;;;21925:18;;:::i;:::-;-1:-1:-1;21985:4:13;21966:17;;;21962:28;;21879:117::o;22001:253::-;;-1:-1:-1;;;;;22130:2:13;22127:1;22123:10;22160:2;22157:1;22153:10;22191:3;22187:2;22183:12;22178:3;22175:21;22172:2;;;22199:18;;:::i;22259:128::-;;22330:1;22326:6;22323:1;22320:13;22317:2;;;22336:18;;:::i;:::-;-1:-1:-1;22372:9:13;;22307:80::o;22392:120::-;;22458:1;22448:2;;22463:18;;:::i;:::-;-1:-1:-1;22497:9:13;;22438:74::o;22517:168::-;;22623:1;22619;22615:6;22611:14;22608:1;22605:21;22600:1;22593:9;22586:17;22582:45;22579:2;;;22630:18;;:::i;:::-;-1:-1:-1;22670:9:13;;22569:116::o;22690:125::-;;22758:1;22755;22752:8;22749:2;;;22763:18;;:::i;:::-;-1:-1:-1;22800:9:13;;22739:76::o;22820:258::-;22892:1;22902:113;22916:6;22913:1;22910:13;22902:113;;;22992:11;;;22986:18;22973:11;;;22966:39;22938:2;22931:10;22902:113;;;23033:6;23030:1;23027:13;23024:2;;;-1:-1:-1;;23068:1:13;23050:16;;23043:27;22873:205::o;23083:380::-;23168:1;23158:12;;23215:1;23205:12;;;23226:2;;23280:4;23272:6;23268:17;23258:27;;23226:2;23333;23325:6;23322:14;23302:18;23299:38;23296:2;;;23379:10;23374:3;23370:20;23367:1;23360:31;23414:4;23411:1;23404:15;23442:4;23439:1;23432:15;23468:197;;23534:6;23575:2;23568:5;23564:14;23602:2;23593:7;23590:15;23587:2;;;23608:18;;:::i;:::-;23657:1;23644:15;;23514:151;-1:-1:-1;;;23514:151:13:o;23670:135::-;;-1:-1:-1;;23730:17:13;;23727:2;;;23750:18;;:::i;:::-;-1:-1:-1;23797:1:13;23786:13;;23717:88::o;23810:112::-;;23868:1;23858:2;;23873:18;;:::i;:::-;-1:-1:-1;23907:9:13;;23848:74::o;23927:127::-;23988:10;23983:3;23979:20;23976:1;23969:31;24019:4;24016:1;24009:15;24043:4;24040:1;24033:15;24059:127;24120:10;24115:3;24111:20;24108:1;24101:31;24151:4;24148:1;24141:15;24175:4;24172:1;24165:15;24191:127;24252:10;24247:3;24243:20;24240:1;24233:31;24283:4;24280:1;24273:15;24307:4;24304:1;24297:15;24323:133;-1:-1:-1;;;;;;24399:32:13;;24389:43;;24379:2;;24446:1;24443;24436:12;24379:2;24369:87;:::o
Swarm Source
ipfs://ce2c957a804ad7f58778ac31db95ddeb89f6ce2c34cb863e22b1bfb8572b2795
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
AVAX | 100.00% | $23.07 | 0.069 | $1.59 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.