ETH Price: $2,421.52 (+0.82%)

Contract

0x37B1CE6433064aFf57Dc6F0f6631a0E4ad7dD01D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Claim Tokens200927122024-06-14 21:24:11113 days ago1718400251IN
0x37B1CE64...4ad7dD01D
0 ETH0.0009839.14131683
Claim Tokens198377142024-05-10 6:01:47148 days ago1715320907IN
0x37B1CE64...4ad7dD01D
0 ETH0.000585015.44028477
Claim Tokens196156572024-04-09 4:18:23179 days ago1712636303IN
0x37B1CE64...4ad7dD01D
0 ETH0.0021140719.65963142
Claim Tokens192971952024-02-24 11:37:47224 days ago1708774667IN
0x37B1CE64...4ad7dD01D
0 ETH0.002396422.28508201
Claim Tokens192517032024-02-18 2:22:23231 days ago1708222943IN
0x37B1CE64...4ad7dD01D
0 ETH0.0017572216.0192975
Claim Tokens192422402024-02-16 18:29:11232 days ago1708108151IN
0x37B1CE64...4ad7dD01D
0 ETH0.0030847628.1215657
Claim Tokens192109132024-02-12 9:00:11236 days ago1707728411IN
0x37B1CE64...4ad7dD01D
0 ETH0.0017912819.08954108
Claim Tokens191426332024-02-02 18:55:59246 days ago1706900159IN
0x37B1CE64...4ad7dD01D
0 ETH0.0021791619.86584957
Claim Tokens190828252024-01-25 9:46:35254 days ago1706175995IN
0x37B1CE64...4ad7dD01D
0 ETH0.0043127345.96039004
Claim Tokens190828102024-01-25 9:43:35254 days ago1706175815IN
0x37B1CE64...4ad7dD01D
0 ETH0.0046040549.06494519
Claim Tokens190755442024-01-24 9:16:47255 days ago1706087807IN
0x37B1CE64...4ad7dD01D
0 ETH0.001095659.98825043
Claim Tokens190698312024-01-23 14:01:23256 days ago1706018483IN
0x37B1CE64...4ad7dD01D
0 ETH0.0011160821.14359594
Claim Tokens190698242024-01-23 13:59:59256 days ago1706018399IN
0x37B1CE64...4ad7dD01D
0 ETH0.0019571317.84173721
Claim Tokens190595302024-01-22 3:12:23258 days ago1705893143IN
0x37B1CE64...4ad7dD01D
0 ETH0.0012159511.08494705
Claim Tokens190263322024-01-17 11:32:35262 days ago1705491155IN
0x37B1CE64...4ad7dD01D
0 ETH0.0038561335.15355625
Claim Tokens190248122024-01-17 6:27:23262 days ago1705472843IN
0x37B1CE64...4ad7dD01D
0 ETH0.0031426828.64955492
Claim Tokens190238792024-01-17 3:19:47263 days ago1705461587IN
0x37B1CE64...4ad7dD01D
0 ETH0.0038606535.19474379
Claim Tokens190226902024-01-16 23:20:11263 days ago1705447211IN
0x37B1CE64...4ad7dD01D
0 ETH0.0034727731.65878225
Claim Tokens190224022024-01-16 22:21:47263 days ago1705443707IN
0x37B1CE64...4ad7dD01D
0 ETH0.0029650931.59871
Claim Tokens190219072024-01-16 20:42:23263 days ago1705437743IN
0x37B1CE64...4ad7dD01D
0 ETH0.0036663633.42356533
Claim Tokens190209442024-01-16 17:28:11263 days ago1705426091IN
0x37B1CE64...4ad7dD01D
0 ETH0.0044932440.96159885
Claim Tokens190193272024-01-16 12:03:59263 days ago1705406639IN
0x37B1CE64...4ad7dD01D
0 ETH0.003568132.52782354
Claim Tokens190189302024-01-16 10:43:59263 days ago1705401839IN
0x37B1CE64...4ad7dD01D
0 ETH0.0038153634.7818765
Claim Tokens190184272024-01-16 9:02:47263 days ago1705395767IN
0x37B1CE64...4ad7dD01D
0 ETH0.0026844928.60833682
Claim Tokens190179402024-01-16 7:24:59263 days ago1705389899IN
0x37B1CE64...4ad7dD01D
0 ETH0.0006260922.29698309
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
184567162023-10-29 15:24:47342 days ago1698593087
0x37B1CE64...4ad7dD01D
76.81109286 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BuccaneerV3Crowdsale

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : Crowdsale.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";

/*

██████╗░██╗░░░██╗░█████╗░░█████╗░░█████╗░███╗░░██╗███████╗███████╗██████╗░  ██╗░░░██╗██████╗░
██╔══██╗██║░░░██║██╔══██╗██╔══██╗██╔══██╗████╗░██║██╔════╝██╔════╝██╔══██╗  ██║░░░██║╚════██╗
██████╦╝██║░░░██║██║░░╚═╝██║░░╚═╝███████║██╔██╗██║█████╗░░█████╗░░██████╔╝  ╚██╗░██╔╝░█████╔╝
██╔══██╗██║░░░██║██║░░██╗██║░░██╗██╔══██║██║╚████║██╔══╝░░██╔══╝░░██╔══██╗  ░╚████╔╝░░╚═══██╗
██████╦╝╚██████╔╝╚█████╔╝╚█████╔╝██║░░██║██║░╚███║███████╗███████╗██║░░██║  ░░╚██╔╝░░██████╔╝
╚═════╝░░╚═════╝░░╚════╝░░╚════╝░╚═╝░░╚═╝╚═╝░░╚══╝╚══════╝╚══════╝╚═╝░░╚═╝  ░░░╚═╝░░░╚═════╝░
*/

contract BuccaneerV3Crowdsale {
    using SafeMath for uint256;

    IERC20 private token;
    address private owner;
    uint256 private endTime;
    uint256 private raisedAmount = 0;
    uint256 private tokenPrice = 180;  // 180 tokens per ETH, updated
    uint256 private goal = 280 ether;
    uint256 private maxLimit = 20 ether;
    uint256 private minLimit = 0.1 ether;
    uint256 private totalTokens = 50400000000000000000000;
    string private description = "Buccaneer V3 is an advanced on-chain privacy token that allows users to discreetly send BUCC tokens around privately. BUCC will be available approximately a month after the sale has concluded. IMPORTANT LEGAL NOTICE: This transaction is not available to residents, citizens, or green card holders of the United States of America or any of its territories or possessions, including Puerto Rico, the U.S. Virgin Islands, and Guam (collectively, 'US Persons'). The service offered in this transaction has not been registered under the United States Securities Act of 1933, as amended (the 'Securities Act'), or any state securities laws, and may not be offered, sold, pledged, or otherwise transferred within the United States or to or for the benefit of US Persons, except pursuant to an exemption from, or in a transaction not subject to, the registration requirements of the Securities Act and applicable state securities laws. US Persons are not permitted to participate in the transaction offered here. By participating in this transaction, you represent and warrant that you are not a US Person and that you are not purchasing on behalf of or for the benefit of a US Person. The Buccaneer team does not accept any responsibility or liability for any violation of local regulations by any user. All participants must ensure they are compliant with their local regulations and laws before participating. The user assumes all responsibility and risk associated with this transaction, and the Buccaneer team will not be held liable for any actions, claims, damages, costs, or liabilities arising from or related to this contract. It's imperative that participants conduct thorough research and consult with legal professionals where necessary. By interacting with this contract, you agree to these terms. Join https://t.me/BuccaneerV3 for more information.";
    //remember to fix
    bool private saleStarted = false;
    uint256 private tokensSold = 0;
    uint256 private startTime;
    


    struct Buyer {
        address buyerAddress;
        uint256 amountBought;
    }

    Buyer[] private buyers;
    mapping(address => uint256) private buyerIDs;
    mapping(address => uint256) private balances;
    mapping(address => bool) private userLock;
    mapping(address => uint256) private contributedEth;
    mapping(address => bool) private claimed;



    modifier onlyOwner() {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    modifier hasMinimumPurchase() {
        require(msg.value >= minLimit, "0.1 ETH is the minimum purchase limit");
        _;
    }

    modifier hasMaximumPurchase() {
        require(contributedEth[msg.sender].add(msg.value) <= maxLimit, "20 ETH is the maximum total contribution per address");
        _;
    }

    modifier saleHasStarted() {
        require(saleStarted, "Sale has not started yet");
        _;
    }

    constructor() {
        owner = msg.sender;
        endTime = block.timestamp + 48 hours;
    }


    function VIII_startSale() external onlyOwner {
        startTime = block.timestamp;
        endTime = block.timestamp + 48 hours;
        saleStarted = true;
    }


    function VIII_setToken(address _token) external onlyOwner {
        //require(address(token) == address(0), "Token already set!");
        token = IERC20(_token);
    }


    function buyTokensInternal() internal hasMinimumPurchase hasMaximumPurchase saleHasStarted {
        require(!userLock[msg.sender], "Reentrant call detected!");

        userLock[msg.sender] = true;

        require(block.timestamp < endTime, "Sale ended");
        uint256 tokensToBuy = msg.value.mul(tokenPrice);

        // Calculate the number of tokens left for sale
        uint256 tokensLeft = totalTokens.sub(tokensSold);
        require(tokensLeft >= tokensToBuy, "Not enough tokens left to buy");

        // Assign ID if the buyer is new
        if(buyerIDs[msg.sender] == 0) {
            buyers.push(Buyer({
                buyerAddress: msg.sender,
                amountBought: tokensToBuy
            }));
            buyerIDs[msg.sender] = buyers.length;  // This will be the ID for the buyer
        } else {
            uint256 index = buyerIDs[msg.sender] - 1;
            buyers[index].amountBought = buyers[index].amountBought.add(tokensToBuy);
        }

        tokensSold = tokensSold.add(tokensToBuy);
        raisedAmount = raisedAmount.add(msg.value);
        balances[msg.sender] = balances[msg.sender].add(tokensToBuy);
        
        // Update the total ETH contributed by the sender
        contributedEth[msg.sender] = contributedEth[msg.sender].add(msg.value);

        userLock[msg.sender] = false;
    }

    function buyTokens() external payable hasMinimumPurchase hasMaximumPurchase saleHasStarted {
        buyTokensInternal();
    }

    receive() external payable {
        buyTokensInternal();
    }


    function claimTokens() external saleHasStarted {
        require(block.timestamp > endTime, "Sale not ended");
        require(!claimed[msg.sender], "You have already claimed your tokens");
        require(!userLock[msg.sender], "Reentrant call detected!");

        userLock[msg.sender] = true;

        uint256 amount = balances[msg.sender];
        require(amount > 0, "No tokens to claim");
        balances[msg.sender] = 0; // Update the user's balance before the actual transfer for added security.
        require(token.transfer(msg.sender, amount), "Token transfer failed");

        claimed[msg.sender] = true;

        userLock[msg.sender] = false;
    }



    function VIII_endSalePrematurely() external onlyOwner {
        require(saleStarted, "Sale hasn't started yet");
        require(block.timestamp < endTime, "Sale has already ended");
        endTime = block.timestamp;  // Set endTime to the current time to end the sale
    }

    function VIII_withdrawETH() external onlyOwner {
        payable(owner).transfer(address(this).balance);
    }

    function VIII_emergencyPull(uint256 _amount) external onlyOwner {
        payable(owner).transfer(_amount);
    }


    function VIII_setTokenPrice_in_RATIO(uint256 _price) external onlyOwner {
        tokenPrice = _price;
    }

    function VIII_setGoal_in_WEI(uint256 _goal) external onlyOwner {
        goal = _goal;
    }

    function VIII_setTotalTokens_in_18_Decimal(uint256 _newTotal) external onlyOwner {
    totalTokens = _newTotal;
    }


                    
                    function A_Check_My_Balance() external view returns (string memory) {
                        address user = msg.sender;
                        uint256 userTokens = balances[user];

                        if (block.timestamp > endTime && claimed[user]) {
                            return "You have already claimed your tokens.";
                        }

                        if (userTokens == 0) {
                            return "You haven't sent any tokens.";
                        }

                        uint256 percentageOfTotal = (userTokens.mul(100)).div(totalTokens);
                        string memory rank = getRank(contributedEth[user]);

                        string memory baseString = "You are ranked as a ";
                        string memory rankStr = rank;
                        string memory claimString = ". You will be able to claim ";
                        string memory tokensStr = _uintToString(userTokens.div(1e18)); // Displaying compact value
                        string memory middleString = " tokens, which is ";
                        string memory percentageStr = _uintToString(percentageOfTotal);
                        string memory endString = "% of the total tokens. Remember this is a rounded estimate. Use your ID and to the G_getBalanceByBuyerID function and input your ID for the exact amount.";

                        bytes memory b = new bytes(400); // estimation of space required, increased due to the addition of rank

                        uint pos = 0;
                        for (uint i = 0; i < bytes(baseString).length; i++) b[pos++] = bytes(baseString)[i];
                        for (uint i = 0; i < bytes(rankStr).length; i++) b[pos++] = bytes(rankStr)[i];
                        for (uint i = 0; i < bytes(claimString).length; i++) b[pos++] = bytes(claimString)[i];
                        for (uint i = 0; i < bytes(tokensStr).length; i++) b[pos++] = bytes(tokensStr)[i];
                        for (uint i = 0; i < bytes(middleString).length; i++) b[pos++] = bytes(middleString)[i];
                        for (uint i = 0; i < bytes(percentageStr).length; i++) b[pos++] = bytes(percentageStr)[i];
                        for (uint i = 0; i < bytes(endString).length; i++) b[pos++] = bytes(endString)[i];

                        string memory finalStr = new string(pos);
                        for (uint i = 0; i < pos; i++) {
                            bytes(finalStr)[i] = b[i];
                        }

                        return finalStr;
                    }



                    function B_Show_What_Percentage_Sale_Is_Done() external view returns (string memory) {
                        if (block.timestamp > endTime) {
                            return "The sale is over.";
                        }

                        if (raisedAmount == 0) {
                            return "The sale hasn't had any ETH sent to it yet.";
                        }

                        uint256 percentage = raisedAmount.mul(100).div(goal);
                        
                        if (percentage >= 995 && percentage < 1000) { // if it's close to 100% (>=99.5%)
                            return "The sale is at 100% completion.";
                        }

                        return string(abi.encodePacked("The sale is at ", uint2str(percentage), " percentage towards completion."));
                    }


                    function C_getSaleStatus() external view returns (string memory) {

                        if (!saleStarted) {
                            return "The sale has not started.";
                        } else if (block.timestamp < endTime) {
                            uint256 timeRemaining = endTime.sub(block.timestamp);
                            uint256 U = timeRemaining.div(3600);
                            uint256 Z = (timeRemaining.sub(U.mul(3600))).div(60);
                            return string(abi.encodePacked("The sale is live, there are hours: ", _uintToString(U), " and ", _uintToString(Z), " minutes left."));

                        } else {
                            return "The Sale is Over";
                        }
                    }


                    function D_Tokens_Left_in_the_Sale() external view returns (string memory) {
                        if (block.timestamp > endTime) {
                            return "The sale is over.";
                        }

                        uint256 tokensRemaining = totalTokens.sub(tokensSold).div(1e18);
                        uint256 compactTokensSold = tokensSold.div(1e18);
                        
                        string memory tokensSoldStr = _uintToString(compactTokensSold);
                        string memory tokensRemainingStr = _uintToString(tokensRemaining);

                        // Constructing the status message
                        bytes memory b = new bytes(200); // estimation of space
                        string memory baseString = "A total of ";
                        string memory middleString = " tokens have been sold and ";
                        string memory endString = " are left.";

                        uint pos = 0;

                        for (uint i = 0; i < bytes(baseString).length; i++) b[pos++] = bytes(baseString)[i];
                        for (uint i = 0; i < bytes(tokensSoldStr).length; i++) b[pos++] = bytes(tokensSoldStr)[i];
                        for (uint i = 0; i < bytes(middleString).length; i++) b[pos++] = bytes(middleString)[i];
                        for (uint i = 0; i < bytes(tokensRemainingStr).length; i++) b[pos++] = bytes(tokensRemainingStr)[i];
                        for (uint i = 0; i < bytes(endString).length; i++) b[pos++] = bytes(endString)[i];

                        string memory finalStr = new string(pos);
                        for (uint i = 0; i < pos; i++) {
                            bytes(finalStr)[i] = b[i];
                        }

                        return finalStr;
                    }

                    function E_What_is_the_Minimum_Send_in_Limit() external view returns (string memory) {
                        if (block.timestamp > endTime) {
                            return "The sale is over.";
                        }
                        return "The minimum send limit is 0.1 Ethereum. The maximum input is 20 Ethereum per address.";
                    }


                    function F_What_is_the_Price() external view returns (string memory) {
                        return string(abi.encodePacked("The number of tokens per ETH is: ", uint2str(tokenPrice)));
                    }

                    function G_getBalanceByBuyerID(uint256 _buyerID) external view returns (string memory) {
                        // Ensure the buyerID is valid
                        require(_buyerID > 0 && _buyerID <= buyers.length, "Invalid buyerID");

                        // Retrieve the buyer's address using the buyerID
                        address buyerAddress = buyers[_buyerID - 1].buyerAddress;

                        // Convert the address to string
                        string memory addressStr = _addrToString(buyerAddress);

                        if (block.timestamp > endTime && claimed[buyerAddress]) {
                            return "Address has already claimed their tokens.";
                        }

                        // Check if the user has a balance
                        uint256 balance = balances[buyerAddress];
                        if (balance == 0) {
                            return string(abi.encodePacked("Address: ", addressStr, " has not sent any ETH to the contract."));
                        } else {
                            return string(abi.encodePacked("Address: ", addressStr, " has a balance of: ", uint2str(balance)));
                        }
                    }


                    function H_getTotalBuyers() external view returns (string memory) {
                        if (block.timestamp > endTime) {
                            return string(abi.encodePacked("The sale is over. The final number of buyers was: ", uint2str(buyers.length)));
                        }
                        return string(abi.encodePacked("The total number of buyers is: ", uint2str(buyers.length)));
                    }



                    function I_getDescription() external view returns (string memory) {
                        return description;
                    }

                    function J_estimatedTimeToEndSale() external view saleHasStarted returns (string memory) {
                        if (block.timestamp >= endTime || tokensSold == totalTokens) {
                            return "The sale has either ended or all tokens are sold.";
                        }

                        uint256 averageRate = tokensSold.div(block.timestamp.sub(startTime)); // Tokens per second
                        if (averageRate == 0) {
                            return "Not enough data to estimate time to end sale.";
                        }

                        uint256 estimatedSecondsToEnd = totalTokens.sub(tokensSold).div(averageRate);
                        uint256 estimatedHoursToEnd = estimatedSecondsToEnd.div(3600);

                        return string(abi.encodePacked("Estimated hours to end sale: ", uint2str(estimatedHoursToEnd)));
                    }

                    function K_getUserID() external view returns (uint256) {
                        return buyerIDs[msg.sender];
                    }


                    function L_getTokensLeft() external view returns (string memory) {
                        uint256 tokensLeft = token.balanceOf(address(this)).div(1e18);
                        return string(abi.encodePacked("Number of tokens left in the contract: ", uint2str(tokensLeft)));
                    }



                    function getRank(uint256 contribution) internal pure returns (string memory) {
                        if (contribution < 0.3 ether) return "Slave";
                        if (contribution < 1.5 ether) return "Swab";
                        if (contribution < 3 ether) return "Cook";
                        if (contribution < 4.5 ether) return "Boatswain";
                        if (contribution < 5 ether) return "Carpenter";
                        if (contribution < 7.5 ether) return "Chaplain";
                        if (contribution < 10 ether) return "Quartermaster";
                        if (contribution < 12.5 ether) return "Master Gunner";
                        if (contribution < 15 ether) return "Sailmaster";
                        return "First Mate";
                    }





                    //UTIL
                    function uint2str(uint256 _i) internal pure returns (string memory) {
                        if (_i == 0) {
                            return "0";
                        }
                        uint256 j = _i;
                        uint256 length;
                        while (j != 0) {
                            length++;
                            j /= 10;
                        }
                        bytes memory bstr = new bytes(length);
                        uint256 k = length;
                        while (_i != 0) {
                            bstr[--k] = bytes1(uint8(48 + _i % 10));
                            _i /= 10;
                        }
                        return string(bstr);
                    }



                    function _uintToString(uint256 _i) internal pure returns (string memory) {
                        if (_i == 0) {
                            return "0";
                        }
                        uint256 j = _i;
                        uint256 length;
                        while (j != 0) {
                            length++;
                            j /= 10;
                        }
                        bytes memory bstr = new bytes(length);
                        uint256 k = length;
                        j = _i;
                        while (j != 0) {
                            bstr[--k] = bytes1(uint8(48 + j % 10));
                            j /= 10;
                        }
                        return string(bstr);
                    }

                    function _addrToString(address _addr) internal pure returns(string memory) {
                        bytes32 value = bytes32(uint256(uint160(_addr)));
                        bytes memory alphabet = "0123456789abcdef";

                        bytes memory str = new bytes(42);
                        str[0] = '0';
                        str[1] = 'x';
                        for (uint256 i = 0; i < 20; i++) {
                            str[2+i*2] = alphabet[uint8(value[i + 12] >> 4)];
                            str[3+i*2] = alphabet[uint8(value[i + 12] & 0x0f)];
                        }
                        return string(str);
                    }

}

File 2 of 3 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 3 of 3 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"A_Check_My_Balance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"B_Show_What_Percentage_Sale_Is_Done","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"C_getSaleStatus","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"D_Tokens_Left_in_the_Sale","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"E_What_is_the_Minimum_Send_in_Limit","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"F_What_is_the_Price","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyerID","type":"uint256"}],"name":"G_getBalanceByBuyerID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"H_getTotalBuyers","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"I_getDescription","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"J_estimatedTimeToEndSale","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"K_getUserID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"L_getTokensLeft","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"VIII_emergencyPull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"VIII_endSalePrematurely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_goal","type":"uint256"}],"name":"VIII_setGoal_in_WEI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"VIII_setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"VIII_setTokenPrice_in_RATIO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTotal","type":"uint256"}],"name":"VIII_setTotalTokens_in_18_Decimal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"VIII_startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"VIII_withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600060035560b4600455680f2dc7d47f156000006005556801158e460913d0000060065567016345785d8a0000600755690aac3081695b0780000060085560405180610760016040528061073f815260200162004e9e61073f9139600990816200006f919062000376565b506000600a60006101000a81548160ff0219169083151502179055506000600b553480156200009d57600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506202a30042620000f091906200048c565b600281905550620004c7565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200017e57607f821691505b60208210810362000194576200019362000136565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620001bf565b6200020a8683620001bf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000257620002516200024b8462000222565b6200022c565b62000222565b9050919050565b6000819050919050565b620002738362000236565b6200028b62000282826200025e565b848454620001cc565b825550505050565b600090565b620002a262000293565b620002af81848462000268565b505050565b5b81811015620002d757620002cb60008262000298565b600181019050620002b5565b5050565b601f8211156200032657620002f0816200019a565b620002fb84620001af565b810160208510156200030b578190505b620003236200031a85620001af565b830182620002b4565b50505b505050565b600082821c905092915050565b60006200034b600019846008026200032b565b1980831691505092915050565b600062000366838362000338565b9150826002028217905092915050565b6200038182620000fc565b67ffffffffffffffff8111156200039d576200039c62000107565b5b620003a9825462000165565b620003b6828285620002db565b600060209050601f831160018114620003ee5760008415620003d9578287015190505b620003e5858262000358565b86555062000455565b601f198416620003fe866200019a565b60005b82811015620004285784890151825560018201915060208501945060208101905062000401565b8683101562000448578489015162000444601f89168262000338565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004998262000222565b9150620004a68362000222565b9250828201905080821115620004c157620004c06200045d565b5b92915050565b6149c780620004d76000396000f3fe6080604052600436106101395760003560e01c80638cd34885116100ab578063a9b1cb7c1161006f578063a9b1cb7c146103cb578063b6d46539146103f4578063d0febe4c1461041f578063e16d5c2014610429578063f7af63cc14610454578063fadcdaa01461047f57610148565b80638cd34885146102e45780638f587ff3146103215780639994e1e61461034a5780639d40433714610375578063a8ed1241146103a057610148565b80634434edb5116100fd5780634434edb51461022057806348c54b9d146102495780635c040e57146102605780635ef5d035146102775780636b8d6610146102a257806376e8cce7146102cd57610148565b80630902323a1461014d578063168062af1461017857806317657c5d146101a157806325dba88f146101cc578063341cec8b146101f557610148565b3661014857610146610496565b005b600080fd5b34801561015957600080fd5b50610162610b0d565b60405161016f9190613647565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a91906136a4565b610c52565b005b3480156101ad57600080fd5b506101b6610cec565b6040516101c39190613647565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee91906136a4565b610dd4565b005b34801561020157600080fd5b5061020a610e6e565b6040516102179190613647565b60405180910390f35b34801561022c57600080fd5b506102476004803603810190610242919061372f565b6113c5565b005b34801561025557600080fd5b5061025e611498565b005b34801561026c57600080fd5b506102756118f9565b005b34801561028357600080fd5b5061028c6119c2565b604051610299919061376b565b60405180910390f35b3480156102ae57600080fd5b506102b7611a09565b6040516102c49190613647565b60405180910390f35b3480156102d957600080fd5b506102e2611b60565b005b3480156102f057600080fd5b5061030b600480360381019061030691906136a4565b611c5b565b6040516103189190613647565b60405180910390f35b34801561032d57600080fd5b50610348600480360381019061034391906136a4565b611e40565b005b34801561035657600080fd5b5061035f611f3c565b60405161036c9190613647565b60405180910390f35b34801561038157600080fd5b5061038a611faf565b6040516103979190613647565b60405180910390f35b3480156103ac57600080fd5b506103b5612041565b6040516103c29190613647565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed91906136a4565b612167565b005b34801561040057600080fd5b50610409612201565b6040516104169190613647565b60405180910390f35b610427612269565b005b34801561043557600080fd5b5061043e61239d565b60405161044b9190613647565b60405180910390f35b34801561046057600080fd5b50610469612b39565b6040516104769190613647565b60405180910390f35b34801561048b57600080fd5b50610494612b6a565b005b6007543410156104db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906137f8565b60405180910390fd5b60065461053034601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9690919063ffffffff16565b1115610571576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105689061388a565b60405180910390fd5b600a60009054906101000a900460ff166105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b7906138f6565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561064d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064490613962565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060025442106106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e0906139ce565b60405180910390fd5b600061070060045434612cac90919063ffffffff16565b9050600061071b600b54600854612cc290919063ffffffff16565b905081811015610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790613a3a565b60405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361089e57600d60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200184815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101555050600d80549050600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610951565b60006001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108ec9190613a89565b905061092683600d838154811061090657610905613abd565b5b906000526020600020906002020160010154612c9690919063ffffffff16565b600d828154811061093a57610939613abd565b5b906000526020600020906002020160010181905550505b61096682600b54612c9690919063ffffffff16565b600b8190555061098134600354612c9690919063ffffffff16565b6003819055506109d982600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9690919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a6e34601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9690919063ffffffff16565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6060600a60009054906101000a900460ff16610b60576040518060400160405280601981526020017f5468652073616c6520686173206e6f7420737461727465642e000000000000008152509050610c4f565b600254421015610c16576000610b8142600254612cc290919063ffffffff16565b90506000610b9a610e1083612cd890919063ffffffff16565b90506000610bd8603c610bca610bbb610e1086612cac90919063ffffffff16565b86612cc290919063ffffffff16565b612cd890919063ffffffff16565b9050610be382612cee565b610bec82612cee565b604051602001610bfd929190613c32565b6040516020818303038152906040529350505050610c4f565b6040518060400160405280601081526020017f5468652053616c65206973204f7665720000000000000000000000000000000081525090505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990613cc3565b60405180910390fd5b8060048190555050565b60606000610da4670de0b6b3a764000060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d559190613cf2565b602060405180830381865afa158015610d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d969190613d22565b612cd890919063ffffffff16565b9050610daf81612e54565b604051602001610dbf9190613dc1565b60405160208183030381529060405291505090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90613cc3565b60405180910390fd5b8060088190555050565b6060600254421115610eb7576040518060400160405280601181526020017f5468652073616c65206973206f7665722e00000000000000000000000000000081525090506113c2565b6000610eea670de0b6b3a7640000610edc600b54600854612cc290919063ffffffff16565b612cd890919063ffffffff16565b90506000610f0b670de0b6b3a7640000600b54612cd890919063ffffffff16565b90506000610f1882612cee565b90506000610f2584612cee565b9050600060c867ffffffffffffffff811115610f4457610f43613de3565b5b6040519080825280601f01601f191660200182016040528015610f765781602001600182028036833780820191505090505b50905060006040518060400160405280600b81526020017f4120746f74616c206f6620000000000000000000000000000000000000000000815250905060006040518060400160405280601b81526020017f20746f6b656e732068617665206265656e20736f6c6420616e64200000000000815250905060006040518060400160405280600a81526020017f20617265206c6566742e0000000000000000000000000000000000000000000081525090506000805b84518110156110b35784818151811061104757611046613abd565b5b602001015160f81c60f81b86838061105e90613e12565b94508151811061107157611070613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806110ab90613e12565b91505061102b565b5060005b875181101561113f578781815181106110d3576110d2613abd565b5b602001015160f81c60f81b8683806110ea90613e12565b9450815181106110fd576110fc613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061113790613e12565b9150506110b7565b5060005b83518110156111cb5783818151811061115f5761115e613abd565b5b602001015160f81c60f81b86838061117690613e12565b94508151811061118957611188613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806111c390613e12565b915050611143565b5060005b8651811015611257578681815181106111eb576111ea613abd565b5b602001015160f81c60f81b86838061120290613e12565b94508151811061121557611214613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061124f90613e12565b9150506111cf565b5060005b82518110156112e35782818151811061127757611276613abd565b5b602001015160f81c60f81b86838061128e90613e12565b9450815181106112a1576112a0613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806112db90613e12565b91505061125b565b5060008167ffffffffffffffff811115611300576112ff613de3565b5b6040519080825280601f01601f1916602001820160405280156113325781602001600182028036833780820191505090505b50905060005b828110156113b35786818151811061135357611352613abd565b5b602001015160f81c60f81b82828151811061137157611370613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113ab90613e12565b915050611338565b50809a50505050505050505050505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90613cc3565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900460ff166114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906138f6565b60405180910390fd5b600254421161152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290613ea6565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90613f38565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90613962565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613fa4565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016117c4929190613fc4565b6020604051808303816000875af11580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118079190614025565b611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d9061409e565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090613cc3565b60405180910390fd5b42600c819055506202a3004261199f91906140be565b6002819055506001600a60006101000a81548160ff021916908315150217905550565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6060600a60009054906101000a900460ff16611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a51906138f6565b60405180910390fd5b60025442101580611a6e5750600854600b54145b15611a9357604051806060016040528060318152602001614891603191399050611b5d565b6000611abe611aad600c5442612cc290919063ffffffff16565b600b54612cd890919063ffffffff16565b905060008103611ae9576040518060600160405280602d81526020016148c2602d9139915050611b5d565b6000611b1482611b06600b54600854612cc290919063ffffffff16565b612cd890919063ffffffff16565b90506000611b2d610e1083612cd890919063ffffffff16565b9050611b3881612e54565b604051602001611b48919061413e565b60405160208183030381529060405293505050505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790613cc3565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611c58573d6000803e3d6000fd5b50565b6060600082118015611c725750600d805490508211155b611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca8906141ac565b60405180910390fd5b6000600d600184611cc29190613a89565b81548110611cd357611cd2613abd565b5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611d1282612fb7565b905060025442118015611d6e5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d95576040518060600160405280602981526020016149146029913992505050611e3b565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008103611e0b5781604051602001611df2919061428a565b6040516020818303038152906040529350505050611e3b565b81611e1582612e54565b604051602001611e26929190614303565b60405160208183030381529060405293505050505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec790613cc3565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f38573d6000803e3d6000fd5b5050565b6060600254421115611f7c57611f56600d80549050612e54565b604051602001611f6691906143af565b6040516020818303038152906040529050611fac565b611f8a600d80549050612e54565b604051602001611f9a919061441d565b60405160208183030381529060405290505b90565b606060098054611fbe9061446e565b80601f0160208091040260200160405190810160405280929190818152602001828054611fea9061446e565b80156120375780601f1061200c57610100808354040283529160200191612037565b820191906000526020600020905b81548152906001019060200180831161201a57829003601f168201915b5050505050905090565b606060025442111561208a576040518060400160405280601181526020017f5468652073616c65206973206f7665722e0000000000000000000000000000008152509050612164565b6000600354036120b4576040518060600160405280602b81526020016147cd602b91399050612164565b60006120e06005546120d26064600354612cac90919063ffffffff16565b612cd890919063ffffffff16565b90506103e381101580156120f557506103e881105b15612138576040518060400160405280601f81526020017f5468652073616c65206973206174203130302520636f6d706c6574696f6e2e00815250915050612164565b61214181612e54565b6040516020016121519190614537565b6040516020818303038152906040529150505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90613cc3565b60405180910390fd5b8060058190555050565b606060025442111561224a576040518060400160405280601181526020017f5468652073616c65206973206f7665722e0000000000000000000000000000008152509050612266565b60405180608001604052806055815260200161493d6055913990505b90565b6007543410156122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a5906137f8565b60405180910390fd5b60065461230334601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9690919063ffffffff16565b1115612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b9061388a565b60405180910390fd5b600a60009054906101000a900460ff16612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a906138f6565b60405180910390fd5b61239b610496565b565b606060003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600254421180156124425750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612469576040518060600160405280602581526020016148ef6025913992505050612b36565b600081036124b0576040518060400160405280601c81526020017f596f7520686176656e27742073656e7420616e7920746f6b656e732e0000000081525092505050612b36565b60006124da6008546124cc606485612cac90919063ffffffff16565b612cd890919063ffffffff16565b90506000612526601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132c2565b905060006040518060400160405280601481526020017f596f75206172652072616e6b65642061732061200000000000000000000000008152509050600082905060006040518060400160405280601c81526020017f2e20596f752077696c6c2062652061626c6520746f20636c61696d2000000000815250905060006125c66125c1670de0b6b3a764000089612cd890919063ffffffff16565b612cee565b905060006040518060400160405280601281526020017f20746f6b656e732c2077686963682069732000000000000000000000000000008152509050600061260d88612cee565b905060006040518060c00160405280609981526020016147f8609991399050600061019067ffffffffffffffff81111561264a57612649613de3565b5b6040519080825280601f01601f19166020018201604052801561267c5781602001600182028036833780820191505090505b5090506000805b895181101561270b5789818151811061269f5761269e613abd565b5b602001015160f81c60f81b8383806126b690613e12565b9450815181106126c9576126c8613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061270390613e12565b915050612683565b5060005b88518110156127975788818151811061272b5761272a613abd565b5b602001015160f81c60f81b83838061274290613e12565b94508151811061275557612754613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061278f90613e12565b91505061270f565b5060005b8751811015612823578781815181106127b7576127b6613abd565b5b602001015160f81c60f81b8383806127ce90613e12565b9450815181106127e1576127e0613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061281b90613e12565b91505061279b565b5060005b86518110156128af5786818151811061284357612842613abd565b5b602001015160f81c60f81b83838061285a90613e12565b94508151811061286d5761286c613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806128a790613e12565b915050612827565b5060005b855181101561293b578581815181106128cf576128ce613abd565b5b602001015160f81c60f81b8383806128e690613e12565b9450815181106128f9576128f8613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061293390613e12565b9150506128b3565b5060005b84518110156129c75784818151811061295b5761295a613abd565b5b602001015160f81c60f81b83838061297290613e12565b94508151811061298557612984613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806129bf90613e12565b91505061293f565b5060005b8351811015612a53578381815181106129e7576129e6613abd565b5b602001015160f81c60f81b8383806129fe90613e12565b945081518110612a1157612a10613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612a4b90613e12565b9150506129cb565b5060008167ffffffffffffffff811115612a7057612a6f613de3565b5b6040519080825280601f01601f191660200182016040528015612aa25781602001600182028036833780820191505090505b50905060005b82811015612b2357838181518110612ac357612ac2613abd565b5b602001015160f81c60f81b828281518110612ae157612ae0613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612b1b90613e12565b915050612aa8565b50809e5050505050505050505050505050505b90565b6060612b46600454612e54565b604051602001612b5691906145d6565b604051602081830303815290604052905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190613cc3565b60405180910390fd5b600a60009054906101000a900460ff16612c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4090614644565b60405180910390fd5b6002544210612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c84906146b0565b60405180910390fd5b42600281905550565b60008183612ca491906140be565b905092915050565b60008183612cba91906146d0565b905092915050565b60008183612cd09190613a89565b905092915050565b60008183612ce69190614741565b905092915050565b606060008203612d35576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e4f565b600082905060005b60008214612d67578080612d5090613e12565b915050600a82612d609190614741565b9150612d3d565b60008167ffffffffffffffff811115612d8357612d82613de3565b5b6040519080825280601f01601f191660200182016040528015612db55781602001600182028036833780820191505090505b50905060008290508593505b60008414612e4757600a84612dd69190614772565b6030612de291906140be565b60f81b8282612df0906147a3565b92508281518110612e0457612e03613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84612e409190614741565b9350612dc1565b819450505050505b919050565b606060008203612e9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fb2565b600082905060005b60008214612ecd578080612eb690613e12565b915050600a82612ec69190614741565b9150612ea3565b60008167ffffffffffffffff811115612ee957612ee8613de3565b5b6040519080825280601f01601f191660200182016040528015612f1b5781602001600182028036833780820191505090505b50905060008290505b60008614612faa57600a86612f399190614772565b6030612f4591906140be565b60f81b8282612f53906147a3565b92508281518110612f6757612f66613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a86612fa39190614741565b9550612f24565b819450505050505b919050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b905060006040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506000602a67ffffffffffffffff81111561302e5761302d613de3565b5b6040519080825280601f01601f1916602001820160405280156130605781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061309857613097613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106130fc576130fb613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156132b65782600485600c8461314891906140be565b6020811061315957613158613abd565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff168151811061319857613197613abd565b5b602001015160f81c60f81b826002836131b191906146d0565b60026131bd91906140be565b815181106131ce576131cd613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f60f81b85600c8461321191906140be565b6020811061322257613221613abd565b5b1a60f81b1660f81c60ff168151811061323e5761323d613abd565b5b602001015160f81c60f81b8260028361325791906146d0565b600361326391906140be565b8151811061327457613273613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806132ae90613e12565b91505061312e565b50809350505050919050565b6060670429d069189e0000821015613311576040518060400160405280600581526020017f536c61766500000000000000000000000000000000000000000000000000000081525090506135b2565b6714d1120d7b16000082101561335e576040518060400160405280600481526020017f537761620000000000000000000000000000000000000000000000000000000081525090506135b2565b6729a2241af62c00008210156133ab576040518060400160405280600481526020017f436f6f6b0000000000000000000000000000000000000000000000000000000081525090506135b2565b673e733628714200008210156133f8576040518060400160405280600981526020017f426f6174737761696e000000000000000000000000000000000000000000000081525090506135b2565b674563918244f40000821015613445576040518060400160405280600981526020017f43617270656e746572000000000000000000000000000000000000000000000081525090506135b2565b6768155a43676e0000821015613492576040518060400160405280600881526020017f436861706c61696e00000000000000000000000000000000000000000000000081525090506135b2565b678ac7230489e800008210156134df576040518060400160405280600d81526020017f517561727465726d61737465720000000000000000000000000000000000000081525090506135b2565b67ad78ebc5ac62000082101561352c576040518060400160405280600d81526020017f4d61737465722047756e6e65720000000000000000000000000000000000000081525090506135b2565b67d02ab486cedc0000821015613579576040518060400160405280600a81526020017f5361696c6d61737465720000000000000000000000000000000000000000000081525090506135b2565b6040518060400160405280600a81526020017f4669727374204d6174650000000000000000000000000000000000000000000081525090505b919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135f15780820151818401526020810190506135d6565b60008484015250505050565b6000601f19601f8301169050919050565b6000613619826135b7565b61362381856135c2565b93506136338185602086016135d3565b61363c816135fd565b840191505092915050565b60006020820190508181036000830152613661818461360e565b905092915050565b600080fd5b6000819050919050565b6136818161366e565b811461368c57600080fd5b50565b60008135905061369e81613678565b92915050565b6000602082840312156136ba576136b9613669565b5b60006136c88482850161368f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136fc826136d1565b9050919050565b61370c816136f1565b811461371757600080fd5b50565b60008135905061372981613703565b92915050565b60006020828403121561374557613744613669565b5b60006137538482850161371a565b91505092915050565b6137658161366e565b82525050565b6000602082019050613780600083018461375c565b92915050565b7f302e312045544820697320746865206d696e696d756d2070757263686173652060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006137e26025836135c2565b91506137ed82613786565b604082019050919050565b60006020820190508181036000830152613811816137d5565b9050919050565b7f32302045544820697320746865206d6178696d756d20746f74616c20636f6e7460008201527f7269627574696f6e207065722061646472657373000000000000000000000000602082015250565b60006138746034836135c2565b915061387f82613818565b604082019050919050565b600060208201905081810360008301526138a381613867565b9050919050565b7f53616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b60006138e06018836135c2565b91506138eb826138aa565b602082019050919050565b6000602082019050818103600083015261390f816138d3565b9050919050565b7f5265656e7472616e742063616c6c206465746563746564210000000000000000600082015250565b600061394c6018836135c2565b915061395782613916565b602082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b60006139b8600a836135c2565b91506139c382613982565b602082019050919050565b600060208201905081810360008301526139e7816139ab565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73206c65667420746f20627579000000600082015250565b6000613a24601d836135c2565b9150613a2f826139ee565b602082019050919050565b60006020820190508181036000830152613a5381613a17565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a948261366e565b9150613a9f8361366e565b9250828203905081811115613ab757613ab6613a5a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b7f5468652073616c65206973206c6976652c2074686572652061726520686f757260008201527f733a200000000000000000000000000000000000000000000000000000000000602082015250565b6000613b53602383613aec565b9150613b5e82613af7565b602382019050919050565b6000613b74826135b7565b613b7e8185613aec565b9350613b8e8185602086016135d3565b80840191505092915050565b7f20616e6420000000000000000000000000000000000000000000000000000000600082015250565b6000613bd0600583613aec565b9150613bdb82613b9a565b600582019050919050565b7f206d696e75746573206c6566742e000000000000000000000000000000000000600082015250565b6000613c1c600e83613aec565b9150613c2782613be6565b600e82019050919050565b6000613c3d82613b46565b9150613c498285613b69565b9150613c5482613bc3565b9150613c608284613b69565b9150613c6b82613c0f565b91508190509392505050565b7f4e6f742074686520636f6e7472616374206f776e657200000000000000000000600082015250565b6000613cad6016836135c2565b9150613cb882613c77565b602082019050919050565b60006020820190508181036000830152613cdc81613ca0565b9050919050565b613cec816136f1565b82525050565b6000602082019050613d076000830184613ce3565b92915050565b600081519050613d1c81613678565b92915050565b600060208284031215613d3857613d37613669565b5b6000613d4684828501613d0d565b91505092915050565b7f4e756d626572206f6620746f6b656e73206c65667420696e2074686520636f6e60008201527f74726163743a2000000000000000000000000000000000000000000000000000602082015250565b6000613dab602783613aec565b9150613db682613d4f565b602782019050919050565b6000613dcc82613d9e565b9150613dd88284613b69565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000613e1d8261366e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e4f57613e4e613a5a565b5b600182019050919050565b7f53616c65206e6f7420656e646564000000000000000000000000000000000000600082015250565b6000613e90600e836135c2565b9150613e9b82613e5a565b602082019050919050565b60006020820190508181036000830152613ebf81613e83565b9050919050565b7f596f75206861766520616c726561647920636c61696d656420796f757220746f60008201527f6b656e7300000000000000000000000000000000000000000000000000000000602082015250565b6000613f226024836135c2565b9150613f2d82613ec6565b604082019050919050565b60006020820190508181036000830152613f5181613f15565b9050919050565b7f4e6f20746f6b656e7320746f20636c61696d0000000000000000000000000000600082015250565b6000613f8e6012836135c2565b9150613f9982613f58565b602082019050919050565b60006020820190508181036000830152613fbd81613f81565b9050919050565b6000604082019050613fd96000830185613ce3565b613fe6602083018461375c565b9392505050565b60008115159050919050565b61400281613fed565b811461400d57600080fd5b50565b60008151905061401f81613ff9565b92915050565b60006020828403121561403b5761403a613669565b5b600061404984828501614010565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b60006140886015836135c2565b915061409382614052565b602082019050919050565b600060208201905081810360008301526140b78161407b565b9050919050565b60006140c98261366e565b91506140d48361366e565b92508282019050808211156140ec576140eb613a5a565b5b92915050565b7f457374696d6174656420686f75727320746f20656e642073616c653a20000000600082015250565b6000614128601d83613aec565b9150614133826140f2565b601d82019050919050565b60006141498261411b565b91506141558284613b69565b915081905092915050565b7f496e76616c696420627579657249440000000000000000000000000000000000600082015250565b6000614196600f836135c2565b91506141a182614160565b602082019050919050565b600060208201905081810360008301526141c581614189565b9050919050565b7f416464726573733a200000000000000000000000000000000000000000000000600082015250565b6000614202600983613aec565b915061420d826141cc565b600982019050919050565b7f20686173206e6f742073656e7420616e792045544820746f2074686520636f6e60008201527f74726163742e0000000000000000000000000000000000000000000000000000602082015250565b6000614274602683613aec565b915061427f82614218565b602682019050919050565b6000614295826141f5565b91506142a18284613b69565b91506142ac82614267565b915081905092915050565b7f2068617320612062616c616e6365206f663a2000000000000000000000000000600082015250565b60006142ed601383613aec565b91506142f8826142b7565b601382019050919050565b600061430e826141f5565b915061431a8285613b69565b9150614325826142e0565b91506143318284613b69565b91508190509392505050565b7f5468652073616c65206973206f7665722e205468652066696e616c206e756d6260008201527f6572206f6620627579657273207761733a200000000000000000000000000000602082015250565b6000614399603283613aec565b91506143a48261433d565b603282019050919050565b60006143ba8261438c565b91506143c68284613b69565b915081905092915050565b7f54686520746f74616c206e756d626572206f66206275796572732069733a2000600082015250565b6000614407601f83613aec565b9150614412826143d1565b601f82019050919050565b6000614428826143fa565b91506144348284613b69565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061448657607f821691505b6020821081036144995761449861443f565b5b50919050565b7f5468652073616c65206973206174200000000000000000000000000000000000600082015250565b60006144d5600f83613aec565b91506144e08261449f565b600f82019050919050565b7f2070657263656e7461676520746f776172647320636f6d706c6574696f6e2e00600082015250565b6000614521601f83613aec565b915061452c826144eb565b601f82019050919050565b6000614542826144c8565b915061454e8284613b69565b915061455982614514565b915081905092915050565b7f546865206e756d626572206f6620746f6b656e7320706572204554482069733a60008201527f2000000000000000000000000000000000000000000000000000000000000000602082015250565b60006145c0602183613aec565b91506145cb82614564565b602182019050919050565b60006145e1826145b3565b91506145ed8284613b69565b915081905092915050565b7f53616c65206861736e2774207374617274656420796574000000000000000000600082015250565b600061462e6017836135c2565b9150614639826145f8565b602082019050919050565b6000602082019050818103600083015261465d81614621565b9050919050565b7f53616c652068617320616c726561647920656e64656400000000000000000000600082015250565b600061469a6016836135c2565b91506146a582614664565b602082019050919050565b600060208201905081810360008301526146c98161468d565b9050919050565b60006146db8261366e565b91506146e68361366e565b92508282026146f48161366e565b9150828204841483151761470b5761470a613a5a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474c8261366e565b91506147578361366e565b92508261476757614766614712565b5b828204905092915050565b600061477d8261366e565b91506147888361366e565b92508261479857614797614712565b5b828206905092915050565b60006147ae8261366e565b9150600082036147c1576147c0613a5a565b5b60018203905091905056fe5468652073616c65206861736e27742068616420616e79204554482073656e7420746f206974207965742e25206f662074686520746f74616c20746f6b656e732e2052656d656d6265722074686973206973206120726f756e64656420657374696d6174652e2055736520796f757220494420616e6420746f2074686520475f67657442616c616e63654279427579657249442066756e6374696f6e20616e6420696e70757420796f757220494420666f722074686520657861637420616d6f756e742e5468652073616c65206861732065697468657220656e646564206f7220616c6c20746f6b656e732061726520736f6c642e4e6f7420656e6f756768206461746120746f20657374696d6174652074696d6520746f20656e642073616c652e596f75206861766520616c726561647920636c61696d656420796f757220746f6b656e732e416464726573732068617320616c726561647920636c61696d656420746865697220746f6b656e732e546865206d696e696d756d2073656e64206c696d697420697320302e3120457468657265756d2e20546865206d6178696d756d20696e70757420697320323020457468657265756d2070657220616464726573732ea2646970667358221220de5b87b3ae770246d6e3df8b77ae33c3783fb6b8f6604ffb41609625cf981c0464736f6c6343000812003342756363616e65657220563320697320616e20616476616e636564206f6e2d636861696e207072697661637920746f6b656e207468617420616c6c6f777320757365727320746f2064697363726565746c792073656e64204255434320746f6b656e732061726f756e6420707269766174656c792e20425543432077696c6c20626520617661696c61626c6520617070726f78696d6174656c792061206d6f6e7468206166746572207468652073616c652068617320636f6e636c756465642e20494d504f5254414e54204c4547414c204e4f544943453a2054686973207472616e73616374696f6e206973206e6f7420617661696c61626c6520746f207265736964656e74732c20636974697a656e732c206f7220677265656e206361726420686f6c64657273206f662074686520556e6974656420537461746573206f6620416d6572696361206f7220616e79206f6620697473207465727269746f72696573206f7220706f7373657373696f6e732c20696e636c7564696e672050756572746f205269636f2c2074686520552e532e2056697267696e2049736c616e64732c20616e64204775616d2028636f6c6c6563746976656c792c2027555320506572736f6e7327292e205468652073657276696365206f66666572656420696e2074686973207472616e73616374696f6e20686173206e6f74206265656e207265676973746572656420756e6465722074686520556e6974656420537461746573205365637572697469657320416374206f6620313933332c20617320616d656e64656420287468652027536563757269746965732041637427292c206f7220616e792073746174652073656375726974696573206c6177732c20616e64206d6179206e6f74206265206f6666657265642c20736f6c642c20706c65646765642c206f72206f7468657277697365207472616e736665727265642077697468696e2074686520556e6974656420537461746573206f7220746f206f7220666f72207468652062656e65666974206f6620555320506572736f6e732c20657863657074207075727375616e7420746f20616e206578656d7074696f6e2066726f6d2c206f7220696e2061207472616e73616374696f6e206e6f74207375626a65637420746f2c2074686520726567697374726174696f6e20726571756972656d656e7473206f662074686520536563757269746965732041637420616e64206170706c696361626c652073746174652073656375726974696573206c6177732e20555320506572736f6e7320617265206e6f74207065726d697474656420746f20706172746963697061746520696e20746865207472616e73616374696f6e206f66666572656420686572652e2042792070617274696369706174696e6720696e2074686973207472616e73616374696f6e2c20796f7520726570726573656e7420616e642077617272616e74207468617420796f7520617265206e6f74206120555320506572736f6e20616e64207468617420796f7520617265206e6f742070757263686173696e67206f6e20626568616c66206f66206f7220666f72207468652062656e65666974206f66206120555320506572736f6e2e205468652042756363616e656572207465616d20646f6573206e6f742061636365707420616e7920726573706f6e736962696c697479206f72206c696162696c69747920666f7220616e792076696f6c6174696f6e206f66206c6f63616c20726567756c6174696f6e7320627920616e7920757365722e20416c6c207061727469636970616e7473206d75737420656e7375726520746865792061726520636f6d706c69616e742077697468207468656972206c6f63616c20726567756c6174696f6e7320616e64206c617773206265666f72652070617274696369706174696e672e20546865207573657220617373756d657320616c6c20726573706f6e736962696c69747920616e64207269736b206173736f63696174656420776974682074686973207472616e73616374696f6e2c20616e64207468652042756363616e656572207465616d2077696c6c206e6f742062652068656c64206c6961626c6520666f7220616e7920616374696f6e732c20636c61696d732c2064616d616765732c20636f7374732c206f72206c696162696c69746965732061726973696e672066726f6d206f722072656c6174656420746f207468697320636f6e74726163742e204974277320696d70657261746976652074686174207061727469636970616e747320636f6e647563742074686f726f75676820726573656172636820616e6420636f6e73756c742077697468206c6567616c2070726f66657373696f6e616c73207768657265206e65636573736172792e20427920696e746572616374696e672077697468207468697320636f6e74726163742c20796f7520616772656520746f207468657365207465726d732e204a6f696e2068747470733a2f2f742e6d652f42756363616e656572563320666f72206d6f726520696e666f726d6174696f6e2e

Deployed Bytecode

0x6080604052600436106101395760003560e01c80638cd34885116100ab578063a9b1cb7c1161006f578063a9b1cb7c146103cb578063b6d46539146103f4578063d0febe4c1461041f578063e16d5c2014610429578063f7af63cc14610454578063fadcdaa01461047f57610148565b80638cd34885146102e45780638f587ff3146103215780639994e1e61461034a5780639d40433714610375578063a8ed1241146103a057610148565b80634434edb5116100fd5780634434edb51461022057806348c54b9d146102495780635c040e57146102605780635ef5d035146102775780636b8d6610146102a257806376e8cce7146102cd57610148565b80630902323a1461014d578063168062af1461017857806317657c5d146101a157806325dba88f146101cc578063341cec8b146101f557610148565b3661014857610146610496565b005b600080fd5b34801561015957600080fd5b50610162610b0d565b60405161016f9190613647565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a91906136a4565b610c52565b005b3480156101ad57600080fd5b506101b6610cec565b6040516101c39190613647565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee91906136a4565b610dd4565b005b34801561020157600080fd5b5061020a610e6e565b6040516102179190613647565b60405180910390f35b34801561022c57600080fd5b506102476004803603810190610242919061372f565b6113c5565b005b34801561025557600080fd5b5061025e611498565b005b34801561026c57600080fd5b506102756118f9565b005b34801561028357600080fd5b5061028c6119c2565b604051610299919061376b565b60405180910390f35b3480156102ae57600080fd5b506102b7611a09565b6040516102c49190613647565b60405180910390f35b3480156102d957600080fd5b506102e2611b60565b005b3480156102f057600080fd5b5061030b600480360381019061030691906136a4565b611c5b565b6040516103189190613647565b60405180910390f35b34801561032d57600080fd5b50610348600480360381019061034391906136a4565b611e40565b005b34801561035657600080fd5b5061035f611f3c565b60405161036c9190613647565b60405180910390f35b34801561038157600080fd5b5061038a611faf565b6040516103979190613647565b60405180910390f35b3480156103ac57600080fd5b506103b5612041565b6040516103c29190613647565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed91906136a4565b612167565b005b34801561040057600080fd5b50610409612201565b6040516104169190613647565b60405180910390f35b610427612269565b005b34801561043557600080fd5b5061043e61239d565b60405161044b9190613647565b60405180910390f35b34801561046057600080fd5b50610469612b39565b6040516104769190613647565b60405180910390f35b34801561048b57600080fd5b50610494612b6a565b005b6007543410156104db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906137f8565b60405180910390fd5b60065461053034601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9690919063ffffffff16565b1115610571576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105689061388a565b60405180910390fd5b600a60009054906101000a900460ff166105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b7906138f6565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561064d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064490613962565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060025442106106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e0906139ce565b60405180910390fd5b600061070060045434612cac90919063ffffffff16565b9050600061071b600b54600854612cc290919063ffffffff16565b905081811015610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790613a3a565b60405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361089e57600d60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200184815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101555050600d80549050600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610951565b60006001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108ec9190613a89565b905061092683600d838154811061090657610905613abd565b5b906000526020600020906002020160010154612c9690919063ffffffff16565b600d828154811061093a57610939613abd565b5b906000526020600020906002020160010181905550505b61096682600b54612c9690919063ffffffff16565b600b8190555061098134600354612c9690919063ffffffff16565b6003819055506109d982600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9690919063ffffffff16565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a6e34601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9690919063ffffffff16565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6060600a60009054906101000a900460ff16610b60576040518060400160405280601981526020017f5468652073616c6520686173206e6f7420737461727465642e000000000000008152509050610c4f565b600254421015610c16576000610b8142600254612cc290919063ffffffff16565b90506000610b9a610e1083612cd890919063ffffffff16565b90506000610bd8603c610bca610bbb610e1086612cac90919063ffffffff16565b86612cc290919063ffffffff16565b612cd890919063ffffffff16565b9050610be382612cee565b610bec82612cee565b604051602001610bfd929190613c32565b6040516020818303038152906040529350505050610c4f565b6040518060400160405280601081526020017f5468652053616c65206973204f7665720000000000000000000000000000000081525090505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990613cc3565b60405180910390fd5b8060048190555050565b60606000610da4670de0b6b3a764000060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d559190613cf2565b602060405180830381865afa158015610d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d969190613d22565b612cd890919063ffffffff16565b9050610daf81612e54565b604051602001610dbf9190613dc1565b60405160208183030381529060405291505090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90613cc3565b60405180910390fd5b8060088190555050565b6060600254421115610eb7576040518060400160405280601181526020017f5468652073616c65206973206f7665722e00000000000000000000000000000081525090506113c2565b6000610eea670de0b6b3a7640000610edc600b54600854612cc290919063ffffffff16565b612cd890919063ffffffff16565b90506000610f0b670de0b6b3a7640000600b54612cd890919063ffffffff16565b90506000610f1882612cee565b90506000610f2584612cee565b9050600060c867ffffffffffffffff811115610f4457610f43613de3565b5b6040519080825280601f01601f191660200182016040528015610f765781602001600182028036833780820191505090505b50905060006040518060400160405280600b81526020017f4120746f74616c206f6620000000000000000000000000000000000000000000815250905060006040518060400160405280601b81526020017f20746f6b656e732068617665206265656e20736f6c6420616e64200000000000815250905060006040518060400160405280600a81526020017f20617265206c6566742e0000000000000000000000000000000000000000000081525090506000805b84518110156110b35784818151811061104757611046613abd565b5b602001015160f81c60f81b86838061105e90613e12565b94508151811061107157611070613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806110ab90613e12565b91505061102b565b5060005b875181101561113f578781815181106110d3576110d2613abd565b5b602001015160f81c60f81b8683806110ea90613e12565b9450815181106110fd576110fc613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061113790613e12565b9150506110b7565b5060005b83518110156111cb5783818151811061115f5761115e613abd565b5b602001015160f81c60f81b86838061117690613e12565b94508151811061118957611188613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806111c390613e12565b915050611143565b5060005b8651811015611257578681815181106111eb576111ea613abd565b5b602001015160f81c60f81b86838061120290613e12565b94508151811061121557611214613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061124f90613e12565b9150506111cf565b5060005b82518110156112e35782818151811061127757611276613abd565b5b602001015160f81c60f81b86838061128e90613e12565b9450815181106112a1576112a0613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806112db90613e12565b91505061125b565b5060008167ffffffffffffffff811115611300576112ff613de3565b5b6040519080825280601f01601f1916602001820160405280156113325781602001600182028036833780820191505090505b50905060005b828110156113b35786818151811061135357611352613abd565b5b602001015160f81c60f81b82828151811061137157611370613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113ab90613e12565b915050611338565b50809a50505050505050505050505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90613cc3565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900460ff166114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906138f6565b60405180910390fd5b600254421161152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290613ea6565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90613f38565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90613962565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613fa4565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016117c4929190613fc4565b6020604051808303816000875af11580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118079190614025565b611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d9061409e565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090613cc3565b60405180910390fd5b42600c819055506202a3004261199f91906140be565b6002819055506001600a60006101000a81548160ff021916908315150217905550565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6060600a60009054906101000a900460ff16611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a51906138f6565b60405180910390fd5b60025442101580611a6e5750600854600b54145b15611a9357604051806060016040528060318152602001614891603191399050611b5d565b6000611abe611aad600c5442612cc290919063ffffffff16565b600b54612cd890919063ffffffff16565b905060008103611ae9576040518060600160405280602d81526020016148c2602d9139915050611b5d565b6000611b1482611b06600b54600854612cc290919063ffffffff16565b612cd890919063ffffffff16565b90506000611b2d610e1083612cd890919063ffffffff16565b9050611b3881612e54565b604051602001611b48919061413e565b60405160208183030381529060405293505050505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790613cc3565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611c58573d6000803e3d6000fd5b50565b6060600082118015611c725750600d805490508211155b611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca8906141ac565b60405180910390fd5b6000600d600184611cc29190613a89565b81548110611cd357611cd2613abd565b5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611d1282612fb7565b905060025442118015611d6e5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d95576040518060600160405280602981526020016149146029913992505050611e3b565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008103611e0b5781604051602001611df2919061428a565b6040516020818303038152906040529350505050611e3b565b81611e1582612e54565b604051602001611e26929190614303565b60405160208183030381529060405293505050505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec790613cc3565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f38573d6000803e3d6000fd5b5050565b6060600254421115611f7c57611f56600d80549050612e54565b604051602001611f6691906143af565b6040516020818303038152906040529050611fac565b611f8a600d80549050612e54565b604051602001611f9a919061441d565b60405160208183030381529060405290505b90565b606060098054611fbe9061446e565b80601f0160208091040260200160405190810160405280929190818152602001828054611fea9061446e565b80156120375780601f1061200c57610100808354040283529160200191612037565b820191906000526020600020905b81548152906001019060200180831161201a57829003601f168201915b5050505050905090565b606060025442111561208a576040518060400160405280601181526020017f5468652073616c65206973206f7665722e0000000000000000000000000000008152509050612164565b6000600354036120b4576040518060600160405280602b81526020016147cd602b91399050612164565b60006120e06005546120d26064600354612cac90919063ffffffff16565b612cd890919063ffffffff16565b90506103e381101580156120f557506103e881105b15612138576040518060400160405280601f81526020017f5468652073616c65206973206174203130302520636f6d706c6574696f6e2e00815250915050612164565b61214181612e54565b6040516020016121519190614537565b6040516020818303038152906040529150505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90613cc3565b60405180910390fd5b8060058190555050565b606060025442111561224a576040518060400160405280601181526020017f5468652073616c65206973206f7665722e0000000000000000000000000000008152509050612266565b60405180608001604052806055815260200161493d6055913990505b90565b6007543410156122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a5906137f8565b60405180910390fd5b60065461230334601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9690919063ffffffff16565b1115612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b9061388a565b60405180910390fd5b600a60009054906101000a900460ff16612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a906138f6565b60405180910390fd5b61239b610496565b565b606060003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600254421180156124425750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612469576040518060600160405280602581526020016148ef6025913992505050612b36565b600081036124b0576040518060400160405280601c81526020017f596f7520686176656e27742073656e7420616e7920746f6b656e732e0000000081525092505050612b36565b60006124da6008546124cc606485612cac90919063ffffffff16565b612cd890919063ffffffff16565b90506000612526601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132c2565b905060006040518060400160405280601481526020017f596f75206172652072616e6b65642061732061200000000000000000000000008152509050600082905060006040518060400160405280601c81526020017f2e20596f752077696c6c2062652061626c6520746f20636c61696d2000000000815250905060006125c66125c1670de0b6b3a764000089612cd890919063ffffffff16565b612cee565b905060006040518060400160405280601281526020017f20746f6b656e732c2077686963682069732000000000000000000000000000008152509050600061260d88612cee565b905060006040518060c00160405280609981526020016147f8609991399050600061019067ffffffffffffffff81111561264a57612649613de3565b5b6040519080825280601f01601f19166020018201604052801561267c5781602001600182028036833780820191505090505b5090506000805b895181101561270b5789818151811061269f5761269e613abd565b5b602001015160f81c60f81b8383806126b690613e12565b9450815181106126c9576126c8613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061270390613e12565b915050612683565b5060005b88518110156127975788818151811061272b5761272a613abd565b5b602001015160f81c60f81b83838061274290613e12565b94508151811061275557612754613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061278f90613e12565b91505061270f565b5060005b8751811015612823578781815181106127b7576127b6613abd565b5b602001015160f81c60f81b8383806127ce90613e12565b9450815181106127e1576127e0613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061281b90613e12565b91505061279b565b5060005b86518110156128af5786818151811061284357612842613abd565b5b602001015160f81c60f81b83838061285a90613e12565b94508151811061286d5761286c613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806128a790613e12565b915050612827565b5060005b855181101561293b578581815181106128cf576128ce613abd565b5b602001015160f81c60f81b8383806128e690613e12565b9450815181106128f9576128f8613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061293390613e12565b9150506128b3565b5060005b84518110156129c75784818151811061295b5761295a613abd565b5b602001015160f81c60f81b83838061297290613e12565b94508151811061298557612984613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806129bf90613e12565b91505061293f565b5060005b8351811015612a53578381815181106129e7576129e6613abd565b5b602001015160f81c60f81b8383806129fe90613e12565b945081518110612a1157612a10613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612a4b90613e12565b9150506129cb565b5060008167ffffffffffffffff811115612a7057612a6f613de3565b5b6040519080825280601f01601f191660200182016040528015612aa25781602001600182028036833780820191505090505b50905060005b82811015612b2357838181518110612ac357612ac2613abd565b5b602001015160f81c60f81b828281518110612ae157612ae0613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612b1b90613e12565b915050612aa8565b50809e5050505050505050505050505050505b90565b6060612b46600454612e54565b604051602001612b5691906145d6565b604051602081830303815290604052905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190613cc3565b60405180910390fd5b600a60009054906101000a900460ff16612c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4090614644565b60405180910390fd5b6002544210612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c84906146b0565b60405180910390fd5b42600281905550565b60008183612ca491906140be565b905092915050565b60008183612cba91906146d0565b905092915050565b60008183612cd09190613a89565b905092915050565b60008183612ce69190614741565b905092915050565b606060008203612d35576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e4f565b600082905060005b60008214612d67578080612d5090613e12565b915050600a82612d609190614741565b9150612d3d565b60008167ffffffffffffffff811115612d8357612d82613de3565b5b6040519080825280601f01601f191660200182016040528015612db55781602001600182028036833780820191505090505b50905060008290508593505b60008414612e4757600a84612dd69190614772565b6030612de291906140be565b60f81b8282612df0906147a3565b92508281518110612e0457612e03613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84612e409190614741565b9350612dc1565b819450505050505b919050565b606060008203612e9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fb2565b600082905060005b60008214612ecd578080612eb690613e12565b915050600a82612ec69190614741565b9150612ea3565b60008167ffffffffffffffff811115612ee957612ee8613de3565b5b6040519080825280601f01601f191660200182016040528015612f1b5781602001600182028036833780820191505090505b50905060008290505b60008614612faa57600a86612f399190614772565b6030612f4591906140be565b60f81b8282612f53906147a3565b92508281518110612f6757612f66613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a86612fa39190614741565b9550612f24565b819450505050505b919050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b905060006040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506000602a67ffffffffffffffff81111561302e5761302d613de3565b5b6040519080825280601f01601f1916602001820160405280156130605781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061309857613097613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106130fc576130fb613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156132b65782600485600c8461314891906140be565b6020811061315957613158613abd565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff168151811061319857613197613abd565b5b602001015160f81c60f81b826002836131b191906146d0565b60026131bd91906140be565b815181106131ce576131cd613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f60f81b85600c8461321191906140be565b6020811061322257613221613abd565b5b1a60f81b1660f81c60ff168151811061323e5761323d613abd565b5b602001015160f81c60f81b8260028361325791906146d0565b600361326391906140be565b8151811061327457613273613abd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806132ae90613e12565b91505061312e565b50809350505050919050565b6060670429d069189e0000821015613311576040518060400160405280600581526020017f536c61766500000000000000000000000000000000000000000000000000000081525090506135b2565b6714d1120d7b16000082101561335e576040518060400160405280600481526020017f537761620000000000000000000000000000000000000000000000000000000081525090506135b2565b6729a2241af62c00008210156133ab576040518060400160405280600481526020017f436f6f6b0000000000000000000000000000000000000000000000000000000081525090506135b2565b673e733628714200008210156133f8576040518060400160405280600981526020017f426f6174737761696e000000000000000000000000000000000000000000000081525090506135b2565b674563918244f40000821015613445576040518060400160405280600981526020017f43617270656e746572000000000000000000000000000000000000000000000081525090506135b2565b6768155a43676e0000821015613492576040518060400160405280600881526020017f436861706c61696e00000000000000000000000000000000000000000000000081525090506135b2565b678ac7230489e800008210156134df576040518060400160405280600d81526020017f517561727465726d61737465720000000000000000000000000000000000000081525090506135b2565b67ad78ebc5ac62000082101561352c576040518060400160405280600d81526020017f4d61737465722047756e6e65720000000000000000000000000000000000000081525090506135b2565b67d02ab486cedc0000821015613579576040518060400160405280600a81526020017f5361696c6d61737465720000000000000000000000000000000000000000000081525090506135b2565b6040518060400160405280600a81526020017f4669727374204d6174650000000000000000000000000000000000000000000081525090505b919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135f15780820151818401526020810190506135d6565b60008484015250505050565b6000601f19601f8301169050919050565b6000613619826135b7565b61362381856135c2565b93506136338185602086016135d3565b61363c816135fd565b840191505092915050565b60006020820190508181036000830152613661818461360e565b905092915050565b600080fd5b6000819050919050565b6136818161366e565b811461368c57600080fd5b50565b60008135905061369e81613678565b92915050565b6000602082840312156136ba576136b9613669565b5b60006136c88482850161368f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136fc826136d1565b9050919050565b61370c816136f1565b811461371757600080fd5b50565b60008135905061372981613703565b92915050565b60006020828403121561374557613744613669565b5b60006137538482850161371a565b91505092915050565b6137658161366e565b82525050565b6000602082019050613780600083018461375c565b92915050565b7f302e312045544820697320746865206d696e696d756d2070757263686173652060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006137e26025836135c2565b91506137ed82613786565b604082019050919050565b60006020820190508181036000830152613811816137d5565b9050919050565b7f32302045544820697320746865206d6178696d756d20746f74616c20636f6e7460008201527f7269627574696f6e207065722061646472657373000000000000000000000000602082015250565b60006138746034836135c2565b915061387f82613818565b604082019050919050565b600060208201905081810360008301526138a381613867565b9050919050565b7f53616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b60006138e06018836135c2565b91506138eb826138aa565b602082019050919050565b6000602082019050818103600083015261390f816138d3565b9050919050565b7f5265656e7472616e742063616c6c206465746563746564210000000000000000600082015250565b600061394c6018836135c2565b915061395782613916565b602082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b60006139b8600a836135c2565b91506139c382613982565b602082019050919050565b600060208201905081810360008301526139e7816139ab565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73206c65667420746f20627579000000600082015250565b6000613a24601d836135c2565b9150613a2f826139ee565b602082019050919050565b60006020820190508181036000830152613a5381613a17565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a948261366e565b9150613a9f8361366e565b9250828203905081811115613ab757613ab6613a5a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b7f5468652073616c65206973206c6976652c2074686572652061726520686f757260008201527f733a200000000000000000000000000000000000000000000000000000000000602082015250565b6000613b53602383613aec565b9150613b5e82613af7565b602382019050919050565b6000613b74826135b7565b613b7e8185613aec565b9350613b8e8185602086016135d3565b80840191505092915050565b7f20616e6420000000000000000000000000000000000000000000000000000000600082015250565b6000613bd0600583613aec565b9150613bdb82613b9a565b600582019050919050565b7f206d696e75746573206c6566742e000000000000000000000000000000000000600082015250565b6000613c1c600e83613aec565b9150613c2782613be6565b600e82019050919050565b6000613c3d82613b46565b9150613c498285613b69565b9150613c5482613bc3565b9150613c608284613b69565b9150613c6b82613c0f565b91508190509392505050565b7f4e6f742074686520636f6e7472616374206f776e657200000000000000000000600082015250565b6000613cad6016836135c2565b9150613cb882613c77565b602082019050919050565b60006020820190508181036000830152613cdc81613ca0565b9050919050565b613cec816136f1565b82525050565b6000602082019050613d076000830184613ce3565b92915050565b600081519050613d1c81613678565b92915050565b600060208284031215613d3857613d37613669565b5b6000613d4684828501613d0d565b91505092915050565b7f4e756d626572206f6620746f6b656e73206c65667420696e2074686520636f6e60008201527f74726163743a2000000000000000000000000000000000000000000000000000602082015250565b6000613dab602783613aec565b9150613db682613d4f565b602782019050919050565b6000613dcc82613d9e565b9150613dd88284613b69565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000613e1d8261366e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e4f57613e4e613a5a565b5b600182019050919050565b7f53616c65206e6f7420656e646564000000000000000000000000000000000000600082015250565b6000613e90600e836135c2565b9150613e9b82613e5a565b602082019050919050565b60006020820190508181036000830152613ebf81613e83565b9050919050565b7f596f75206861766520616c726561647920636c61696d656420796f757220746f60008201527f6b656e7300000000000000000000000000000000000000000000000000000000602082015250565b6000613f226024836135c2565b9150613f2d82613ec6565b604082019050919050565b60006020820190508181036000830152613f5181613f15565b9050919050565b7f4e6f20746f6b656e7320746f20636c61696d0000000000000000000000000000600082015250565b6000613f8e6012836135c2565b9150613f9982613f58565b602082019050919050565b60006020820190508181036000830152613fbd81613f81565b9050919050565b6000604082019050613fd96000830185613ce3565b613fe6602083018461375c565b9392505050565b60008115159050919050565b61400281613fed565b811461400d57600080fd5b50565b60008151905061401f81613ff9565b92915050565b60006020828403121561403b5761403a613669565b5b600061404984828501614010565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b60006140886015836135c2565b915061409382614052565b602082019050919050565b600060208201905081810360008301526140b78161407b565b9050919050565b60006140c98261366e565b91506140d48361366e565b92508282019050808211156140ec576140eb613a5a565b5b92915050565b7f457374696d6174656420686f75727320746f20656e642073616c653a20000000600082015250565b6000614128601d83613aec565b9150614133826140f2565b601d82019050919050565b60006141498261411b565b91506141558284613b69565b915081905092915050565b7f496e76616c696420627579657249440000000000000000000000000000000000600082015250565b6000614196600f836135c2565b91506141a182614160565b602082019050919050565b600060208201905081810360008301526141c581614189565b9050919050565b7f416464726573733a200000000000000000000000000000000000000000000000600082015250565b6000614202600983613aec565b915061420d826141cc565b600982019050919050565b7f20686173206e6f742073656e7420616e792045544820746f2074686520636f6e60008201527f74726163742e0000000000000000000000000000000000000000000000000000602082015250565b6000614274602683613aec565b915061427f82614218565b602682019050919050565b6000614295826141f5565b91506142a18284613b69565b91506142ac82614267565b915081905092915050565b7f2068617320612062616c616e6365206f663a2000000000000000000000000000600082015250565b60006142ed601383613aec565b91506142f8826142b7565b601382019050919050565b600061430e826141f5565b915061431a8285613b69565b9150614325826142e0565b91506143318284613b69565b91508190509392505050565b7f5468652073616c65206973206f7665722e205468652066696e616c206e756d6260008201527f6572206f6620627579657273207761733a200000000000000000000000000000602082015250565b6000614399603283613aec565b91506143a48261433d565b603282019050919050565b60006143ba8261438c565b91506143c68284613b69565b915081905092915050565b7f54686520746f74616c206e756d626572206f66206275796572732069733a2000600082015250565b6000614407601f83613aec565b9150614412826143d1565b601f82019050919050565b6000614428826143fa565b91506144348284613b69565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061448657607f821691505b6020821081036144995761449861443f565b5b50919050565b7f5468652073616c65206973206174200000000000000000000000000000000000600082015250565b60006144d5600f83613aec565b91506144e08261449f565b600f82019050919050565b7f2070657263656e7461676520746f776172647320636f6d706c6574696f6e2e00600082015250565b6000614521601f83613aec565b915061452c826144eb565b601f82019050919050565b6000614542826144c8565b915061454e8284613b69565b915061455982614514565b915081905092915050565b7f546865206e756d626572206f6620746f6b656e7320706572204554482069733a60008201527f2000000000000000000000000000000000000000000000000000000000000000602082015250565b60006145c0602183613aec565b91506145cb82614564565b602182019050919050565b60006145e1826145b3565b91506145ed8284613b69565b915081905092915050565b7f53616c65206861736e2774207374617274656420796574000000000000000000600082015250565b600061462e6017836135c2565b9150614639826145f8565b602082019050919050565b6000602082019050818103600083015261465d81614621565b9050919050565b7f53616c652068617320616c726561647920656e64656400000000000000000000600082015250565b600061469a6016836135c2565b91506146a582614664565b602082019050919050565b600060208201905081810360008301526146c98161468d565b9050919050565b60006146db8261366e565b91506146e68361366e565b92508282026146f48161366e565b9150828204841483151761470b5761470a613a5a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474c8261366e565b91506147578361366e565b92508261476757614766614712565b5b828204905092915050565b600061477d8261366e565b91506147888361366e565b92508261479857614797614712565b5b828206905092915050565b60006147ae8261366e565b9150600082036147c1576147c0613a5a565b5b60018203905091905056fe5468652073616c65206861736e27742068616420616e79204554482073656e7420746f206974207965742e25206f662074686520746f74616c20746f6b656e732e2052656d656d6265722074686973206973206120726f756e64656420657374696d6174652e2055736520796f757220494420616e6420746f2074686520475f67657442616c616e63654279427579657249442066756e6374696f6e20616e6420696e70757420796f757220494420666f722074686520657861637420616d6f756e742e5468652073616c65206861732065697468657220656e646564206f7220616c6c20746f6b656e732061726520736f6c642e4e6f7420656e6f756768206461746120746f20657374696d6174652074696d6520746f20656e642073616c652e596f75206861766520616c726561647920636c61696d656420796f757220746f6b656e732e416464726573732068617320616c726561647920636c61696d656420746865697220746f6b656e732e546865206d696e696d756d2073656e64206c696d697420697320302e3120457468657265756d2e20546865206d6178696d756d20696e70757420697320323020457468657265756d2070657220616464726573732ea2646970667358221220de5b87b3ae770246d6e3df8b77ae33c3783fb6b8f6604ffb41609625cf981c0464736f6c63430008120033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.