ETH Price: $1,594.59 (-2.48%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve220704992025-03-18 1:31:2328 days ago1742261483IN
0x0A59F690...9FF368471
0 ETH0.000075732.52756996
Mint220704762025-03-18 1:26:4728 days ago1742261207IN
0x0A59F690...9FF368471
0 ETH0.000033050.44945613
Mint220704732025-03-18 1:26:1128 days ago1742261171IN
0x0A59F690...9FF368471
0 ETH0.000032520.44219207
Mint220704722025-03-18 1:25:5928 days ago1742261159IN
0x0A59F690...9FF368471
0 ETH0.000035420.48160728
Mint220704682025-03-18 1:25:1128 days ago1742261111IN
0x0A59F690...9FF368471
0 ETH0.000036860.50127403
Mint220704642025-03-18 1:24:2328 days ago1742261063IN
0x0A59F690...9FF368471
0 ETH0.00003730.50722187
Mint220704612025-03-18 1:23:4728 days ago1742261027IN
0x0A59F690...9FF368471
0 ETH0.000038470.52305836
Mint220704602025-03-18 1:23:3528 days ago1742261015IN
0x0A59F690...9FF368471
0 ETH0.000038830.52799025
Mint220704592025-03-18 1:23:2328 days ago1742261003IN
0x0A59F690...9FF368471
0 ETH0.000038990.53006087
Mint220704582025-03-18 1:23:1128 days ago1742260991IN
0x0A59F690...9FF368471
0 ETH0.000037930.51584751
Mint220704532025-03-18 1:22:1128 days ago1742260931IN
0x0A59F690...9FF368471
0 ETH0.000039660.53930487
Mint220704462025-03-18 1:20:4728 days ago1742260847IN
0x0A59F690...9FF368471
0 ETH0.000038140.51874358
Mint220704422025-03-18 1:19:5928 days ago1742260799IN
0x0A59F690...9FF368471
0 ETH0.000036960.50258557
Mint220704392025-03-18 1:19:2328 days ago1742260763IN
0x0A59F690...9FF368471
0 ETH0.000042520.5781064
Mint220704372025-03-18 1:18:5928 days ago1742260739IN
0x0A59F690...9FF368471
0 ETH0.000044230.60155237
Mint220704362025-03-18 1:18:4728 days ago1742260727IN
0x0A59F690...9FF368471
0 ETH0.000044930.61087102
Mint220704312025-03-18 1:17:4728 days ago1742260667IN
0x0A59F690...9FF368471
0 ETH0.000044960.6113435
Mint220704302025-03-18 1:17:3528 days ago1742260655IN
0x0A59F690...9FF368471
0 ETH0.000044760.60865613
Mint220704292025-03-18 1:17:2328 days ago1742260643IN
0x0A59F690...9FF368471
0 ETH0.00004390.59695016
Mint220704282025-03-18 1:17:1128 days ago1742260631IN
0x0A59F690...9FF368471
0 ETH0.000042170.57347158
Mint220704272025-03-18 1:16:5928 days ago1742260619IN
0x0A59F690...9FF368471
0 ETH0.000040450.55004159
Mint220704262025-03-18 1:16:4728 days ago1742260607IN
0x0A59F690...9FF368471
0 ETH0.000038740.52687667
Mint220704252025-03-18 1:16:3528 days ago1742260595IN
0x0A59F690...9FF368471
0 ETH0.000039990.54374225
Mint220704132025-03-18 1:14:1128 days ago1742260451IN
0x0A59F690...9FF368471
0 ETH0.000032580.44300126
Mint220704042025-03-18 1:12:2328 days ago1742260343IN
0x0A59F690...9FF368471
0 ETH0.000034210.46513225
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HashKittens

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-05
*/

/**
 *Submitted for verification at Etherscan.io on 2018-02-06
*/
pragma solidity ^0.8.6;



// ----------------------------------------------------------------------------

// 'Hashkittens' ERC20 contract

// Mineable ERC20 Token using Proof Of Work

//

// Symbol      : MEOWW

// Name        : Hashkittens

// Total supply: 21,000,000.00

// Decimals    : 8

//


// ----------------------------------------------------------------------------

 







// ----------------------------------------------------------------------------

// ERC Token Standard #20 Interface

// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md

// ----------------------------------------------------------------------------

abstract contract ERC20Interface {

    function totalSupply() external virtual view returns (uint);

    function balanceOf(address tokenOwner) external virtual view returns (uint balance);

    function allowance(address tokenOwner, address spender) external virtual view returns (uint remaining);

    function transfer(address to, uint tokens) external virtual returns (bool success);

    function approve(address spender, uint tokens) external virtual returns (bool success);

    function transferFrom(address from, address to, uint tokens) external virtual returns (bool success);

    function _approve(address owner, address spender, uint tokens) internal virtual returns (bool success);

    function _transfer(address from, address to, uint tokens) internal virtual returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);

    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

}

contract ERC20Standard is ERC20Interface {
 
    string public symbol;
    string public name;

    uint8 public decimals;

    mapping(address => uint) balances;   
    mapping(address => mapping(address => uint)) allowed;
 
    uint public override totalSupply; 

    constructor(string memory _symbol, string memory _name, uint8 _decimals){
        symbol = _symbol;
        name = _name;
        decimals = _decimals;
    }

    function _transfer(address from, address to, uint tokens) internal override returns (bool success) {

        balances[from] = balances[from] - (tokens);

        balances[to] = balances[to] + (tokens);

        emit Transfer(from, to, tokens);

        return true;
    }



    // ------------------------------------------------------------------------

    // Get the token balance for account `tokenOwner`

    // ------------------------------------------------------------------------

    function balanceOf(address tokenOwner) public override view returns (uint balance) {

        return balances[tokenOwner];

    }



    // ------------------------------------------------------------------------

    // Transfer the balance from token owner's account to `to` account

    // - Owner's account must have sufficient balance to transfer

    // - 0 value transfers are allowed

    // ------------------------------------------------------------------------

    function transfer(address to, uint tokens) public override returns (bool success) {

        return _transfer(msg.sender, to, tokens);

    }

  


    // ------------------------------------------------------------------------

    // Token owner can approve for `spender` to transferFrom(...) `tokens`

    // from the token owner's account

    //

    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md

    // recommends that there are no checks for the approval double-spend attack

    // as this should be implemented in user interfaces

    // ------------------------------------------------------------------------

    function approve(address spender, uint tokens) public override returns (bool success) {

        return _approve(msg.sender, spender,tokens);

    }

    function _approve(address owner, address spender, uint tokens) internal override returns (bool success) {

        allowed[owner][spender] = tokens;

        emit Approval(owner, spender, tokens);

        return true;

    } 


    // ------------------------------------------------------------------------

    // Transfer `tokens` from the `from` account to the `to` account

    //

    // The calling account must already have sufficient tokens approve(...)-d

    // for spending from the `from` account and

    // - From account must have sufficient balance to transfer

    // - Spender must have sufficient allowance to transfer

    // - 0 value transfers are allowed

    // ------------------------------------------------------------------------

    function transferFrom(address from, address to, uint tokens) public override returns (bool success) {
        
        allowed[from][msg.sender] = allowed[from][msg.sender] - (tokens);

        return _transfer(from,to,tokens);

    }


    // ------------------------------------------------------------------------

    // Returns the amount of tokens approved by the owner that can be

    // transferred to the spender's account

    // ------------------------------------------------------------------------

    function allowance(address tokenOwner, address spender) public override view returns (uint remaining) {

        return allowed[tokenOwner][spender];

    }


}




abstract contract EIP918Interface {

  function challengeNumber() virtual external returns (bytes32);
  function tokensMinted() virtual external returns (uint256);
  function miningTarget() virtual external returns (uint256);
  function maxSupplyForEra() virtual external returns (uint256);  
  function latestDifficultyPeriodStarted() virtual external returns (uint256);
  function rewardEra() virtual external returns (uint256);
  function epochCount() virtual external returns (uint256); 
  function getMiningReward() virtual external returns (uint256);

}


library ECRecover {
    /**
     * @notice Recover signer's address from a signed message
     * @dev Adapted from: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/65e4ffde586ec89af3b7e9140bdc9235d1254853/contracts/cryptography/ECDSA.sol
     * Modifications: Accept v, r, and s as separate arguments
     * @param digest    Keccak-256 hash digest of the signed message
     * @param v         v of the signature
     * @param r         r of the signature
     * @param s         s of the signature
     * @return Signer address
     */
    function recover(
        bytes32 digest,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (
            uint256(s) >
            0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0
        ) {
            revert("ECRecover: invalid signature 's' value");
        }

        if (v != 27 && v != 28) {
            revert("ECRecover: invalid signature 'v' value");
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(digest, v, r, s);
        require(signer != address(0), "ECRecover: invalid signature");

        return signer;
    }
}



contract EIP712Domain {
    /**
     * @dev EIP712 Domain Separator
     */
    bytes32 public DOMAIN_SEPARATOR;
}



/**
 * @title EIP712
 * @notice A library that provides EIP712 helper functions
 */
library EIP712 {
    /**
     * @notice Make EIP712 domain separator
     * @param name      Contract name
     * @param version   Contract version
     * @return Domain separator
     */
    function makeDomainSeparator(string memory name, string memory version)
        internal
        view
        returns (bytes32)
    {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        return
            keccak256(
                abi.encode(
                    // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")
                    0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f,
                    keccak256(bytes(name)),
                    keccak256(bytes(version)),
                    chainId,
                    address(this)
                )
            );
    }

    /**
     * @notice Recover signer's address from a EIP712 signature
     * @param domainSeparator   Domain separator
     * @param v                 v of the signature
     * @param r                 r of the signature
     * @param s                 s of the signature
     * @param typeHashAndData   Type hash concatenated with data
     * @return Signer's address
     */
    function recover(
        bytes32 domainSeparator,
        uint8 v,
        bytes32 r,
        bytes32 s,
        bytes memory typeHashAndData
    ) internal pure returns (address) {
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                keccak256(typeHashAndData)
            )
        );
        return ECRecover.recover(digest, v, r, s);
    }
 
}


/**
 * @title EIP-2612
 * @notice Provide internal implementation for gas-abstracted approvals
 */
abstract contract EIP2612 is EIP712Domain,ERC20Interface {
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)")
    bytes32
        public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    mapping(address => uint256) private _permitNonces;

    /**
     * @notice Nonces for permit
     * @param owner Token owner's address (Authorizer)
     * @return Next nonce
     */
    function nonces(address owner) external view returns (uint256) {
        return _permitNonces[owner];
    }

    /**
     * @notice Verify a signed approval permit and execute if valid
     * @param owner     Token owner's address (Authorizer)
     * @param spender   Spender's address
     * @param value     Amount of allowance
     * @param deadline  The time at which this expires (unix time)
     * @param v         v of the signature
     * @param r         r of the signature
     * @param s         s of the signature
     */
    function _permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        require(deadline >= block.timestamp, "Permit is expired");

        bytes memory data = abi.encode(
            PERMIT_TYPEHASH,
            owner,
            spender,
            value,
            _permitNonces[owner]++,
            deadline
        );
        require(
            EIP712.recover(DOMAIN_SEPARATOR, v, r, s, data) == owner,
            "EIP2612: invalid signature"
        );

        _approve(owner, spender, value);
    }

 
}





library ExtendedMath {


    //return the smaller of the two inputs (a or b)
    function limitLessThan(uint a, uint b) internal pure returns (uint c) {

        if(a > b) return b;

        return a;

    }
}






// ----------------------------------------------------------------------------

// ERC20 Token, with the addition of symbol, name and decimals and an

// initial fixed supply

// ----------------------------------------------------------------------------

contract HashKittens is ERC20Standard("MEOWW","HashKittens",8), EIP2612 {

     
    using ExtendedMath for uint;


    

     uint public latestDifficultyPeriodStarted;



    uint public epochCount;//number of 'blocks' mined


    uint public _BLOCKS_PER_READJUSTMENT = 1024;


    //a little number
    uint public  _MINIMUM_TARGET = 2**16;


      //a big number is easier ; just find a solution that is smaller
    //uint public  _MAXIMUM_TARGET = 2**224;  bitcoin uses 224
    uint public  _MAXIMUM_TARGET = 2**234;


    uint public miningTarget;

    bytes32 public challengeNumber;   //generate a new one when a new reward is minted
    uint public currentMiningReward;


    uint public rewardEra;
    uint public maxSupplyForEra;


    address public lastRewardTo;
    uint public lastRewardAmount;
    uint public lastRewardEthBlockNumber;

    

    

    uint public tokensMinted;

   // mapping(address => uint) balances;


   // mapping(address => mapping(address => uint)) allowed;


    event Mint(address indexed from, uint reward_amount, uint epochCount, bytes32 newChallengeNumber);

    // ------------------------------------------------------------------------

    // Constructor

    // ------------------------------------------------------------------------

    constructor() {

        DOMAIN_SEPARATOR = EIP712.makeDomainSeparator(name, "1");

        totalSupply = 21000000 * 10**uint(decimals);

        

        tokensMinted = 0;

        rewardEra = 0;
        currentMiningReward = getMiningReward() ;

        maxSupplyForEra = totalSupply - (totalSupply / ( 2**(rewardEra + 1)));

        miningTarget = _MAXIMUM_TARGET;

        latestDifficultyPeriodStarted = block.number;
 

        _startNewMiningEpoch();


        //The owner gets nothing! You must mine this ERC20 token
        //balances[owner] = _totalSupply;
        //Transfer(address(0), owner, _totalSupply);

    }

    function mint(uint256 nonce, bytes32) public returns (bool success) {

        return mintTo(nonce,msg.sender);

    }

    function mintTo(uint256 nonce, address minter) public returns (bool success) {
    
        //the PoW must contain work that includes a recent ethereum block hash (challenge number) and the msg.sender's address to prevent MITM attacks
        bytes32 digest = keccak256(abi.encodePacked(challengeNumber, minter, nonce ));

        
        //the digest must be smaller than the target
        if(uint256(digest) > miningTarget) revert();

        //only allow one reward for each block
        require(lastRewardEthBlockNumber != block.number);

        balances[minter] = balances[minter] + (currentMiningReward);
        emit Transfer(address(this), minter, currentMiningReward);

        tokensMinted = tokensMinted + currentMiningReward;

        //Cannot mint more tokens than there are
        require(tokensMinted <= maxSupplyForEra);

        //set readonly diagnostics data
        lastRewardTo = minter;
        lastRewardAmount = currentMiningReward;
        lastRewardEthBlockNumber = block.number;

        _startNewMiningEpoch();

        emit Mint(minter, currentMiningReward, epochCount, challengeNumber );        

        return true;

    }

     

    //a new 'block' to be mined
    function _startNewMiningEpoch() internal {

      //if max supply for the era will be exceeded next reward round then enter the new era before that happens

      //32 is the final reward era, almost all tokens minted
      //once the final era is reached, more tokens will not be given out because the assert function
      if(tokensMinted + (currentMiningReward) > maxSupplyForEra && rewardEra < 31)
      {
        rewardEra = rewardEra + 1;
        currentMiningReward = getMiningReward() ;
      }

      //set the next minted supply at which the era will change
      //total supply is 2100000000000000  because of 8 decimal places
      maxSupplyForEra = totalSupply - (totalSupply / ( 2**(rewardEra + 1)));

      epochCount = epochCount + 1;

      //every so often, readjust difficulty. Dont readjust when deploying
      if(epochCount % _BLOCKS_PER_READJUSTMENT == 0)
      {
        uint ethBlocksSinceLastDifficultyPeriod = block.number - latestDifficultyPeriodStarted;

        _reAdjustDifficulty(ethBlocksSinceLastDifficultyPeriod);
      }


      //make the latest ethereum block hash a part of the next challenge for PoW to prevent pre-mining future blocks
     challengeNumber = blockhash(block.number - 1);      



    }




    //https://en.bitcoin.it/wiki/Difficulty#What_is_the_formula_for_difficulty.3F
    //as of 2017 the bitcoin difficulty was up to 17 zeroes, it was only 8 in the early days

    //readjust the target by 5 percent
    function _reAdjustDifficulty(uint ethBlocksSinceLastDifficultyPeriod) internal {
 
        //assume 360 ethereum blocks per hour

        //target miners to spend 10 minutes to mine each 'block', about 60 ethereum blocks = one mining epoch
        
        uint targetEthBlocksPerDiffPeriod = _BLOCKS_PER_READJUSTMENT * 60; //should be 60 times slower than ethereum

        //if there were less eth blocks passed in time than expected
         if( ethBlocksSinceLastDifficultyPeriod < targetEthBlocksPerDiffPeriod )
        {
          uint excess_block_pct = (targetEthBlocksPerDiffPeriod * (100)) / ( ethBlocksSinceLastDifficultyPeriod );

          uint excess_block_pct_extra = (excess_block_pct - 100).limitLessThan(1000);
          // If there were 5% more blocks mined than expected then this is 5.  If there were 100% more blocks mined than expected then this is 100.

          //make it harder
          miningTarget = miningTarget - ((miningTarget / 2000) * excess_block_pct_extra);   //by up to 50 %
        }else{
          uint shortage_block_pct = (ethBlocksSinceLastDifficultyPeriod * (100)) / ( targetEthBlocksPerDiffPeriod );

          uint shortage_block_pct_extra = (shortage_block_pct - 100).limitLessThan(1000); //always between 0 and 1000

          //make it easier
          miningTarget = miningTarget + ((miningTarget / 2000) * shortage_block_pct_extra);   //by up to 50 %
        }



        latestDifficultyPeriodStarted = block.number;

        if(miningTarget < _MINIMUM_TARGET) //very difficult
        {
          miningTarget = _MINIMUM_TARGET;
        }

        if(miningTarget > _MAXIMUM_TARGET) //very easy
        {
          miningTarget = _MAXIMUM_TARGET;
        }
    }


    //this is a recent ethereum block hash, used to prevent pre-mining future blocks
    function getChallengeNumber() public view returns (bytes32) {
        return challengeNumber;
    }

    //the number of zeroes the digest of the PoW solution requires.  Auto adjusts
     function getMiningDifficulty() public view returns (uint) {
        return _MAXIMUM_TARGET / (miningTarget);
    }

    function getMiningTarget() public view returns (uint) {
       return miningTarget;
   }


    function minedSupply() public view returns (uint) {

        return tokensMinted;

    }


    //21m coins total
    //reward begins at 50 and is cut in half every reward era (as tokens are mined)
    function getMiningReward() public view returns (uint) {
        //once we get half way thru the coins, only get 25 per block

         //every reward era, the reward amount halves.

         return (50 * 10**uint(decimals) ) / ( 2**rewardEra ) ;

    }

    //help debug mining software
    function getMintDigest(uint256 nonce, address minter, bytes32 challenge_digest, bytes32 challenge_number) public view returns (bytes32 digesttest) {

      

        bytes32 digest  = keccak256(abi.encodePacked(challenge_number, minter, nonce ));

        return digest;

      }

        //help debug mining software
      function checkMintSolution(uint256 nonce, address minter, bytes32 challenge_digest, bytes32 challenge_number, uint testTarget) public view returns (bool success) {

          bytes32 digest  = keccak256(abi.encodePacked(challenge_number, minter, nonce ));
        
          if(uint256(digest) > testTarget) revert();

          return (digest == challenge_digest);

        }

   


  
  /**
     * @notice Update allowance with a signed permit
     * @param owner       Token owner's address (Authorizer)
     * @param spender     Spender's address
     * @param value       Amount of allowance
     * @param deadline    Expiration time, seconds since the epoch
     * @param v           v of the signature
     * @param r           r of the signature
     * @param s           s of the signature
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        _permit(owner, spender, value, deadline, v, r, s);
    }

      
  


    // ------------------------------------------------------------------------

    // Don't accept ETH

    // ------------------------------------------------------------------------

      receive() external payable virtual {

        revert();

    }


 
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epochCount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"newChallengeNumber","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BLOCKS_PER_READJUSTMENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_MAXIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_MINIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"challengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"},{"internalType":"uint256","name":"testTarget","type":"uint256"}],"name":"checkMintSolution","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMiningReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChallengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningDifficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"}],"name":"getMintDigest","outputs":[{"internalType":"bytes32","name":"digesttest","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardEthBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestDifficultyPeriodStarted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyForEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"minter","type":"address"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610400600a5562010000600b557d040000000000000000000000000000000000000000000000000000000000600c5534801561003e575f80fd5b506040518060400160405280600581526020017f4d454f57570000000000000000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f486173684b697474656e73000000000000000000000000000000000000000000815250600882600190816100bc919061079c565b5081600290816100cc919061079c565b508060035f6101000a81548160ff021916908360ff1602179055505050506101b7600280546100fa906105c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610126906105c6565b80156101715780601f1061014857610100808354040283529160200191610171565b820191905f5260205f20905b81548152906001019060200180831161015457829003601f168201915b50505050506040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525061026f60201b60201c565b5f8190555060035f9054906101000a900460ff1660ff16600a6101da91906109c7565b6301406f406101e99190610a11565b6006819055505f6015819055505f60108190555061020b6102da60201b60201c565b600f8190555060016010546102209190610a52565b600261022c91906109c7565b6006546102399190610ab2565b6006546102469190610ae2565b601181905550600c54600d819055504360088190555061026a61032360201b60201c565b610c35565b5f804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8480519060200120848051906020012083306040516020016102bb959493929190610bb4565b6040516020818303038152906040528051906020012091505092915050565b5f60105460026102ea91906109c7565b60035f9054906101000a900460ff1660ff16600a61030891906109c7565b60326103149190610a11565b61031e9190610ab2565b905090565b601154600f546015546103369190610a52565b1180156103455750601f601054105b156103745760016010546103599190610a52565b60108190555061036d6102da60201b60201c565b600f819055505b60016010546103839190610a52565b600261038f91906109c7565b60065461039c9190610ab2565b6006546103a99190610ae2565b60118190555060016009546103be9190610a52565b6009819055505f600a546009546103d59190610c05565b036103fc575f600854436103e99190610ae2565b90506103fa8161041260201b60201c565b505b6001436104099190610ae2565b40600e81905550565b5f603c600a546104229190610a11565b9050808210156104a0575f8260648361043b9190610a11565b6104459190610ab2565b90505f6104696103e860648461045b9190610ae2565b61054760201b90919060201c565b9050806107d0600d5461047c9190610ab2565b6104869190610a11565b600d546104939190610ae2565b600d819055505050610510565b5f816064846104af9190610a11565b6104b99190610ab2565b90505f6104dd6103e86064846104cf9190610ae2565b61054760201b90919060201c565b9050806107d0600d546104f09190610ab2565b6104fa9190610a11565b600d546105079190610a52565b600d8190555050505b43600881905550600b54600d54101561052d57600b54600d819055505b600c54600d54111561054357600c54600d819055505b5050565b5f818311156105585781905061055c565b8290505b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806105dd57607f821691505b6020821081036105f0576105ef610599565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610617565b61065c8683610617565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106a061069b61069684610674565b61067d565b610674565b9050919050565b5f819050919050565b6106b983610686565b6106cd6106c5826106a7565b848454610623565b825550505050565b5f90565b6106e16106d5565b6106ec8184846106b0565b505050565b5b8181101561070f576107045f826106d9565b6001810190506106f2565b5050565b601f82111561075457610725816105f6565b61072e84610608565b8101602085101561073d578190505b61075161074985610608565b8301826106f1565b50505b505050565b5f82821c905092915050565b5f6107745f1984600802610759565b1980831691505092915050565b5f61078c8383610765565b9150826002028217905092915050565b6107a582610562565b67ffffffffffffffff8111156107be576107bd61056c565b5b6107c882546105c6565b6107d3828285610713565b5f60209050601f831160018114610804575f84156107f2578287015190505b6107fc8582610781565b865550610863565b601f198416610812866105f6565b5f5b8281101561083957848901518255600182019150602085019450602081019050610814565b868310156108565784890151610852601f891682610765565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156108ed578086048111156108c9576108c861086b565b5b60018516156108d85780820291505b80810290506108e685610898565b94506108ad565b94509492505050565b5f8261090557600190506109c0565b81610912575f90506109c0565b8160018114610928576002811461093257610961565b60019150506109c0565b60ff8411156109445761094361086b565b5b8360020a91508482111561095b5761095a61086b565b5b506109c0565b5060208310610133831016604e8410600b84101617156109965782820a9050838111156109915761099061086b565b5b6109c0565b6109a384848460016108a4565b925090508184048111156109ba576109b961086b565b5b81810290505b9392505050565b5f6109d182610674565b91506109dc83610674565b9250610a097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846108f6565b905092915050565b5f610a1b82610674565b9150610a2683610674565b9250828202610a3481610674565b91508282048414831517610a4b57610a4a61086b565b5b5092915050565b5f610a5c82610674565b9150610a6783610674565b9250828201905080821115610a7f57610a7e61086b565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610abc82610674565b9150610ac783610674565b925082610ad757610ad6610a85565b5b828204905092915050565b5f610aec82610674565b9150610af783610674565b9250828203905081811115610b0f57610b0e61086b565b5b92915050565b5f819050919050565b5f610b38610b33610b2e84610b15565b61067d565b610674565b9050919050565b610b4881610b1e565b82525050565b5f819050919050565b610b6081610b4e565b82525050565b610b6f81610674565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b9e82610b75565b9050919050565b610bae81610b94565b82525050565b5f60a082019050610bc75f830188610b3f565b610bd46020830187610b57565b610be16040830186610b57565b610bee6060830185610b66565b610bfb6080830184610ba5565b9695505050505050565b5f610c0f82610674565b9150610c1a83610674565b925082610c2a57610c29610a85565b5b828206905092915050565b61257e80610c425f395ff3fe608060405260043610610212575f3560e01c80636fd396d611610117578063b5ade81b1161009f578063caa7a1581161006e578063caa7a158146107d7578063cb9ae70714610801578063d505accf1461082b578063dc6e9cf914610853578063dd62ed3e1461087d5761021b565b8063b5ade81b1461070b578063b723b34e14610735578063bafedcaa14610771578063bb6b888d1461079b5761021b565b806387a2a9d6116100e657806387a2a9d6146106275780638a769d35146106515780638ae0368b1461067b57806395d89b41146106a5578063a9059cbb146106cf5761021b565b80636fd396d61461055b57806370a08231146105855780637ecebe00146105c1578063829965cc146105fd5761021b565b8063313ce5671161019a5780634ef37628116101695780634ef37628146104775780634fa972e1146104a15780636386d2ac146104cb5780636b05e103146104f55780636de9f32b146105315761021b565b8063313ce567146103cf57806332e99708146103f95780633644e51514610423578063490203a71461044d5761021b565b80631801fbe5116101e15780631801fbe5146102d957806318160ddd1461031557806323b872dd1461033f5780632d38bf7a1461037b57806330adf81f146103a55761021b565b806306fdde031461021f578063095ea7b314610249578063163aa00d1461028557806317da485f146102af5761021b565b3661021b575f80fd5b5f80fd5b34801561022a575f80fd5b506102336108b9565b604051610240919061187c565b60405180910390f35b348015610254575f80fd5b5061026f600480360381019061026a919061192d565b610945565b60405161027c9190611985565b60405180910390f35b348015610290575f80fd5b50610299610959565b6040516102a691906119ad565b60405180910390f35b3480156102ba575f80fd5b506102c361095f565b6040516102d091906119ad565b60405180910390f35b3480156102e4575f80fd5b506102ff60048036038101906102fa91906119f9565b610975565b60405161030c9190611985565b60405180910390f35b348015610320575f80fd5b50610329610988565b60405161033691906119ad565b60405180910390f35b34801561034a575f80fd5b5061036560048036038101906103609190611a37565b61098e565b6040516103729190611985565b60405180910390f35b348015610386575f80fd5b5061038f610aa3565b60405161039c91906119ad565b60405180910390f35b3480156103b0575f80fd5b506103b9610aa9565b6040516103c69190611a96565b60405180910390f35b3480156103da575f80fd5b506103e3610acf565b6040516103f09190611aca565b60405180910390f35b348015610404575f80fd5b5061040d610ae1565b60405161041a91906119ad565b60405180910390f35b34801561042e575f80fd5b50610437610aea565b6040516104449190611a96565b60405180910390f35b348015610458575f80fd5b50610461610aef565b60405161046e91906119ad565b60405180910390f35b348015610482575f80fd5b5061048b610b38565b6040516104989190611a96565b60405180910390f35b3480156104ac575f80fd5b506104b5610b41565b6040516104c291906119ad565b60405180910390f35b3480156104d6575f80fd5b506104df610b47565b6040516104ec91906119ad565b60405180910390f35b348015610500575f80fd5b5061051b60048036038101906105169190611ae3565b610b50565b6040516105289190611985565b60405180910390f35b34801561053c575f80fd5b50610545610b9c565b60405161055291906119ad565b60405180910390f35b348015610566575f80fd5b5061056f610ba2565b60405161057c9190611b69565b60405180910390f35b348015610590575f80fd5b506105ab60048036038101906105a69190611b82565b610bc7565b6040516105b891906119ad565b60405180910390f35b3480156105cc575f80fd5b506105e760048036038101906105e29190611b82565b610c0d565b6040516105f491906119ad565b60405180910390f35b348015610608575f80fd5b50610611610c53565b60405161061e91906119ad565b60405180910390f35b348015610632575f80fd5b5061063b610c59565b60405161064891906119ad565b60405180910390f35b34801561065c575f80fd5b50610665610c5f565b60405161067291906119ad565b60405180910390f35b348015610686575f80fd5b5061068f610c65565b60405161069c9190611a96565b60405180910390f35b3480156106b0575f80fd5b506106b9610c6b565b6040516106c6919061187c565b60405180910390f35b3480156106da575f80fd5b506106f560048036038101906106f0919061192d565b610cf7565b6040516107029190611985565b60405180910390f35b348015610716575f80fd5b5061071f610d0b565b60405161072c91906119ad565b60405180910390f35b348015610740575f80fd5b5061075b60048036038101906107569190611bad565b610d11565b6040516107689190611985565b60405180910390f35b34801561077c575f80fd5b50610785610f33565b60405161079291906119ad565b60405180910390f35b3480156107a6575f80fd5b506107c160048036038101906107bc9190611beb565b610f39565b6040516107ce9190611a96565b60405180910390f35b3480156107e2575f80fd5b506107eb610f74565b6040516107f891906119ad565b60405180910390f35b34801561080c575f80fd5b50610815610f7a565b60405161082291906119ad565b60405180910390f35b348015610836575f80fd5b50610851600480360381019061084c9190611c79565b610f80565b005b34801561085e575f80fd5b50610867610f98565b60405161087491906119ad565b60405180910390f35b348015610888575f80fd5b506108a3600480360381019061089e9190611d16565b610f9e565b6040516108b091906119ad565b60405180910390f35b600280546108c690611d81565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290611d81565b801561093d5780601f106109145761010080835404028352916020019161093d565b820191905f5260205f20905b81548152906001019060200180831161092057829003601f168201915b505050505081565b5f610951338484611020565b905092915050565b60145481565b5f600d54600c546109709190611e0b565b905090565b5f6109808333610d11565b905092915050565b60065481565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a139190611e3b565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610a9a84848461110e565b90509392505050565b60105481565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95f1b81565b60035f9054906101000a900460ff1681565b5f600d54905090565b5f5481565b5f6010546002610aff9190611f9d565b60035f9054906101000a900460ff1660ff16600a610b1d9190611f9d565b6032610b299190611fe7565b610b339190611e0b565b905090565b5f600e54905090565b60115481565b5f601554905090565b5f80838688604051602001610b67939291906120ad565b60405160208183030381529060405280519060200120905082815f1c1115610b8d575f80fd5b84811491505095945050505050565b60155481565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60095481565b600c5481565b600d5481565b600e5481565b60018054610c7890611d81565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca490611d81565b8015610cef5780601f10610cc657610100808354040283529160200191610cef565b820191905f5260205f20905b815481529060010190602001808311610cd257829003601f168201915b505050505081565b5f610d0333848461110e565b905092915050565b600a5481565b5f80600e548385604051602001610d2a939291906120ad565b604051602081830303815290604052805190602001209050600d54815f1c1115610d52575f80fd5b4360145403610d5f575f80fd5b600f5460045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610daa91906120e9565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051610e4a91906119ad565b60405180910390a3600f54601554610e6291906120e9565b6015819055506011546015541115610e78575f80fd5b8260125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5460138190555043601481905550610ed0611293565b8273ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d600f54600954600e54604051610f209392919061211c565b60405180910390a2600191505092915050565b60135481565b5f80828587604051602001610f50939291906120ad565b60405160208183030381529060405280519060200120905080915050949350505050565b600f5481565b60085481565b610f8f87878787878787611376565b50505050505050565b600b5481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110fb91906119ad565b60405180910390a3600190509392505050565b5f8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111589190611e3b565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e291906120e9565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161128091906119ad565b60405180910390a3600190509392505050565b601154600f546015546112a691906120e9565b1180156112b55750601f601054105b156112de5760016010546112c991906120e9565b6010819055506112d7610aef565b600f819055505b60016010546112ed91906120e9565b60026112f99190611f9d565b6006546113069190611e0b565b6006546113139190611e3b565b601181905550600160095461132891906120e9565b6009819055505f600a5460095461133f9190612151565b03611360575f600854436113539190611e3b565b905061135e816114e9565b505b60014361136d9190611e3b565b40600e81905550565b428410156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906121cb565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95f1b88888860075f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061142d906121e9565b919050558960405160200161144796959493929190612230565b60405160208183030381529060405290508773ffffffffffffffffffffffffffffffffffffffff1661147d5f548686868661161e565b73ffffffffffffffffffffffffffffffffffffffff16146114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca906122d9565b60405180910390fd5b6114de888888611020565b505050505050505050565b5f603c600a546114f99190611fe7565b905080821015611577575f826064836115129190611fe7565b61151c9190611e0b565b90505f6115406103e86064846115329190611e3b565b61166a90919063ffffffff16565b9050806107d0600d546115539190611e0b565b61155d9190611fe7565b600d5461156a9190611e3b565b600d8190555050506115e7565b5f816064846115869190611fe7565b6115909190611e0b565b90505f6115b46103e86064846115a69190611e3b565b61166a90919063ffffffff16565b9050806107d0600d546115c79190611e0b565b6115d19190611fe7565b600d546115de91906120e9565b600d8190555050505b43600881905550600b54600d54101561160457600b54600d819055505b600c54600d54111561161a57600c54600d819055505b5050565b5f8086838051906020012060405160200161163a92919061234b565b60405160208183030381529060405280519060200120905061165e81878787611685565b91505095945050505050565b5f8183111561167b5781905061167f565b8290505b92915050565b5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0825f1c11156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906123f1565b60405180910390fd5b601b8460ff16141580156117035750601c8460ff1614155b15611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061247f565b60405180910390fd5b5f6001868686866040515f8152602001604052604051611766949392919061249d565b6020604051602081039080840390855afa158015611786573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f79061252a565b60405180910390fd5b80915050949350505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61184e8261180c565b6118588185611816565b9350611868818560208601611826565b61187181611834565b840191505092915050565b5f6020820190508181035f8301526118948184611844565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118c9826118a0565b9050919050565b6118d9816118bf565b81146118e3575f80fd5b50565b5f813590506118f4816118d0565b92915050565b5f819050919050565b61190c816118fa565b8114611916575f80fd5b50565b5f8135905061192781611903565b92915050565b5f80604083850312156119435761194261189c565b5b5f611950858286016118e6565b925050602061196185828601611919565b9150509250929050565b5f8115159050919050565b61197f8161196b565b82525050565b5f6020820190506119985f830184611976565b92915050565b6119a7816118fa565b82525050565b5f6020820190506119c05f83018461199e565b92915050565b5f819050919050565b6119d8816119c6565b81146119e2575f80fd5b50565b5f813590506119f3816119cf565b92915050565b5f8060408385031215611a0f57611a0e61189c565b5b5f611a1c85828601611919565b9250506020611a2d858286016119e5565b9150509250929050565b5f805f60608486031215611a4e57611a4d61189c565b5b5f611a5b868287016118e6565b9350506020611a6c868287016118e6565b9250506040611a7d86828701611919565b9150509250925092565b611a90816119c6565b82525050565b5f602082019050611aa95f830184611a87565b92915050565b5f60ff82169050919050565b611ac481611aaf565b82525050565b5f602082019050611add5f830184611abb565b92915050565b5f805f805f60a08688031215611afc57611afb61189c565b5b5f611b0988828901611919565b9550506020611b1a888289016118e6565b9450506040611b2b888289016119e5565b9350506060611b3c888289016119e5565b9250506080611b4d88828901611919565b9150509295509295909350565b611b63816118bf565b82525050565b5f602082019050611b7c5f830184611b5a565b92915050565b5f60208284031215611b9757611b9661189c565b5b5f611ba4848285016118e6565b91505092915050565b5f8060408385031215611bc357611bc261189c565b5b5f611bd085828601611919565b9250506020611be1858286016118e6565b9150509250929050565b5f805f8060808587031215611c0357611c0261189c565b5b5f611c1087828801611919565b9450506020611c21878288016118e6565b9350506040611c32878288016119e5565b9250506060611c43878288016119e5565b91505092959194509250565b611c5881611aaf565b8114611c62575f80fd5b50565b5f81359050611c7381611c4f565b92915050565b5f805f805f805f60e0888a031215611c9457611c9361189c565b5b5f611ca18a828b016118e6565b9750506020611cb28a828b016118e6565b9650506040611cc38a828b01611919565b9550506060611cd48a828b01611919565b9450506080611ce58a828b01611c65565b93505060a0611cf68a828b016119e5565b92505060c0611d078a828b016119e5565b91505092959891949750929550565b5f8060408385031215611d2c57611d2b61189c565b5b5f611d39858286016118e6565b9250506020611d4a858286016118e6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611d9857607f821691505b602082108103611dab57611daa611d54565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e15826118fa565b9150611e20836118fa565b925082611e3057611e2f611db1565b5b828204905092915050565b5f611e45826118fa565b9150611e50836118fa565b9250828203905081811115611e6857611e67611dde565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115611ec357808604811115611e9f57611e9e611dde565b5b6001851615611eae5780820291505b8081029050611ebc85611e6e565b9450611e83565b94509492505050565b5f82611edb5760019050611f96565b81611ee8575f9050611f96565b8160018114611efe5760028114611f0857611f37565b6001915050611f96565b60ff841115611f1a57611f19611dde565b5b8360020a915084821115611f3157611f30611dde565b5b50611f96565b5060208310610133831016604e8410600b8410161715611f6c5782820a905083811115611f6757611f66611dde565b5b611f96565b611f798484846001611e7a565b92509050818404811115611f9057611f8f611dde565b5b81810290505b9392505050565b5f611fa7826118fa565b9150611fb2836118fa565b9250611fdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611ecc565b905092915050565b5f611ff1826118fa565b9150611ffc836118fa565b925082820261200a816118fa565b9150828204841483151761202157612020611dde565b5b5092915050565b5f819050919050565b61204261203d826119c6565b612028565b82525050565b5f8160601b9050919050565b5f61205e82612048565b9050919050565b5f61206f82612054565b9050919050565b612087612082826118bf565b612065565b82525050565b5f819050919050565b6120a76120a2826118fa565b61208d565b82525050565b5f6120b88286612031565b6020820191506120c88285612076565b6014820191506120d88284612096565b602082019150819050949350505050565b5f6120f3826118fa565b91506120fe836118fa565b925082820190508082111561211657612115611dde565b5b92915050565b5f60608201905061212f5f83018661199e565b61213c602083018561199e565b6121496040830184611a87565b949350505050565b5f61215b826118fa565b9150612166836118fa565b92508261217657612175611db1565b5b828206905092915050565b7f5065726d697420697320657870697265640000000000000000000000000000005f82015250565b5f6121b5601183611816565b91506121c082612181565b602082019050919050565b5f6020820190508181035f8301526121e2816121a9565b9050919050565b5f6121f3826118fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361222557612224611dde565b5b600182019050919050565b5f60c0820190506122435f830189611a87565b6122506020830188611b5a565b61225d6040830187611b5a565b61226a606083018661199e565b612277608083018561199e565b61228460a083018461199e565b979650505050505050565b7f454950323631323a20696e76616c6964207369676e61747572650000000000005f82015250565b5f6122c3601a83611816565b91506122ce8261228f565b602082019050919050565b5f6020820190508181035f8301526122f0816122b7565b9050919050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f6123356002836122f7565b915061234082612301565b600282019050919050565b5f61235582612329565b91506123618285612031565b6020820191506123718284612031565b6020820191508190509392505050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265202773275f8201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b5f6123db602683611816565b91506123e682612381565b604082019050919050565b5f6020820190508181035f830152612408816123cf565b9050919050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265202776275f8201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b5f612469602683611816565b91506124748261240f565b604082019050919050565b5f6020820190508181035f8301526124968161245d565b9050919050565b5f6080820190506124b05f830187611a87565b6124bd6020830186611abb565b6124ca6040830185611a87565b6124d76060830184611a87565b95945050505050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265000000005f82015250565b5f612514601c83611816565b915061251f826124e0565b602082019050919050565b5f6020820190508181035f83015261254181612508565b905091905056fea264697066735822122079fd5812cd026289b10138c798028719c694cc1ed79fad95434cf4ed93c323a664736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610212575f3560e01c80636fd396d611610117578063b5ade81b1161009f578063caa7a1581161006e578063caa7a158146107d7578063cb9ae70714610801578063d505accf1461082b578063dc6e9cf914610853578063dd62ed3e1461087d5761021b565b8063b5ade81b1461070b578063b723b34e14610735578063bafedcaa14610771578063bb6b888d1461079b5761021b565b806387a2a9d6116100e657806387a2a9d6146106275780638a769d35146106515780638ae0368b1461067b57806395d89b41146106a5578063a9059cbb146106cf5761021b565b80636fd396d61461055b57806370a08231146105855780637ecebe00146105c1578063829965cc146105fd5761021b565b8063313ce5671161019a5780634ef37628116101695780634ef37628146104775780634fa972e1146104a15780636386d2ac146104cb5780636b05e103146104f55780636de9f32b146105315761021b565b8063313ce567146103cf57806332e99708146103f95780633644e51514610423578063490203a71461044d5761021b565b80631801fbe5116101e15780631801fbe5146102d957806318160ddd1461031557806323b872dd1461033f5780632d38bf7a1461037b57806330adf81f146103a55761021b565b806306fdde031461021f578063095ea7b314610249578063163aa00d1461028557806317da485f146102af5761021b565b3661021b575f80fd5b5f80fd5b34801561022a575f80fd5b506102336108b9565b604051610240919061187c565b60405180910390f35b348015610254575f80fd5b5061026f600480360381019061026a919061192d565b610945565b60405161027c9190611985565b60405180910390f35b348015610290575f80fd5b50610299610959565b6040516102a691906119ad565b60405180910390f35b3480156102ba575f80fd5b506102c361095f565b6040516102d091906119ad565b60405180910390f35b3480156102e4575f80fd5b506102ff60048036038101906102fa91906119f9565b610975565b60405161030c9190611985565b60405180910390f35b348015610320575f80fd5b50610329610988565b60405161033691906119ad565b60405180910390f35b34801561034a575f80fd5b5061036560048036038101906103609190611a37565b61098e565b6040516103729190611985565b60405180910390f35b348015610386575f80fd5b5061038f610aa3565b60405161039c91906119ad565b60405180910390f35b3480156103b0575f80fd5b506103b9610aa9565b6040516103c69190611a96565b60405180910390f35b3480156103da575f80fd5b506103e3610acf565b6040516103f09190611aca565b60405180910390f35b348015610404575f80fd5b5061040d610ae1565b60405161041a91906119ad565b60405180910390f35b34801561042e575f80fd5b50610437610aea565b6040516104449190611a96565b60405180910390f35b348015610458575f80fd5b50610461610aef565b60405161046e91906119ad565b60405180910390f35b348015610482575f80fd5b5061048b610b38565b6040516104989190611a96565b60405180910390f35b3480156104ac575f80fd5b506104b5610b41565b6040516104c291906119ad565b60405180910390f35b3480156104d6575f80fd5b506104df610b47565b6040516104ec91906119ad565b60405180910390f35b348015610500575f80fd5b5061051b60048036038101906105169190611ae3565b610b50565b6040516105289190611985565b60405180910390f35b34801561053c575f80fd5b50610545610b9c565b60405161055291906119ad565b60405180910390f35b348015610566575f80fd5b5061056f610ba2565b60405161057c9190611b69565b60405180910390f35b348015610590575f80fd5b506105ab60048036038101906105a69190611b82565b610bc7565b6040516105b891906119ad565b60405180910390f35b3480156105cc575f80fd5b506105e760048036038101906105e29190611b82565b610c0d565b6040516105f491906119ad565b60405180910390f35b348015610608575f80fd5b50610611610c53565b60405161061e91906119ad565b60405180910390f35b348015610632575f80fd5b5061063b610c59565b60405161064891906119ad565b60405180910390f35b34801561065c575f80fd5b50610665610c5f565b60405161067291906119ad565b60405180910390f35b348015610686575f80fd5b5061068f610c65565b60405161069c9190611a96565b60405180910390f35b3480156106b0575f80fd5b506106b9610c6b565b6040516106c6919061187c565b60405180910390f35b3480156106da575f80fd5b506106f560048036038101906106f0919061192d565b610cf7565b6040516107029190611985565b60405180910390f35b348015610716575f80fd5b5061071f610d0b565b60405161072c91906119ad565b60405180910390f35b348015610740575f80fd5b5061075b60048036038101906107569190611bad565b610d11565b6040516107689190611985565b60405180910390f35b34801561077c575f80fd5b50610785610f33565b60405161079291906119ad565b60405180910390f35b3480156107a6575f80fd5b506107c160048036038101906107bc9190611beb565b610f39565b6040516107ce9190611a96565b60405180910390f35b3480156107e2575f80fd5b506107eb610f74565b6040516107f891906119ad565b60405180910390f35b34801561080c575f80fd5b50610815610f7a565b60405161082291906119ad565b60405180910390f35b348015610836575f80fd5b50610851600480360381019061084c9190611c79565b610f80565b005b34801561085e575f80fd5b50610867610f98565b60405161087491906119ad565b60405180910390f35b348015610888575f80fd5b506108a3600480360381019061089e9190611d16565b610f9e565b6040516108b091906119ad565b60405180910390f35b600280546108c690611d81565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290611d81565b801561093d5780601f106109145761010080835404028352916020019161093d565b820191905f5260205f20905b81548152906001019060200180831161092057829003601f168201915b505050505081565b5f610951338484611020565b905092915050565b60145481565b5f600d54600c546109709190611e0b565b905090565b5f6109808333610d11565b905092915050565b60065481565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a139190611e3b565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610a9a84848461110e565b90509392505050565b60105481565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95f1b81565b60035f9054906101000a900460ff1681565b5f600d54905090565b5f5481565b5f6010546002610aff9190611f9d565b60035f9054906101000a900460ff1660ff16600a610b1d9190611f9d565b6032610b299190611fe7565b610b339190611e0b565b905090565b5f600e54905090565b60115481565b5f601554905090565b5f80838688604051602001610b67939291906120ad565b60405160208183030381529060405280519060200120905082815f1c1115610b8d575f80fd5b84811491505095945050505050565b60155481565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60095481565b600c5481565b600d5481565b600e5481565b60018054610c7890611d81565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca490611d81565b8015610cef5780601f10610cc657610100808354040283529160200191610cef565b820191905f5260205f20905b815481529060010190602001808311610cd257829003601f168201915b505050505081565b5f610d0333848461110e565b905092915050565b600a5481565b5f80600e548385604051602001610d2a939291906120ad565b604051602081830303815290604052805190602001209050600d54815f1c1115610d52575f80fd5b4360145403610d5f575f80fd5b600f5460045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610daa91906120e9565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051610e4a91906119ad565b60405180910390a3600f54601554610e6291906120e9565b6015819055506011546015541115610e78575f80fd5b8260125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5460138190555043601481905550610ed0611293565b8273ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d600f54600954600e54604051610f209392919061211c565b60405180910390a2600191505092915050565b60135481565b5f80828587604051602001610f50939291906120ad565b60405160208183030381529060405280519060200120905080915050949350505050565b600f5481565b60085481565b610f8f87878787878787611376565b50505050505050565b600b5481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110fb91906119ad565b60405180910390a3600190509392505050565b5f8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111589190611e3b565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e291906120e9565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161128091906119ad565b60405180910390a3600190509392505050565b601154600f546015546112a691906120e9565b1180156112b55750601f601054105b156112de5760016010546112c991906120e9565b6010819055506112d7610aef565b600f819055505b60016010546112ed91906120e9565b60026112f99190611f9d565b6006546113069190611e0b565b6006546113139190611e3b565b601181905550600160095461132891906120e9565b6009819055505f600a5460095461133f9190612151565b03611360575f600854436113539190611e3b565b905061135e816114e9565b505b60014361136d9190611e3b565b40600e81905550565b428410156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906121cb565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95f1b88888860075f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061142d906121e9565b919050558960405160200161144796959493929190612230565b60405160208183030381529060405290508773ffffffffffffffffffffffffffffffffffffffff1661147d5f548686868661161e565b73ffffffffffffffffffffffffffffffffffffffff16146114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca906122d9565b60405180910390fd5b6114de888888611020565b505050505050505050565b5f603c600a546114f99190611fe7565b905080821015611577575f826064836115129190611fe7565b61151c9190611e0b565b90505f6115406103e86064846115329190611e3b565b61166a90919063ffffffff16565b9050806107d0600d546115539190611e0b565b61155d9190611fe7565b600d5461156a9190611e3b565b600d8190555050506115e7565b5f816064846115869190611fe7565b6115909190611e0b565b90505f6115b46103e86064846115a69190611e3b565b61166a90919063ffffffff16565b9050806107d0600d546115c79190611e0b565b6115d19190611fe7565b600d546115de91906120e9565b600d8190555050505b43600881905550600b54600d54101561160457600b54600d819055505b600c54600d54111561161a57600c54600d819055505b5050565b5f8086838051906020012060405160200161163a92919061234b565b60405160208183030381529060405280519060200120905061165e81878787611685565b91505095945050505050565b5f8183111561167b5781905061167f565b8290505b92915050565b5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0825f1c11156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906123f1565b60405180910390fd5b601b8460ff16141580156117035750601c8460ff1614155b15611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061247f565b60405180910390fd5b5f6001868686866040515f8152602001604052604051611766949392919061249d565b6020604051602081039080840390855afa158015611786573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f79061252a565b60405180910390fd5b80915050949350505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61184e8261180c565b6118588185611816565b9350611868818560208601611826565b61187181611834565b840191505092915050565b5f6020820190508181035f8301526118948184611844565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118c9826118a0565b9050919050565b6118d9816118bf565b81146118e3575f80fd5b50565b5f813590506118f4816118d0565b92915050565b5f819050919050565b61190c816118fa565b8114611916575f80fd5b50565b5f8135905061192781611903565b92915050565b5f80604083850312156119435761194261189c565b5b5f611950858286016118e6565b925050602061196185828601611919565b9150509250929050565b5f8115159050919050565b61197f8161196b565b82525050565b5f6020820190506119985f830184611976565b92915050565b6119a7816118fa565b82525050565b5f6020820190506119c05f83018461199e565b92915050565b5f819050919050565b6119d8816119c6565b81146119e2575f80fd5b50565b5f813590506119f3816119cf565b92915050565b5f8060408385031215611a0f57611a0e61189c565b5b5f611a1c85828601611919565b9250506020611a2d858286016119e5565b9150509250929050565b5f805f60608486031215611a4e57611a4d61189c565b5b5f611a5b868287016118e6565b9350506020611a6c868287016118e6565b9250506040611a7d86828701611919565b9150509250925092565b611a90816119c6565b82525050565b5f602082019050611aa95f830184611a87565b92915050565b5f60ff82169050919050565b611ac481611aaf565b82525050565b5f602082019050611add5f830184611abb565b92915050565b5f805f805f60a08688031215611afc57611afb61189c565b5b5f611b0988828901611919565b9550506020611b1a888289016118e6565b9450506040611b2b888289016119e5565b9350506060611b3c888289016119e5565b9250506080611b4d88828901611919565b9150509295509295909350565b611b63816118bf565b82525050565b5f602082019050611b7c5f830184611b5a565b92915050565b5f60208284031215611b9757611b9661189c565b5b5f611ba4848285016118e6565b91505092915050565b5f8060408385031215611bc357611bc261189c565b5b5f611bd085828601611919565b9250506020611be1858286016118e6565b9150509250929050565b5f805f8060808587031215611c0357611c0261189c565b5b5f611c1087828801611919565b9450506020611c21878288016118e6565b9350506040611c32878288016119e5565b9250506060611c43878288016119e5565b91505092959194509250565b611c5881611aaf565b8114611c62575f80fd5b50565b5f81359050611c7381611c4f565b92915050565b5f805f805f805f60e0888a031215611c9457611c9361189c565b5b5f611ca18a828b016118e6565b9750506020611cb28a828b016118e6565b9650506040611cc38a828b01611919565b9550506060611cd48a828b01611919565b9450506080611ce58a828b01611c65565b93505060a0611cf68a828b016119e5565b92505060c0611d078a828b016119e5565b91505092959891949750929550565b5f8060408385031215611d2c57611d2b61189c565b5b5f611d39858286016118e6565b9250506020611d4a858286016118e6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611d9857607f821691505b602082108103611dab57611daa611d54565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e15826118fa565b9150611e20836118fa565b925082611e3057611e2f611db1565b5b828204905092915050565b5f611e45826118fa565b9150611e50836118fa565b9250828203905081811115611e6857611e67611dde565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115611ec357808604811115611e9f57611e9e611dde565b5b6001851615611eae5780820291505b8081029050611ebc85611e6e565b9450611e83565b94509492505050565b5f82611edb5760019050611f96565b81611ee8575f9050611f96565b8160018114611efe5760028114611f0857611f37565b6001915050611f96565b60ff841115611f1a57611f19611dde565b5b8360020a915084821115611f3157611f30611dde565b5b50611f96565b5060208310610133831016604e8410600b8410161715611f6c5782820a905083811115611f6757611f66611dde565b5b611f96565b611f798484846001611e7a565b92509050818404811115611f9057611f8f611dde565b5b81810290505b9392505050565b5f611fa7826118fa565b9150611fb2836118fa565b9250611fdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611ecc565b905092915050565b5f611ff1826118fa565b9150611ffc836118fa565b925082820261200a816118fa565b9150828204841483151761202157612020611dde565b5b5092915050565b5f819050919050565b61204261203d826119c6565b612028565b82525050565b5f8160601b9050919050565b5f61205e82612048565b9050919050565b5f61206f82612054565b9050919050565b612087612082826118bf565b612065565b82525050565b5f819050919050565b6120a76120a2826118fa565b61208d565b82525050565b5f6120b88286612031565b6020820191506120c88285612076565b6014820191506120d88284612096565b602082019150819050949350505050565b5f6120f3826118fa565b91506120fe836118fa565b925082820190508082111561211657612115611dde565b5b92915050565b5f60608201905061212f5f83018661199e565b61213c602083018561199e565b6121496040830184611a87565b949350505050565b5f61215b826118fa565b9150612166836118fa565b92508261217657612175611db1565b5b828206905092915050565b7f5065726d697420697320657870697265640000000000000000000000000000005f82015250565b5f6121b5601183611816565b91506121c082612181565b602082019050919050565b5f6020820190508181035f8301526121e2816121a9565b9050919050565b5f6121f3826118fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361222557612224611dde565b5b600182019050919050565b5f60c0820190506122435f830189611a87565b6122506020830188611b5a565b61225d6040830187611b5a565b61226a606083018661199e565b612277608083018561199e565b61228460a083018461199e565b979650505050505050565b7f454950323631323a20696e76616c6964207369676e61747572650000000000005f82015250565b5f6122c3601a83611816565b91506122ce8261228f565b602082019050919050565b5f6020820190508181035f8301526122f0816122b7565b9050919050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f6123356002836122f7565b915061234082612301565b600282019050919050565b5f61235582612329565b91506123618285612031565b6020820191506123718284612031565b6020820191508190509392505050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265202773275f8201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b5f6123db602683611816565b91506123e682612381565b604082019050919050565b5f6020820190508181035f830152612408816123cf565b9050919050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265202776275f8201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b5f612469602683611816565b91506124748261240f565b604082019050919050565b5f6020820190508181035f8301526124968161245d565b9050919050565b5f6080820190506124b05f830187611a87565b6124bd6020830186611abb565b6124ca6040830185611a87565b6124d76060830184611a87565b95945050505050565b7f45435265636f7665723a20696e76616c6964207369676e6174757265000000005f82015250565b5f612514601c83611816565b915061251f826124e0565b602082019050919050565b5f6020820190508181035f83015261254181612508565b905091905056fea264697066735822122079fd5812cd026289b10138c798028719c694cc1ed79fad95434cf4ed93c323a664736f6c634300081a0033

Deployed Bytecode Sourcemap

12624:9394:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21990:8;;;12624:9394;;;;1850:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3918:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13477:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19559:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14638:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2012:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4873:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13342:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10572:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1877:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19683:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8408:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19993:259;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19366:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13370:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19783:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20629:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13538:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13408:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2739:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10891:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12813:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13131:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13179:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13212:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1823:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3235:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12872:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14768:1190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13442:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20294:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13300:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12759:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21464:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12949:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5409:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1850:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3918:152::-;3990:12;4024:36;4033:10;4045:7;4053:6;4024:8;:36::i;:::-;4017:43;;3918:152;;;;:::o;13477:36::-;;;;:::o;19559:116::-;19611:4;19654:12;;19635:15;;:32;;;;:::i;:::-;19628:39;;19559:116;:::o;14638:122::-;14692:12;14726:24;14733:5;14739:10;14726:6;:24::i;:::-;14719:31;;14638:122;;;;:::o;2012:32::-;;;;:::o;4873:240::-;4959:12;5051:6;5022:7;:13;5030:4;5022:13;;;;;;;;;;;;;;;:25;5036:10;5022:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;4994:7;:13;5002:4;4994:13;;;;;;;;;;;;;;;:25;5008:10;4994:25;;;;;;;;;;;;;;;:64;;;;5078:25;5088:4;5093:2;5096:6;5078:9;:25::i;:::-;5071:32;;4873:240;;;;;:::o;13342:21::-;;;;:::o;10572:117::-;10623:66;10572:117;;;:::o;1877:21::-;;;;;;;;;;;;;:::o;19683:90::-;19731:4;19754:12;;19747:19;;19683:90;:::o;8408:31::-;;;;:::o;19993:259::-;20041:4;20230:9;;20227:1;:12;;;;:::i;:::-;20211:8;;;;;;;;;;;20206:14;;20202:2;:18;;;;:::i;:::-;20197:2;:23;;;;:::i;:::-;20196:45;;;;:::i;:::-;20189:52;;19993:259;:::o;19366:101::-;19417:7;19444:15;;19437:22;;19366:101;:::o;13370:27::-;;;;:::o;19783:92::-;19827:4;19853:12;;19846:19;;19783:92;:::o;20629:384::-;20777:12;20806:14;20851:16;20869:6;20877:5;20834:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20824:61;;;;;;20806:79;;20929:10;20919:6;20911:15;;:28;20908:41;;;20941:8;;;20908:41;20982:16;20972:6;:26;20964:35;;;20629:384;;;;;;;:::o;13538:24::-;;;;:::o;13408:27::-;;;;;;;;;;;;;:::o;2739:133::-;2808:12;2842:8;:20;2851:10;2842:20;;;;;;;;;;;;;;;;2835:27;;2739:133;;;:::o;10891:109::-;10945:7;10972:13;:20;10986:5;10972:20;;;;;;;;;;;;;;;;10965:27;;10891:109;;;:::o;12813:22::-;;;;:::o;13131:37::-;;;;:::o;13179:24::-;;;;:::o;13212:30::-;;;;:::o;1823:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3235:145::-;3303:12;3337:33;3347:10;3359:2;3363:6;3337:9;:33::i;:::-;3330:40;;3235:145;;;;:::o;12872:43::-;;;;:::o;14768:1190::-;14831:12;15014:14;15058:15;;15075:6;15083:5;15041:49;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15031:60;;;;;;15014:77;;15189:12;;15179:6;15171:15;;:30;15168:43;;;15203:8;;;15168:43;15308:12;15280:24;;:40;15272:49;;;;;;15373:19;;15353:8;:16;15362:6;15353:16;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;15334:8;:16;15343:6;15334:16;;;;;;;;;;;;;;;:59;;;;15433:6;15409:52;;15426:4;15409:52;;;15441:19;;15409:52;;;;;;:::i;:::-;;;;;;;;15504:19;;15489:12;;:34;;;;:::i;:::-;15474:12;:49;;;;15610:15;;15594:12;;:31;;15586:40;;;;;;15695:6;15680:12;;:21;;;;;;;;;;;;;;;;;;15731:19;;15712:16;:38;;;;15788:12;15761:24;:39;;;;15813:22;:20;:22::i;:::-;15858:6;15853:63;;;15866:19;;15887:10;;15899:15;;15853:63;;;;;;;;:::i;:::-;;;;;;;;15944:4;15937:11;;;14768:1190;;;;:::o;13442:28::-;;;;:::o;20294:287::-;20421:18;20464:14;20509:16;20527:6;20535:5;20492:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20482:61;;;;;;20464:79;;20563:6;20556:13;;;20294:287;;;;;;:::o;13300:31::-;;;;:::o;12759:41::-;;;;:::o;21464:259::-;21666:49;21674:5;21681:7;21690:5;21697:8;21707:1;21710;21713;21666:7;:49::i;:::-;21464:259;;;;;;;:::o;12949:36::-;;;;:::o;5409:160::-;5495:14;5531:7;:19;5539:10;5531:19;;;;;;;;;;;;;;;:28;5551:7;5531:28;;;;;;;;;;;;;;;;5524:35;;5409:160;;;;:::o;4078:233::-;4168:12;4221:6;4195:7;:14;4203:5;4195:14;;;;;;;;;;;;;;;:23;4210:7;4195:23;;;;;;;;;;;;;;;:32;;;;4261:7;4245:32;;4254:5;4245:32;;;4270:6;4245:32;;;;;;:::i;:::-;;;;;;;;4297:4;4290:11;;4078:233;;;;;:::o;2223:281::-;2308:12;2370:6;2352:8;:14;2361:4;2352:14;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;2335:8;:14;2344:4;2335:14;;;;;;;;;;;;;;;:42;;;;2421:6;2405:8;:12;2414:2;2405:12;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;2390:8;:12;2399:2;2390:12;;;;;;;;;;;;;;;:38;;;;2461:2;2446:26;;2455:4;2446:26;;;2465:6;2446:26;;;;;;:::i;:::-;;;;;;;;2492:4;2485:11;;2223:281;;;;;:::o;16008:1274::-;16381:15;;16358:19;;16342:12;;:36;;;;:::i;:::-;:54;:72;;;;;16412:2;16400:9;;:14;16342:72;16339:181;;;16458:1;16446:9;;:13;;;;:::i;:::-;16434:9;:25;;;;16492:17;:15;:17::i;:::-;16470:19;:39;;;;16339:181;16731:1;16719:9;;:13;;;;:::i;:::-;16715:1;:18;;;;:::i;:::-;16699:11;;:35;;;;:::i;:::-;16684:11;;:51;;;;:::i;:::-;16666:15;:69;;;;16772:1;16759:10;;:14;;;;:::i;:::-;16746:10;:27;;;;16903:1;16875:24;;16862:10;;:37;;;;:::i;:::-;:42;16859:229;;16924:39;16981:29;;16966:12;:44;;;;:::i;:::-;16924:86;;17023:55;17043:34;17023:19;:55::i;:::-;16913:175;16859:229;17260:1;17245:12;:16;;;;:::i;:::-;17235:27;17217:15;:45;;;;16008:1274::o;11443:661::-;11666:15;11654:8;:27;;11646:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11716:17;10623:66;11761:15;;11791:5;11811:7;11833:5;11853:13;:20;11867:5;11853:20;;;;;;;;;;;;;;;;:22;;;;;;;;;:::i;:::-;;;;;11890:8;11736:173;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11716:193;;11993:5;11942:56;;:47;11957:16;;11975:1;11978;11981;11984:4;11942:14;:47::i;:::-;:56;;;11920:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;12065:31;12074:5;12081:7;12090:5;12065:8;:31::i;:::-;;11635:469;11443:661;;;;;;;:::o;17515:1755::-;17778:33;17841:2;17814:24;;:29;;;;:::i;:::-;17778:65;;18010:28;17973:34;:65;17969:982;;;18063:21;18130:34;18120:3;18088:28;:36;;;;:::i;:::-;18087:79;;;;:::i;:::-;18063:103;;18181:27;18211:44;18250:4;18231:3;18212:16;:22;;;;:::i;:::-;18211:38;;:44;;;;:::i;:::-;18181:74;;18502:22;18494:4;18479:12;;:19;;;;:::i;:::-;18478:46;;;;:::i;:::-;18462:12;;:63;;;;:::i;:::-;18447:12;:78;;;;18050:505;;17969:982;;;18572:23;18647:28;18637:3;18599:34;:42;;;;:::i;:::-;18598:79;;;;:::i;:::-;18572:105;;18692:29;18724:46;18765:4;18746:3;18725:18;:24;;;;:::i;:::-;18724:40;;:46;;;;:::i;:::-;18692:78;;18896:24;18888:4;18873:12;;:19;;;;:::i;:::-;18872:48;;;;:::i;:::-;18856:12;;:65;;;;:::i;:::-;18841:12;:80;;;;18559:392;;17969:982;18999:12;18967:29;:44;;;;19042:15;;19027:12;;:30;19024:116;;;19113:15;;19098:12;:30;;;;19024:116;19170:15;;19155:12;;:30;19152:111;;;19236:15;;19221:12;:30;;;;19152:111;17594:1676;17515:1755;:::o;9840:449::-;10018:7;10038:14;10143:15;10187;10177:26;;;;;;10079:139;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10055:174;;;;;;10038:191;;10247:34;10265:6;10273:1;10276;10279;10247:17;:34::i;:::-;10240:41;;;9840:449;;;;;;;:::o;12209:132::-;12271:6;12299:1;12295;:5;12292:18;;;12309:1;12302:8;;;;12292:18;12330:1;12323:8;;12209:132;;;;;:::o;6726:1587::-;6856:7;7803:66;7785:1;7777:10;;:92;7759:197;;;7896:48;;;;;;;;;;:::i;:::-;;;;;;;;7759:197;7977:2;7972:1;:7;;;;:18;;;;;7988:2;7983:1;:7;;;;7972:18;7968:99;;;8007:48;;;;;;;;;;:::i;:::-;;;;;;;;7968:99;8164:14;8181:26;8191:6;8199:1;8202;8205;8181:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8164:43;;8244:1;8226:20;;:6;:20;;;8218:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;8299:6;8292:13;;;6726:1587;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:77::-;3728:7;3757:5;3746:16;;3691:77;;;:::o;3774:122::-;3847:24;3865:5;3847:24;:::i;:::-;3840:5;3837:35;3827:63;;3886:1;3883;3876:12;3827:63;3774:122;:::o;3902:139::-;3948:5;3986:6;3973:20;3964:29;;4002:33;4029:5;4002:33;:::i;:::-;3902:139;;;;:::o;4047:474::-;4115:6;4123;4172:2;4160:9;4151:7;4147:23;4143:32;4140:119;;;4178:79;;:::i;:::-;4140:119;4298:1;4323:53;4368:7;4359:6;4348:9;4344:22;4323:53;:::i;:::-;4313:63;;4269:117;4425:2;4451:53;4496:7;4487:6;4476:9;4472:22;4451:53;:::i;:::-;4441:63;;4396:118;4047:474;;;;;:::o;4527:619::-;4604:6;4612;4620;4669:2;4657:9;4648:7;4644:23;4640:32;4637:119;;;4675:79;;:::i;:::-;4637:119;4795:1;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4766:117;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;5050:2;5076:53;5121:7;5112:6;5101:9;5097:22;5076:53;:::i;:::-;5066:63;;5021:118;4527:619;;;;;:::o;5152:118::-;5239:24;5257:5;5239:24;:::i;:::-;5234:3;5227:37;5152:118;;:::o;5276:222::-;5369:4;5407:2;5396:9;5392:18;5384:26;;5420:71;5488:1;5477:9;5473:17;5464:6;5420:71;:::i;:::-;5276:222;;;;:::o;5504:86::-;5539:7;5579:4;5572:5;5568:16;5557:27;;5504:86;;;:::o;5596:112::-;5679:22;5695:5;5679:22;:::i;:::-;5674:3;5667:35;5596:112;;:::o;5714:214::-;5803:4;5841:2;5830:9;5826:18;5818:26;;5854:67;5918:1;5907:9;5903:17;5894:6;5854:67;:::i;:::-;5714:214;;;;:::o;5934:911::-;6029:6;6037;6045;6053;6061;6110:3;6098:9;6089:7;6085:23;6081:33;6078:120;;;6117:79;;:::i;:::-;6078:120;6237:1;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6208:117;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;6492:2;6518:53;6563:7;6554:6;6543:9;6539:22;6518:53;:::i;:::-;6508:63;;6463:118;6620:2;6646:53;6691:7;6682:6;6671:9;6667:22;6646:53;:::i;:::-;6636:63;;6591:118;6748:3;6775:53;6820:7;6811:6;6800:9;6796:22;6775:53;:::i;:::-;6765:63;;6719:119;5934:911;;;;;;;;:::o;6851:118::-;6938:24;6956:5;6938:24;:::i;:::-;6933:3;6926:37;6851:118;;:::o;6975:222::-;7068:4;7106:2;7095:9;7091:18;7083:26;;7119:71;7187:1;7176:9;7172:17;7163:6;7119:71;:::i;:::-;6975:222;;;;:::o;7203:329::-;7262:6;7311:2;7299:9;7290:7;7286:23;7282:32;7279:119;;;7317:79;;:::i;:::-;7279:119;7437:1;7462:53;7507:7;7498:6;7487:9;7483:22;7462:53;:::i;:::-;7452:63;;7408:117;7203:329;;;;:::o;7538:474::-;7606:6;7614;7663:2;7651:9;7642:7;7638:23;7634:32;7631:119;;;7669:79;;:::i;:::-;7631:119;7789:1;7814:53;7859:7;7850:6;7839:9;7835:22;7814:53;:::i;:::-;7804:63;;7760:117;7916:2;7942:53;7987:7;7978:6;7967:9;7963:22;7942:53;:::i;:::-;7932:63;;7887:118;7538:474;;;;;:::o;8018:765::-;8104:6;8112;8120;8128;8177:3;8165:9;8156:7;8152:23;8148:33;8145:120;;;8184:79;;:::i;:::-;8145:120;8304:1;8329:53;8374:7;8365:6;8354:9;8350:22;8329:53;:::i;:::-;8319:63;;8275:117;8431:2;8457:53;8502:7;8493:6;8482:9;8478:22;8457:53;:::i;:::-;8447:63;;8402:118;8559:2;8585:53;8630:7;8621:6;8610:9;8606:22;8585:53;:::i;:::-;8575:63;;8530:118;8687:2;8713:53;8758:7;8749:6;8738:9;8734:22;8713:53;:::i;:::-;8703:63;;8658:118;8018:765;;;;;;;:::o;8789:118::-;8860:22;8876:5;8860:22;:::i;:::-;8853:5;8850:33;8840:61;;8897:1;8894;8887:12;8840:61;8789:118;:::o;8913:135::-;8957:5;8995:6;8982:20;8973:29;;9011:31;9036:5;9011:31;:::i;:::-;8913:135;;;;:::o;9054:1199::-;9165:6;9173;9181;9189;9197;9205;9213;9262:3;9250:9;9241:7;9237:23;9233:33;9230:120;;;9269:79;;:::i;:::-;9230:120;9389:1;9414:53;9459:7;9450:6;9439:9;9435:22;9414:53;:::i;:::-;9404:63;;9360:117;9516:2;9542:53;9587:7;9578:6;9567:9;9563:22;9542:53;:::i;:::-;9532:63;;9487:118;9644:2;9670:53;9715:7;9706:6;9695:9;9691:22;9670:53;:::i;:::-;9660:63;;9615:118;9772:2;9798:53;9843:7;9834:6;9823:9;9819:22;9798:53;:::i;:::-;9788:63;;9743:118;9900:3;9927:51;9970:7;9961:6;9950:9;9946:22;9927:51;:::i;:::-;9917:61;;9871:117;10027:3;10054:53;10099:7;10090:6;10079:9;10075:22;10054:53;:::i;:::-;10044:63;;9998:119;10156:3;10183:53;10228:7;10219:6;10208:9;10204:22;10183:53;:::i;:::-;10173:63;;10127:119;9054:1199;;;;;;;;;;:::o;10259:474::-;10327:6;10335;10384:2;10372:9;10363:7;10359:23;10355:32;10352:119;;;10390:79;;:::i;:::-;10352:119;10510:1;10535:53;10580:7;10571:6;10560:9;10556:22;10535:53;:::i;:::-;10525:63;;10481:117;10637:2;10663:53;10708:7;10699:6;10688:9;10684:22;10663:53;:::i;:::-;10653:63;;10608:118;10259:474;;;;;:::o;10739:180::-;10787:77;10784:1;10777:88;10884:4;10881:1;10874:15;10908:4;10905:1;10898:15;10925:320;10969:6;11006:1;11000:4;10996:12;10986:22;;11053:1;11047:4;11043:12;11074:18;11064:81;;11130:4;11122:6;11118:17;11108:27;;11064:81;11192:2;11184:6;11181:14;11161:18;11158:38;11155:84;;11211:18;;:::i;:::-;11155:84;10976:269;10925:320;;;:::o;11251:180::-;11299:77;11296:1;11289:88;11396:4;11393:1;11386:15;11420:4;11417:1;11410:15;11437:180;11485:77;11482:1;11475:88;11582:4;11579:1;11572:15;11606:4;11603:1;11596:15;11623:185;11663:1;11680:20;11698:1;11680:20;:::i;:::-;11675:25;;11714:20;11732:1;11714:20;:::i;:::-;11709:25;;11753:1;11743:35;;11758:18;;:::i;:::-;11743:35;11800:1;11797;11793:9;11788:14;;11623:185;;;;:::o;11814:194::-;11854:4;11874:20;11892:1;11874:20;:::i;:::-;11869:25;;11908:20;11926:1;11908:20;:::i;:::-;11903:25;;11952:1;11949;11945:9;11937:17;;11976:1;11970:4;11967:11;11964:37;;;11981:18;;:::i;:::-;11964:37;11814:194;;;;:::o;12014:102::-;12056:8;12103:5;12100:1;12096:13;12075:34;;12014:102;;;:::o;12122:848::-;12183:5;12190:4;12214:6;12205:15;;12238:5;12229:14;;12252:712;12273:1;12263:8;12260:15;12252:712;;;12368:4;12363:3;12359:14;12353:4;12350:24;12347:50;;;12377:18;;:::i;:::-;12347:50;12427:1;12417:8;12413:16;12410:451;;;12842:4;12835:5;12831:16;12822:25;;12410:451;12892:4;12886;12882:15;12874:23;;12922:32;12945:8;12922:32;:::i;:::-;12910:44;;12252:712;;;12122:848;;;;;;;:::o;12976:1073::-;13030:5;13221:8;13211:40;;13242:1;13233:10;;13244:5;;13211:40;13270:4;13260:36;;13287:1;13278:10;;13289:5;;13260:36;13356:4;13404:1;13399:27;;;;13440:1;13435:191;;;;13349:277;;13399:27;13417:1;13408:10;;13419:5;;;13435:191;13480:3;13470:8;13467:17;13464:43;;;13487:18;;:::i;:::-;13464:43;13536:8;13533:1;13529:16;13520:25;;13571:3;13564:5;13561:14;13558:40;;;13578:18;;:::i;:::-;13558:40;13611:5;;;13349:277;;13735:2;13725:8;13722:16;13716:3;13710:4;13707:13;13703:36;13685:2;13675:8;13672:16;13667:2;13661:4;13658:12;13654:35;13638:111;13635:246;;;13791:8;13785:4;13781:19;13772:28;;13826:3;13819:5;13816:14;13813:40;;;13833:18;;:::i;:::-;13813:40;13866:5;;13635:246;13906:42;13944:3;13934:8;13928:4;13925:1;13906:42;:::i;:::-;13891:57;;;;13980:4;13975:3;13971:14;13964:5;13961:25;13958:51;;;13989:18;;:::i;:::-;13958:51;14038:4;14031:5;14027:16;14018:25;;12976:1073;;;;;;:::o;14055:285::-;14115:5;14139:23;14157:4;14139:23;:::i;:::-;14131:31;;14183:27;14201:8;14183:27;:::i;:::-;14171:39;;14229:104;14266:66;14256:8;14250:4;14229:104;:::i;:::-;14220:113;;14055:285;;;;:::o;14346:410::-;14386:7;14409:20;14427:1;14409:20;:::i;:::-;14404:25;;14443:20;14461:1;14443:20;:::i;:::-;14438:25;;14498:1;14495;14491:9;14520:30;14538:11;14520:30;:::i;:::-;14509:41;;14699:1;14690:7;14686:15;14683:1;14680:22;14660:1;14653:9;14633:83;14610:139;;14729:18;;:::i;:::-;14610:139;14394:362;14346:410;;;;:::o;14762:79::-;14801:7;14830:5;14819:16;;14762:79;;;:::o;14847:157::-;14952:45;14972:24;14990:5;14972:24;:::i;:::-;14952:45;:::i;:::-;14947:3;14940:58;14847:157;;:::o;15010:94::-;15043:8;15091:5;15087:2;15083:14;15062:35;;15010:94;;;:::o;15110:::-;15149:7;15178:20;15192:5;15178:20;:::i;:::-;15167:31;;15110:94;;;:::o;15210:100::-;15249:7;15278:26;15298:5;15278:26;:::i;:::-;15267:37;;15210:100;;;:::o;15316:157::-;15421:45;15441:24;15459:5;15441:24;:::i;:::-;15421:45;:::i;:::-;15416:3;15409:58;15316:157;;:::o;15479:79::-;15518:7;15547:5;15536:16;;15479:79;;;:::o;15564:157::-;15669:45;15689:24;15707:5;15689:24;:::i;:::-;15669:45;:::i;:::-;15664:3;15657:58;15564:157;;:::o;15727:538::-;15895:3;15910:75;15981:3;15972:6;15910:75;:::i;:::-;16010:2;16005:3;16001:12;15994:19;;16023:75;16094:3;16085:6;16023:75;:::i;:::-;16123:2;16118:3;16114:12;16107:19;;16136:75;16207:3;16198:6;16136:75;:::i;:::-;16236:2;16231:3;16227:12;16220:19;;16256:3;16249:10;;15727:538;;;;;;:::o;16271:191::-;16311:3;16330:20;16348:1;16330:20;:::i;:::-;16325:25;;16364:20;16382:1;16364:20;:::i;:::-;16359:25;;16407:1;16404;16400:9;16393:16;;16428:3;16425:1;16422:10;16419:36;;;16435:18;;:::i;:::-;16419:36;16271:191;;;;:::o;16468:442::-;16617:4;16655:2;16644:9;16640:18;16632:26;;16668:71;16736:1;16725:9;16721:17;16712:6;16668:71;:::i;:::-;16749:72;16817:2;16806:9;16802:18;16793:6;16749:72;:::i;:::-;16831;16899:2;16888:9;16884:18;16875:6;16831:72;:::i;:::-;16468:442;;;;;;:::o;16916:176::-;16948:1;16965:20;16983:1;16965:20;:::i;:::-;16960:25;;16999:20;17017:1;16999:20;:::i;:::-;16994:25;;17038:1;17028:35;;17043:18;;:::i;:::-;17028:35;17084:1;17081;17077:9;17072:14;;16916:176;;;;:::o;17098:167::-;17238:19;17234:1;17226:6;17222:14;17215:43;17098:167;:::o;17271:366::-;17413:3;17434:67;17498:2;17493:3;17434:67;:::i;:::-;17427:74;;17510:93;17599:3;17510:93;:::i;:::-;17628:2;17623:3;17619:12;17612:19;;17271:366;;;:::o;17643:419::-;17809:4;17847:2;17836:9;17832:18;17824:26;;17896:9;17890:4;17886:20;17882:1;17871:9;17867:17;17860:47;17924:131;18050:4;17924:131;:::i;:::-;17916:139;;17643:419;;;:::o;18068:233::-;18107:3;18130:24;18148:5;18130:24;:::i;:::-;18121:33;;18176:66;18169:5;18166:77;18163:103;;18246:18;;:::i;:::-;18163:103;18293:1;18286:5;18282:13;18275:20;;18068:233;;;:::o;18307:775::-;18540:4;18578:3;18567:9;18563:19;18555:27;;18592:71;18660:1;18649:9;18645:17;18636:6;18592:71;:::i;:::-;18673:72;18741:2;18730:9;18726:18;18717:6;18673:72;:::i;:::-;18755;18823:2;18812:9;18808:18;18799:6;18755:72;:::i;:::-;18837;18905:2;18894:9;18890:18;18881:6;18837:72;:::i;:::-;18919:73;18987:3;18976:9;18972:19;18963:6;18919:73;:::i;:::-;19002;19070:3;19059:9;19055:19;19046:6;19002:73;:::i;:::-;18307:775;;;;;;;;;:::o;19088:176::-;19228:28;19224:1;19216:6;19212:14;19205:52;19088:176;:::o;19270:366::-;19412:3;19433:67;19497:2;19492:3;19433:67;:::i;:::-;19426:74;;19509:93;19598:3;19509:93;:::i;:::-;19627:2;19622:3;19618:12;19611:19;;19270:366;;;:::o;19642:419::-;19808:4;19846:2;19835:9;19831:18;19823:26;;19895:9;19889:4;19885:20;19881:1;19870:9;19866:17;19859:47;19923:131;20049:4;19923:131;:::i;:::-;19915:139;;19642:419;;;:::o;20067:148::-;20169:11;20206:3;20191:18;;20067:148;;;;:::o;20221:214::-;20361:66;20357:1;20349:6;20345:14;20338:90;20221:214;:::o;20441:400::-;20601:3;20622:84;20704:1;20699:3;20622:84;:::i;:::-;20615:91;;20715:93;20804:3;20715:93;:::i;:::-;20833:1;20828:3;20824:11;20817:18;;20441:400;;;:::o;20847:663::-;21088:3;21110:148;21254:3;21110:148;:::i;:::-;21103:155;;21268:75;21339:3;21330:6;21268:75;:::i;:::-;21368:2;21363:3;21359:12;21352:19;;21381:75;21452:3;21443:6;21381:75;:::i;:::-;21481:2;21476:3;21472:12;21465:19;;21501:3;21494:10;;20847:663;;;;;:::o;21516:225::-;21656:34;21652:1;21644:6;21640:14;21633:58;21725:8;21720:2;21712:6;21708:15;21701:33;21516:225;:::o;21747:366::-;21889:3;21910:67;21974:2;21969:3;21910:67;:::i;:::-;21903:74;;21986:93;22075:3;21986:93;:::i;:::-;22104:2;22099:3;22095:12;22088:19;;21747:366;;;:::o;22119:419::-;22285:4;22323:2;22312:9;22308:18;22300:26;;22372:9;22366:4;22362:20;22358:1;22347:9;22343:17;22336:47;22400:131;22526:4;22400:131;:::i;:::-;22392:139;;22119:419;;;:::o;22544:225::-;22684:34;22680:1;22672:6;22668:14;22661:58;22753:8;22748:2;22740:6;22736:15;22729:33;22544:225;:::o;22775:366::-;22917:3;22938:67;23002:2;22997:3;22938:67;:::i;:::-;22931:74;;23014:93;23103:3;23014:93;:::i;:::-;23132:2;23127:3;23123:12;23116:19;;22775:366;;;:::o;23147:419::-;23313:4;23351:2;23340:9;23336:18;23328:26;;23400:9;23394:4;23390:20;23386:1;23375:9;23371:17;23364:47;23428:131;23554:4;23428:131;:::i;:::-;23420:139;;23147:419;;;:::o;23572:545::-;23745:4;23783:3;23772:9;23768:19;23760:27;;23797:71;23865:1;23854:9;23850:17;23841:6;23797:71;:::i;:::-;23878:68;23942:2;23931:9;23927:18;23918:6;23878:68;:::i;:::-;23956:72;24024:2;24013:9;24009:18;24000:6;23956:72;:::i;:::-;24038;24106:2;24095:9;24091:18;24082:6;24038:72;:::i;:::-;23572:545;;;;;;;:::o;24123:178::-;24263:30;24259:1;24251:6;24247:14;24240:54;24123:178;:::o;24307:366::-;24449:3;24470:67;24534:2;24529:3;24470:67;:::i;:::-;24463:74;;24546:93;24635:3;24546:93;:::i;:::-;24664:2;24659:3;24655:12;24648:19;;24307:366;;;:::o;24679:419::-;24845:4;24883:2;24872:9;24868:18;24860:26;;24932:9;24926:4;24922:20;24918:1;24907:9;24903:17;24896:47;24960:131;25086:4;24960:131;:::i;:::-;24952:139;;24679:419;;;:::o

Swarm Source

ipfs://79fd5812cd026289b10138c798028719c694cc1ed79fad95434cf4ed93c323a6

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  ]

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.