ETH Price: $3,345.07 (-1.45%)

Contract

0xE61fDAF474Fac07063f2234Fb9e60C1163Cfa850
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Transaction Hash
Method
Block
From
To
Approve212454972024-11-22 19:56:238 hrs ago1732305383IN
CoinDefi: COIN Token
0 ETH0.0005970612.91459702
Approve212449972024-11-22 18:16:2310 hrs ago1732299383IN
CoinDefi: COIN Token
0 ETH0.0007023815.08308473
Approve212278032024-11-20 8:37:472 days ago1732091867IN
CoinDefi: COIN Token
0 ETH0.000223419.20000758
Approve212216352024-11-19 11:59:353 days ago1732017575IN
CoinDefi: COIN Token
0 ETH0.0004666110.03565116
Approve211741112024-11-12 20:52:2310 days ago1731444743IN
CoinDefi: COIN Token
0 ETH0.0015243132.78382195
Approve211464432024-11-09 0:15:1114 days ago1731111311IN
CoinDefi: COIN Token
0 ETH0.0006009412.98834829
Approve211338352024-11-07 5:58:2315 days ago1730959103IN
CoinDefi: COIN Token
0 ETH0.000241779.95625016
Approve211027092024-11-02 21:42:3520 days ago1730583755IN
CoinDefi: COIN Token
0 ETH0.000105214.33283
Transfer210733442024-10-29 19:20:1124 days ago1730229611IN
CoinDefi: COIN Token
0 ETH0.0005806116.38956284
Approve210421162024-10-25 10:44:4728 days ago1729853087IN
CoinDefi: COIN Token
0 ETH0.000152086.26277393
Transfer209500552024-10-12 14:16:1141 days ago1728742571IN
CoinDefi: COIN Token
0 ETH0.0008417517.62830273
Approve208511072024-09-28 19:04:5955 days ago1727550299IN
CoinDefi: COIN Token
0 ETH0.000148056.09676819
Approve208092792024-09-22 23:03:2361 days ago1727046203IN
CoinDefi: COIN Token
0 ETH0.000402628.70206678
Approve207109502024-09-09 5:25:1174 days ago1725859511IN
CoinDefi: COIN Token
0 ETH0.000085681.85102847
Transfer207100102024-09-09 2:16:4775 days ago1725848207IN
CoinDefi: COIN Token
0 ETH0.000094613.08572828
Transfer207100072024-09-09 2:16:1175 days ago1725848171IN
CoinDefi: COIN Token
0 ETH0.000091042.97154428
Transfer207099092024-09-09 1:56:3575 days ago1725846995IN
CoinDefi: COIN Token
0 ETH0.000145133.04020643
Approve207026652024-09-08 1:39:4776 days ago1725759587IN
CoinDefi: COIN Token
0 ETH0.00004170.89567433
Approve206771722024-09-04 12:18:4779 days ago1725452327IN
CoinDefi: COIN Token
0 ETH0.000127572.73957119
Approve206087732024-08-25 23:04:5989 days ago1724627099IN
CoinDefi: COIN Token
0 ETH0.000043030.9308057
Approve205988182024-08-24 13:40:5990 days ago1724506859IN
CoinDefi: COIN Token
0 ETH0.000084861.82248564
Approve205465182024-08-17 6:20:5997 days ago1723875659IN
CoinDefi: COIN Token
0 ETH0.000024510.83959986
Approve205465132024-08-17 6:19:5997 days ago1723875599IN
CoinDefi: COIN Token
0 ETH0.000026290.90111312
Approve205440852024-08-16 22:10:4798 days ago1723846247IN
CoinDefi: COIN Token
0 ETH0.00004550.982641
Approve205296912024-08-14 21:55:59100 days ago1723672559IN
CoinDefi: COIN Token
0 ETH0.000161913.49675902
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:
CoinToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-20
*/

pragma solidity ^0.4.24;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMathLib{
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }
  
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;
  address public coinvest;
  mapping (address => bool) public admins;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
    coinvest = msg.sender;
    admins[owner] = true;
    admins[coinvest] = true;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  modifier onlyCoinvest() {
      require(msg.sender == coinvest);
      _;
  }

  modifier onlyAdmin() {
      require(admins[msg.sender]);
      _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
  
  /**
   * @dev Changes the Coinvest wallet that will receive funds from investment contract.
   * @param _newCoinvest The address of the new wallet.
  **/
  function transferCoinvest(address _newCoinvest) 
    external
    onlyCoinvest
  {
    require(_newCoinvest != address(0));
    coinvest = _newCoinvest;
  }

  /**
   * @dev Used to add admins who are allowed to add funds to the investment contract.
   * @param _user The address of the admin to add or remove.
   * @param _status True to add the user, False to remove the user.
  **/
  function alterAdmin(address _user, bool _status)
    external
    onlyCoinvest
  {
    require(_user != address(0));
    require(_user != coinvest);
    admins[_user] = _status;
  }

}

/**
 * @dev Abstract contract for approveAndCall.
**/
contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}

/**
 * @title Coin Utility Token
 * @dev ERC20 contract utilizing ERC865 structure (3esmit's implementation with alterations).
 * @dev to allow users to pay Ethereum fees in tokens.
 * @author Coin -- Robert M.C. Forster
**/
contract CoinToken is Ownable {
    using SafeMathLib for uint256;
    
    string public constant symbol = "COIN";
    string public constant name = "Coin Utility Token";
    
    uint8 public constant decimals = 18;
    uint256 private _totalSupply = 107142857 * (10 ** 18);
    
    // Function sigs to be used within contract for signature recovery.
    bytes4 internal constant transferSig = 0xa9059cbb;
    bytes4 internal constant approveSig = 0x095ea7b3;
    bytes4 internal constant increaseApprovalSig = 0xd73dd623;
    bytes4 internal constant decreaseApprovalSig = 0x66188463;
    bytes4 internal constant approveAndCallSig = 0xcae9ca51;
    bytes4 internal constant revokeHashSig = 0x70de43f1;

    // Balances for each account
    mapping(address => uint256) balances;

    // Owner of account approves the transfer of an amount to another account
    mapping(address => mapping (address => uint256)) allowed;
    
    // Mapping of past used hashes: true if already used.
    mapping(address => mapping (bytes32 => bool)) invalidHashes;

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed from, address indexed spender, uint tokens);
    event HashRedeemed(bytes32 indexed txHash, address indexed from);

    /**
     * @dev Set owner and beginning balance.
    **/
    constructor()
      public
    {
        balances[msg.sender] = _totalSupply;
    }

    /**
     * @dev approveAndCall reception used primarily to pay gas with other tokens.
    **/
    function receiveApproval(address _from, uint256 _amount, address _token, bytes _data) 
      public
    {
        require(msg.sender != address(this));
        require(address(this).delegatecall(_data));
        _from; _amount; _token;
    }

/** ******************************** ERC20 ********************************* **/

    /**
     * @dev Transfers coins from one address to another.
     * @param _to The recipient of the transfer amount.
     * @param _amount The amount of tokens to transfer.
    **/
    function transfer(address _to, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_transfer(msg.sender, _to, _amount));
        return true;
    }
    
    /**
     * @dev An allowed address can transfer tokens from another's address.
     * @param _from The owner of the tokens to be transferred.
     * @param _to The address to which the tokens will be transferred.
     * @param _amount The amount of tokens to be transferred.
    **/
    function transferFrom(address _from, address _to, uint _amount)
      public
    returns (bool success)
    {
        require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount);

        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount);
        require(_transfer(_from, _to, _amount));
        return true;
    }
    
    /**
     * @dev Approves a wallet to transfer tokens on one's behalf.
     * @param _spender The wallet approved to spend tokens.
     * @param _amount The amount of tokens approved to spend.
    **/
    function approve(address _spender, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_approve(msg.sender, _spender, _amount));
        return true;
    }
    
    /**
     * @dev Increases the allowed amount for spender from msg.sender.
     * @param _spender The address to increase allowed amount for.
     * @param _amount The amount of tokens to increase allowed amount by.
    **/
    function increaseApproval(address _spender, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_increaseApproval(msg.sender, _spender, _amount));
        return true;
    }
    
    /**
     * @dev Decreases the allowed amount for spender from msg.sender.
     * @param _spender The address to decrease allowed amount for.
     * @param _amount The amount of tokens to decrease allowed amount by.
    **/
    function decreaseApproval(address _spender, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_decreaseApproval(msg.sender, _spender, _amount));
        return true;
    }
    
    /**
     * @dev Used to approve an address and call a function on it in the same transaction.
     * @dev _spender The address to be approved to spend COIN.
     * @dev _amount The amount of COIN to be approved to spend.
     * @dev _data The data to send to the called contract.
    **/
    function approveAndCall(address _spender, uint256 _amount, bytes _data) 
      public
    returns (bool success) 
    {
        require(_approve(msg.sender, _spender, _amount));
        ApproveAndCallFallBack(_spender).receiveApproval(msg.sender, _amount, address(this), _data);
        return true;
    }

/** ****************************** Internal ******************************** **/
    
    /**
     * @dev Internal transfer for all functions that transfer.
     * @param _from The address that is transferring coins.
     * @param _to The receiving address of the coins.
     * @param _amount The amount of coins being transferred.
    **/
    function _transfer(address _from, address _to, uint256 _amount)
      internal
    returns (bool success)
    {
        require (_to != address(0), "Invalid transfer recipient address.");
        require(balances[_from] >= _amount, "Sender does not have enough balance.");
        
        balances[_from] = balances[_from].sub(_amount);
        balances[_to] = balances[_to].add(_amount);
        
        emit Transfer(_from, _to, _amount);
        return true;
    }
    
    /**
     * @dev Internal approve for all functions that require an approve.
     * @param _owner The owner who is allowing spender to use their balance.
     * @param _spender The wallet approved to spend tokens.
     * @param _amount The amount of tokens approved to spend.
    **/
    function _approve(address _owner, address _spender, uint256 _amount) 
      internal
    returns (bool success)
    {
        allowed[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
        return true;
    }
    
    /**
     * @dev Increases the allowed by "_amount" for "_spender" from "owner"
     * @param _owner The address that tokens may be transferred from.
     * @param _spender The address that may transfer these tokens.
     * @param _amount The amount of tokens to transfer.
    **/
    function _increaseApproval(address _owner, address _spender, uint256 _amount)
      internal
    returns (bool success)
    {
        allowed[_owner][_spender] = allowed[_owner][_spender].add(_amount);
        emit Approval(_owner, _spender, allowed[_owner][_spender]);
        return true;
    }
    
    /**
     * @dev Decreases the allowed by "_amount" for "_spender" from "_owner"
     * @param _owner The owner of the tokens to decrease allowed for.
     * @param _spender The spender whose allowed will decrease.
     * @param _amount The amount of tokens to decrease allowed by.
    **/
    function _decreaseApproval(address _owner, address _spender, uint256 _amount)
      internal
    returns (bool success)
    {
        if (allowed[_owner][_spender] <= _amount) allowed[_owner][_spender] = 0;
        else allowed[_owner][_spender] = allowed[_owner][_spender].sub(_amount);
        
        emit Approval(_owner, _spender, allowed[_owner][_spender]);
        return true;
    }
    
/** ************************ Delegated Functions *************************** **/

    /**
     * @dev Called by delegate with a signed hash of the transaction data to allow a user
     * @dev to transfer tokens without paying gas in Ether (they pay in COIN instead).
     * @param _signature Signed hash of data for this transfer.
     * @param _to The address to transfer COIN to.
     * @param _value The amount of COIN to transfer.
     * @param _gasPrice Price (IN COIN) that will be paid per unit of gas by user to "delegate".
     * @param _nonce Nonce of the user's new transaction.
    **/
    function transferPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        uint256 _gasPrice, 
        uint256 _nonce) 
      public
    returns (bool) 
    {
        // Log starting gas left of transaction for later gas price calculations.
        uint256 gas = gasleft();
        
        // Recover signer address from signature; ensure address is valid.
        address from = recoverPreSigned(_signature, transferSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");
        
        // Require the hash has not been used, declare it used.
        bytes32 txHash = getPreSignedHash(transferSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        // Internal transfer.
        require(_transfer(from, _to, _value));

        // If the delegate is charging, pay them for gas in COIN.
        if (_gasPrice > 0) {
            // 35000 because of base fee of 21000 and ~14000 for the fee transfer.
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Called by a delegate with signed hash to approve a transaction for user.
     * @dev All variables equivalent to transfer except _to:
     * @param _to The address that will be approved to transfer COIN from user's wallet.
    **/
    function approvePreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        uint256 _gasPrice, 
        uint256 _nonce) 
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, approveSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(approveSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        require(_approve(from, _to, _value));

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }

        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Used to increase the amount allowed for "_to" to spend from "from"
     * @dev A bare approve allows potentially nasty race conditions when using a delegate.
    **/
    function increaseApprovalPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        uint256 _gasPrice, 
        uint256 _nonce)
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, increaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(increaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        require(_increaseApproval(from, _to, _value));

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Added for the same reason as increaseApproval. Decreases to 0 if "_value" is greater than allowed.
    **/
    function decreaseApprovalPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value, 
        uint256 _gasPrice, 
        uint256 _nonce) 
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        require(_decreaseApproval(from, _to, _value));

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }

        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev approveAndCallPreSigned allows a user to approve a contract and call a function on it
     * @dev in the same transaction. As with the other presigneds, a delegate calls this with signed data from user.
     * @dev This function is the big reason we're using gas price and calculating gas use.
     * @dev Using this with the investment contract can result in varying gas costs.
     * @param _extraData The data to send to the contract.
    **/
    function approveAndCallPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        bytes _extraData,
        uint256 _gasPrice,
        uint256 _nonce) 
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        if (_value > 0) require(_approve(from, _to, _value));
        ApproveAndCallFallBack(_to).receiveApproval(from, _value, address(this), _extraData);

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }

/** *************************** Revoke PreSigned ************************** **/
    
    /**
     * @dev Revoke hash without going through a delegate.
     * @param _hashToRevoke The hash that you no longer want to be used.
    **/
    function revokeHash(bytes32 _hashToRevoke)
      public
    returns (bool)
    {
        invalidHashes[msg.sender][_hashToRevoke] = true;
        return true;
    }
    
    /**
     * @dev Revoke hash through a delegate.
     * @param _signature The signature allowing this revocation.
     * @param _hashToRevoke The hash that you would like revoked.
     * @param _gasPrice The amount of token wei to be paid for each uint of gas.
    **/
    function revokeHashPreSigned(
        bytes _signature,
        bytes32 _hashToRevoke,
        uint256 _gasPrice)
      public
    returns (bool)
    {
        uint256 gas = gasleft();
        address from = recoverRevokeHash(_signature, _hashToRevoke, _gasPrice);
        require(from != address(0), "Invalid signature provided.");
        
        bytes32 txHash = getRevokeHash(_hashToRevoke, _gasPrice);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        invalidHashes[from][_hashToRevoke] = true;
        
        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Get hash for a revocation.
     * @param _hashToRevoke The signature to be revoked.
     * @param _gasPrice The amount to be paid to delegate for sending this tx.
    **/
    function getRevokeHash(bytes32 _hashToRevoke, uint256 _gasPrice)
      public
      view
    returns (bytes32 txHash)
    {
        return keccak256(abi.encodePacked(address(this), revokeHashSig, _hashToRevoke, _gasPrice));
    }

    /**
     * @dev Recover the address from a revocation hash.
     * @param _hashToRevoke The hash to be revoked.
     * @param _signature The signature allowing this revocation.
     * @param _gasPrice The amount of token wei to be paid for each unit of gas.
    **/
    function recoverRevokeHash(bytes _signature, bytes32 _hashToRevoke, uint256 _gasPrice)
      public
      view
    returns (address from)
    {
        return ecrecoverFromSig(getSignHash(getRevokeHash(_hashToRevoke, _gasPrice)), _signature);
    }
    
/** ************************** PreSigned Constants ************************ **/

    /**
     * @dev Used in frontend and contract to get hashed data of any given pre-signed transaction.
     * @param _to The address to transfer COIN to.
     * @param _value The amount of COIN to be transferred.
     * @param _extraData Extra data of tx if needed. Transfers and approves will leave this null.
     * @param _function Function signature of the pre-signed function being used.
     * @param _gasPrice The agreed-upon amount of COIN to be paid per unit of gas.
     * @param _nonce The user's nonce of the new transaction.
    **/
    function getPreSignedHash(
        bytes4 _function,
        address _to, 
        uint256 _value,
        bytes _extraData,
        uint256 _gasPrice,
        uint256 _nonce)
      public
      view
    returns (bytes32 txHash) 
    {
        return keccak256(abi.encodePacked(address(this), _function, _to, _value, _extraData, _gasPrice, _nonce));
    }
    
    /**
     * @dev Recover an address from a signed pre-signed hash.
     * @param _sig The signed hash.
     * @param _function The function signature for function being called.
     * @param _to The address to transfer/approve/transferFrom/etc. tokens to.
     * @param _value The amont of tokens to transfer/approve/etc.
     * @param _extraData The extra data included in the transaction, if any.
     * @param _gasPrice The amount of token wei to be paid to the delegate for each unit of gas.
     * @param _nonce The user's nonce for this transaction.
    **/
    function recoverPreSigned(
        bytes _sig,
        bytes4 _function,
        address _to,
        uint256 _value,
        bytes _extraData,
        uint256 _gasPrice,
        uint256 _nonce) 
      public
      view
    returns (address recovered)
    {
        return ecrecoverFromSig(getSignHash(getPreSignedHash(_function, _to, _value, _extraData, _gasPrice, _nonce)), _sig);
    }
    
    /**
     * @dev Add signature prefix to hash for recovery à la ERC191.
     * @param _hash The hashed transaction to add signature prefix to.
    **/
    function getSignHash(bytes32 _hash)
      public
      pure
    returns (bytes32 signHash)
    {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _hash));
    }

    /**
     * @dev Helps to reduce stack depth problems for delegations. Thank you to Bokky for this!
     * @param hash The hash of signed data for the transaction.
     * @param sig Contains r, s, and v for recovery of address from the hash.
    **/
    function ecrecoverFromSig(bytes32 hash, bytes sig) 
      public 
      pure 
    returns (address recoveredAddress) 
    {
        bytes32 r;
        bytes32 s;
        uint8 v;
        if (sig.length != 65) return address(0);
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            // Here we are loading the last 32 bytes. We exploit the fact that 'mload' will pad with zeroes if we overread.
            // There is no 'mload8' to do this, but that would be nicer.
            v := byte(0, mload(add(sig, 96)))
        }
        // Albeit non-transactional signatures are not specified by the YP, one would expect it to match the YP range of [27, 28]
        // geth uses [0, 1] and some clients have followed. This might change, see https://github.com/ethereum/go-ethereum/issues/2053
        if (v < 27) v += 27;
        if (v != 27 && v != 28) return address(0);
        return ecrecover(hash, v, r, s);
    }

/** ****************************** Constants ******************************* **/
    
    /**
     * @dev Return total supply of token.
    **/
    function totalSupply() 
      external
      view 
     returns (uint256)
    {
        return _totalSupply;
    }

    /**
     * @dev Return balance of a certain address.
     * @param _owner The address whose balance we want to check.
    **/
    function balanceOf(address _owner)
      external
      view 
    returns (uint256) 
    {
        return balances[_owner];
    }
    
    /**
     * @dev Allowed amount for a user to spend of another's tokens.
     * @param _owner The owner of the tokens approved to spend.
     * @param _spender The address of the user allowed to spend the tokens.
    **/
    function allowance(address _owner, address _spender) 
      external
      view 
    returns (uint256) 
    {
        return allowed[_owner][_spender];
    }
    
/** ****************************** onlyOwner ******************************* **/
    
    /**
     * @dev Allow the owner to take ERC20 tokens off of this contract if they are accidentally sent.
    **/
    function tokenEscape(address _tokenContract)
      external
      onlyOwner
    {
        CoinToken lostToken = CoinToken(_tokenContract);
        
        uint256 stuckTokens = lostToken.balanceOf(address(this));
        lostToken.transfer(owner, stuckTokens);
    }
    
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"coinvest","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_sig","type":"bytes"},{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"recoverPreSigned","outputs":[{"name":"recovered","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_status","type":"bool"}],"name":"alterAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"tokenEscape","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"recoverRevokeHash","outputs":[{"name":"from","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_hashToRevoke","type":"bytes32"}],"name":"revokeHash","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"revokeHashPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_token","type":"address"},{"name":"_data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"getRevokeHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"getPreSignedHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"getSignHash","outputs":[{"name":"signHash","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approveAndCallPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"ecrecoverFromSig","outputs":[{"name":"recoveredAddress","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCoinvest","type":"address"}],"name":"transferCoinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"txHash","type":"bytes32"},{"indexed":true,"name":"from","type":"address"}],"name":"HashRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040526a58a061ea91aa7f2584000060035534801561001f57600080fd5b5060008054600160a060020a0319908116339081178084556001805490931682178355600160a060020a039081168452600260209081526040808620805460ff1990811687179091558554909316865280862080549093169094179091556003549184526004905291205561258b806100996000396000f3006080604052600436106101875763ffffffff60e060020a60003504166306fdde03811461018c5780630958a9f314610216578063095ea7b31461024757806309ea63e31461027f57806310840303146103595780631296830d1461038157806318160ddd146103f457806323b872dd1461041b578063313ce567146104455780633f45440614610470578063429b62e514610491578063476e492f146104b2578063617b390b14610514578063661884631461058757806370a08231146105ab57806370de43f1146105cc5780638be52783146105e45780638da5cb5b146106575780638e421f161461066c5780638f4ffcb1146106ce57806395d89b411461073e578063a59b3d4614610753578063a9059cbb1461076e578063a9a0b49514610792578063adb8249e14610829578063b15aa5b71461089c578063c8d4b389146108b4578063cae9ca511461096a578063d4acaf6c146109d3578063d73dd62314610a31578063dd62ed3e14610a55578063dfb6c46814610a7c578063f2fde38b14610a9d575b600080fd5b34801561019857600080fd5b506101a1610abe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101db5781810151838201526020016101c3565b50505050905090810190601f1680156102085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022257600080fd5b5061022b610af5565b60408051600160a060020a039092168252519081900360200190f35b34801561025357600080fd5b5061026b600160a060020a0360043516602435610b04565b604080519115158252519081900360200190f35b34801561028b57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022b94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff198b35169b600160a060020a03848d0135169b958601359a919950975060809094019550919350918201918190840183828082843750949750508435955050506020909201359150610b259050565b34801561036557600080fd5b5061037f600160a060020a03600435166024351515610b52565b005b34801561038d57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135610bc4565b34801561040057600080fd5b50610409610e08565b60408051918252519081900360200190f35b34801561042757600080fd5b5061026b600160a060020a0360043581169060243516604435610e0e565b34801561045157600080fd5b5061045a610edc565b6040805160ff9092168252519081900360200190f35b34801561047c57600080fd5b5061037f600160a060020a0360043516610ee1565b34801561049d57600080fd5b5061026b600160a060020a0360043516611030565b3480156104be57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022b9436949293602493928401919081908401838280828437509497505084359550505060209092013591506110459050565b34801561052057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611065565b34801561059357600080fd5b5061026b600160a060020a03600435166024356111c9565b3480156105b757600080fd5b50610409600160a060020a03600435166111d6565b3480156105d857600080fd5b5061026b6004356111f1565b3480156105f057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a031694505050602082013591604081013591506060013561121b565b34801561066357600080fd5b5061022b61137f565b34801561067857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050843595505050602090920135915061138e9050565b3480156106da57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261037f94600160a060020a0381358116956024803596604435909316953695608494920191819084018382808284375094975061158a9650505050505050565b34801561074a57600080fd5b506101a161161d565b34801561075f57600080fd5b50610409600435602435611654565b34801561077a57600080fd5b5061026b600160a060020a036004351660243561171b565b34801561079e57600080fd5b50604080516020601f606435600481810135928301849004840285018401909552818452610409947bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1981351694600160a060020a0360248035919091169560443595369560849493019181908401838280828437509497505084359550505060209092013591506117289050565b34801561083557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a031694505050602082013591604081013591506060013561189f565b3480156108a857600080fd5b50610409600435611a03565b3480156108c057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a91999098506060909101965091945090810192508190840183828082843750949750508435955050506020909201359150611aad9050565b34801561097657600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261026b948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611dff9650505050505050565b3480156109df57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261022b958335953695604494919390910191908190840183828082843750949750611f1b9650505050505050565b348015610a3d57600080fd5b5061026b600160a060020a0360043516602435611ff0565b348015610a6157600080fd5b50610409600160a060020a0360043581169060243516611ffd565b348015610a8857600080fd5b5061037f600160a060020a0360043516612028565b348015610aa957600080fd5b5061037f600160a060020a0360043516612083565b60408051808201909152601281527f436f696e205574696c69747920546f6b656e0000000000000000000000000000602082015281565b600154600160a060020a031681565b6000610b11338484612117565b1515610b1c57600080fd5b50600192915050565b6000610b46610b40610b3b898989898989611728565b611a03565b89611f1b565b98975050505050505050565b600154600160a060020a03163314610b6957600080fd5b600160a060020a0382161515610b7e57600080fd5b600154600160a060020a0383811691161415610b9957600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b6000806000805a9250610bf68963a9059cbb60e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a0382161515610c46576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b610c6e63a9059cbb60e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615610cef576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d28828989612182565b1515610d3357600080fd5b6000861115610dc357610d4d5a849063ffffffff61235e16565b6188b8019250610d6d8232610d68898763ffffffff61237016565b612182565b1515610dc3576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a350600198975050505050505050565b60035490565b600160a060020a0383166000908152600460205260408120548211801590610e595750600160a060020a03841660009081526005602090815260408083203384529091529020548211155b1515610e6457600080fd5b600160a060020a0384166000908152600560209081526040808320338452909152902054610e98908363ffffffff61235e16565b600160a060020a0385166000908152600560209081526040808320338452909152902055610ec7848484612182565b1515610ed257600080fd5b5060019392505050565b601281565b600080548190600160a060020a03163314610efb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050506040513d6020811015610f8957600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b505050506040513d602081101561102957600080fd5b5050505050565b60026020526000908152604090205460ff1681565b600061105d611057610b3b8585611654565b85611f1b565b949350505050565b6000806000805a92506110978963095ea7b360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a03821615156110e7576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b61110f63095ea7b360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611190576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d28828989612117565b6000610b1133848461239b565b600160a060020a031660009081526004602052604090205490565b33600090815260066020908152604080832093835292905220805460ff1916600190811790915590565b6000806000805a925061124d89636618846360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a038216151561129d576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b6112c5636618846360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611346576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d2882898961239b565b600054600160a060020a031681565b6000806000805a92506113a2878787611045565b9150600160a060020a03821615156113f2576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b6113fc8686611654565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff161561147d576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091528082208054600160ff1991821681179092558984529183208054909216179055851115611547576114d65a849063ffffffff61235e16565b6188b80192506114f18232610d68888763ffffffff61237016565b1515611547576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a35060019695505050505050565b3330141561159757600080fd5b30600160a060020a03168160405180828051906020019080838360005b838110156115cc5781810151838201526020016115b4565b50505050905090810190601f1680156115f95780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af4915050151561161757600080fd5b50505050565b60408051808201909152600481527f434f494e00000000000000000000000000000000000000000000000000000000602082015281565b604080516c0100000000000000000000000030026020808301919091527f70de43f1000000000000000000000000000000000000000000000000000000006034830152603882018590526058808301859052835180840390910181526078909201928390528151600093918291908401908083835b602083106116e85780518252601f1990920191602091820191016116c9565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b6000610b11338484612182565b6000308787878787876040516020018088600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040186600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140185815260200184805190602001908083835b602083106117fb5780518252601f1990920191602091820191016117dc565b51815160209384036101000a60001901801990921691161790529201948552508381019290925250604080518084038301815292810190819052825192975095508594508601925090508083835b602083106118685780518252601f199092019160209182019101611849565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209a9950505050505050505050565b6000806000805a92506118d18963d73dd62360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a0382161515611921576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b61194963d73dd62360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff16156119ca576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d288289896124b8565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c80830185905283518084039091018152605c909201928390528151600093918291908401908083835b60208310611a7b5780518252601f199092019160209182019101611a5c565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b6000806000805a9250611ae58a7fcae9ca51000000000000000000000000000000000000000000000000000000008b8b8b8b8b610b25565b9150600160a060020a0382161515611b35576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b611b637fcae9ca51000000000000000000000000000000000000000000000000000000008a8a8a8a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611be4576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091528120805460ff19166001179055881115611c2f57611c24828a8a612117565b1515611c2f57600080fd5b88600160a060020a0316638f4ffcb1838a308b6040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611cc7578181015183820152602001611caf565b50505050905090810190601f168015611cf45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611d1657600080fd5b505af1158015611d2a573d6000803e3d6000fd5b505050506000861115611db957611d485a849063ffffffff61235e16565b6188b8019250611d638232610d68898763ffffffff61237016565b1515611db9576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a35060019998505050505050505050565b6000611e0c338585612117565b1515611e1757600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b83811015611eaa578181015183820152602001611e92565b50505050905090810190601f168015611ed75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b506001979650505050505050565b60008060008084516041141515611f355760009350611fe7565b50505060208201516040830151606084015160001a601b60ff82161015611f5a57601b015b8060ff16601b14158015611f7257508060ff16601c14155b15611f805760009350611fe7565b60408051600080825260208083018085528a905260ff8516838501526060830187905260808301869052925160019360a0808501949193601f19840193928390039091019190865af1158015611fda573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b6000610b113384846124b8565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b600154600160a060020a0316331461203f57600080fd5b600160a060020a038116151561205457600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461209a57600080fd5b600160a060020a03811615156120af57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03808416600081815260056020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000600160a060020a038316151561220a576040805160e560020a62461bcd02815260206004820152602360248201527f496e76616c6964207472616e7366657220726563697069656e7420616464726560448201527f73732e0000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03841660009081526004602052604090205482111561229f576040805160e560020a62461bcd028152602060048201526024808201527f53656e64657220646f6573206e6f74206861766520656e6f7567682062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0384166000908152600460205260409020546122c8908363ffffffff61235e16565b600160a060020a0380861660009081526004602052604080822093909355908516815220546122fd908363ffffffff6124f016565b600160a060020a0380851660008181526004602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b60008282111561236a57fe5b50900390565b600082820283158061238c575082848281151561238957fe5b04145b151561239457fe5b9392505050565b600160a060020a03808416600090815260056020908152604080832093861683529290529081205482106123f657600160a060020a038085166000908152600560209081526040808320938716835292905290812055612453565b600160a060020a0380851660009081526005602090815260408083209387168352929052205461242c908363ffffffff61235e16565b600160a060020a038086166000908152600560209081526040808320938816835292905220555b600160a060020a0384811660008181526005602090815260408083209488168084529482529182902054825190815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35060019392505050565b600160a060020a03808416600090815260056020908152604080832093861683529290529081205461242c908363ffffffff6124f016565b60008282018381101561239457fe005472616e73616374696f6e2068617320616c7265616479206265656e2065786563757465642e0000000000000000000000000000000000000000000000000000496e76616c6964207369676e61747572652070726f76696465642e0000000000a165627a7a72305820c5f31889e3915aad670c448dac3aa2e66d2b27260024d48e62c2b7ab26b2697b0029

Deployed Bytecode

0x6080604052600436106101875763ffffffff60e060020a60003504166306fdde03811461018c5780630958a9f314610216578063095ea7b31461024757806309ea63e31461027f57806310840303146103595780631296830d1461038157806318160ddd146103f457806323b872dd1461041b578063313ce567146104455780633f45440614610470578063429b62e514610491578063476e492f146104b2578063617b390b14610514578063661884631461058757806370a08231146105ab57806370de43f1146105cc5780638be52783146105e45780638da5cb5b146106575780638e421f161461066c5780638f4ffcb1146106ce57806395d89b411461073e578063a59b3d4614610753578063a9059cbb1461076e578063a9a0b49514610792578063adb8249e14610829578063b15aa5b71461089c578063c8d4b389146108b4578063cae9ca511461096a578063d4acaf6c146109d3578063d73dd62314610a31578063dd62ed3e14610a55578063dfb6c46814610a7c578063f2fde38b14610a9d575b600080fd5b34801561019857600080fd5b506101a1610abe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101db5781810151838201526020016101c3565b50505050905090810190601f1680156102085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022257600080fd5b5061022b610af5565b60408051600160a060020a039092168252519081900360200190f35b34801561025357600080fd5b5061026b600160a060020a0360043516602435610b04565b604080519115158252519081900360200190f35b34801561028b57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022b94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff198b35169b600160a060020a03848d0135169b958601359a919950975060809094019550919350918201918190840183828082843750949750508435955050506020909201359150610b259050565b34801561036557600080fd5b5061037f600160a060020a03600435166024351515610b52565b005b34801561038d57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135610bc4565b34801561040057600080fd5b50610409610e08565b60408051918252519081900360200190f35b34801561042757600080fd5b5061026b600160a060020a0360043581169060243516604435610e0e565b34801561045157600080fd5b5061045a610edc565b6040805160ff9092168252519081900360200190f35b34801561047c57600080fd5b5061037f600160a060020a0360043516610ee1565b34801561049d57600080fd5b5061026b600160a060020a0360043516611030565b3480156104be57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022b9436949293602493928401919081908401838280828437509497505084359550505060209092013591506110459050565b34801561052057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611065565b34801561059357600080fd5b5061026b600160a060020a03600435166024356111c9565b3480156105b757600080fd5b50610409600160a060020a03600435166111d6565b3480156105d857600080fd5b5061026b6004356111f1565b3480156105f057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a031694505050602082013591604081013591506060013561121b565b34801561066357600080fd5b5061022b61137f565b34801561067857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050843595505050602090920135915061138e9050565b3480156106da57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261037f94600160a060020a0381358116956024803596604435909316953695608494920191819084018382808284375094975061158a9650505050505050565b34801561074a57600080fd5b506101a161161d565b34801561075f57600080fd5b50610409600435602435611654565b34801561077a57600080fd5b5061026b600160a060020a036004351660243561171b565b34801561079e57600080fd5b50604080516020601f606435600481810135928301849004840285018401909552818452610409947bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1981351694600160a060020a0360248035919091169560443595369560849493019181908401838280828437509497505084359550505060209092013591506117289050565b34801561083557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a031694505050602082013591604081013591506060013561189f565b3480156108a857600080fd5b50610409600435611a03565b3480156108c057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a91999098506060909101965091945090810192508190840183828082843750949750508435955050506020909201359150611aad9050565b34801561097657600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261026b948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611dff9650505050505050565b3480156109df57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261022b958335953695604494919390910191908190840183828082843750949750611f1b9650505050505050565b348015610a3d57600080fd5b5061026b600160a060020a0360043516602435611ff0565b348015610a6157600080fd5b50610409600160a060020a0360043581169060243516611ffd565b348015610a8857600080fd5b5061037f600160a060020a0360043516612028565b348015610aa957600080fd5b5061037f600160a060020a0360043516612083565b60408051808201909152601281527f436f696e205574696c69747920546f6b656e0000000000000000000000000000602082015281565b600154600160a060020a031681565b6000610b11338484612117565b1515610b1c57600080fd5b50600192915050565b6000610b46610b40610b3b898989898989611728565b611a03565b89611f1b565b98975050505050505050565b600154600160a060020a03163314610b6957600080fd5b600160a060020a0382161515610b7e57600080fd5b600154600160a060020a0383811691161415610b9957600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b6000806000805a9250610bf68963a9059cbb60e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a0382161515610c46576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b610c6e63a9059cbb60e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615610cef576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d28828989612182565b1515610d3357600080fd5b6000861115610dc357610d4d5a849063ffffffff61235e16565b6188b8019250610d6d8232610d68898763ffffffff61237016565b612182565b1515610dc3576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a350600198975050505050505050565b60035490565b600160a060020a0383166000908152600460205260408120548211801590610e595750600160a060020a03841660009081526005602090815260408083203384529091529020548211155b1515610e6457600080fd5b600160a060020a0384166000908152600560209081526040808320338452909152902054610e98908363ffffffff61235e16565b600160a060020a0385166000908152600560209081526040808320338452909152902055610ec7848484612182565b1515610ed257600080fd5b5060019392505050565b601281565b600080548190600160a060020a03163314610efb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050506040513d6020811015610f8957600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b505050506040513d602081101561102957600080fd5b5050505050565b60026020526000908152604090205460ff1681565b600061105d611057610b3b8585611654565b85611f1b565b949350505050565b6000806000805a92506110978963095ea7b360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a03821615156110e7576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b61110f63095ea7b360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611190576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d28828989612117565b6000610b1133848461239b565b600160a060020a031660009081526004602052604090205490565b33600090815260066020908152604080832093835292905220805460ff1916600190811790915590565b6000806000805a925061124d89636618846360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a038216151561129d576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b6112c5636618846360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611346576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d2882898961239b565b600054600160a060020a031681565b6000806000805a92506113a2878787611045565b9150600160a060020a03821615156113f2576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b6113fc8686611654565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff161561147d576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091528082208054600160ff1991821681179092558984529183208054909216179055851115611547576114d65a849063ffffffff61235e16565b6188b80192506114f18232610d68888763ffffffff61237016565b1515611547576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a35060019695505050505050565b3330141561159757600080fd5b30600160a060020a03168160405180828051906020019080838360005b838110156115cc5781810151838201526020016115b4565b50505050905090810190601f1680156115f95780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af4915050151561161757600080fd5b50505050565b60408051808201909152600481527f434f494e00000000000000000000000000000000000000000000000000000000602082015281565b604080516c0100000000000000000000000030026020808301919091527f70de43f1000000000000000000000000000000000000000000000000000000006034830152603882018590526058808301859052835180840390910181526078909201928390528151600093918291908401908083835b602083106116e85780518252601f1990920191602091820191016116c9565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b6000610b11338484612182565b6000308787878787876040516020018088600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040186600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140185815260200184805190602001908083835b602083106117fb5780518252601f1990920191602091820191016117dc565b51815160209384036101000a60001901801990921691161790529201948552508381019290925250604080518084038301815292810190819052825192975095508594508601925090508083835b602083106118685780518252601f199092019160209182019101611849565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209a9950505050505050505050565b6000806000805a92506118d18963d73dd62360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a0382161515611921576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b61194963d73dd62360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff16156119ca576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d288289896124b8565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c80830185905283518084039091018152605c909201928390528151600093918291908401908083835b60208310611a7b5780518252601f199092019160209182019101611a5c565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b6000806000805a9250611ae58a7fcae9ca51000000000000000000000000000000000000000000000000000000008b8b8b8b8b610b25565b9150600160a060020a0382161515611b35576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b611b637fcae9ca51000000000000000000000000000000000000000000000000000000008a8a8a8a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611be4576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091528120805460ff19166001179055881115611c2f57611c24828a8a612117565b1515611c2f57600080fd5b88600160a060020a0316638f4ffcb1838a308b6040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611cc7578181015183820152602001611caf565b50505050905090810190601f168015611cf45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611d1657600080fd5b505af1158015611d2a573d6000803e3d6000fd5b505050506000861115611db957611d485a849063ffffffff61235e16565b6188b8019250611d638232610d68898763ffffffff61237016565b1515611db9576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a35060019998505050505050505050565b6000611e0c338585612117565b1515611e1757600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b83811015611eaa578181015183820152602001611e92565b50505050905090810190601f168015611ed75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b506001979650505050505050565b60008060008084516041141515611f355760009350611fe7565b50505060208201516040830151606084015160001a601b60ff82161015611f5a57601b015b8060ff16601b14158015611f7257508060ff16601c14155b15611f805760009350611fe7565b60408051600080825260208083018085528a905260ff8516838501526060830187905260808301869052925160019360a0808501949193601f19840193928390039091019190865af1158015611fda573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b6000610b113384846124b8565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b600154600160a060020a0316331461203f57600080fd5b600160a060020a038116151561205457600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461209a57600080fd5b600160a060020a03811615156120af57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03808416600081815260056020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000600160a060020a038316151561220a576040805160e560020a62461bcd02815260206004820152602360248201527f496e76616c6964207472616e7366657220726563697069656e7420616464726560448201527f73732e0000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03841660009081526004602052604090205482111561229f576040805160e560020a62461bcd028152602060048201526024808201527f53656e64657220646f6573206e6f74206861766520656e6f7567682062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0384166000908152600460205260409020546122c8908363ffffffff61235e16565b600160a060020a0380861660009081526004602052604080822093909355908516815220546122fd908363ffffffff6124f016565b600160a060020a0380851660008181526004602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b60008282111561236a57fe5b50900390565b600082820283158061238c575082848281151561238957fe5b04145b151561239457fe5b9392505050565b600160a060020a03808416600090815260056020908152604080832093861683529290529081205482106123f657600160a060020a038085166000908152600560209081526040808320938716835292905290812055612453565b600160a060020a0380851660009081526005602090815260408083209387168352929052205461242c908363ffffffff61235e16565b600160a060020a038086166000908152600560209081526040808320938816835292905220555b600160a060020a0384811660008181526005602090815260408083209488168084529482529182902054825190815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35060019392505050565b600160a060020a03808416600090815260056020908152604080832093861683529290529081205461242c908363ffffffff6124f016565b60008282018381101561239457fe005472616e73616374696f6e2068617320616c7265616479206265656e2065786563757465642e0000000000000000000000000000000000000000000000000000496e76616c6964207369676e61747572652070726f76696465642e0000000000a165627a7a72305820c5f31889e3915aad670c448dac3aa2e66d2b27260024d48e62c2b7ab26b2697b0029

Deployed Bytecode Sourcemap

3352:22390:0:-;;;;;;;;;-1:-1:-1;;;3352:22390:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3476:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3476:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3476:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1078:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1078:23:0;;;;;;;;-1:-1:-1;;;;;1078:23:0;;;;;;;;;;;;;;6520:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6520:189:0;-1:-1:-1;;;;;6520:189:0;;;;;;;;;;;;;;;;;;;;;;;;;22261:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22261:401:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22261:401:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22261:401:0;;;;-1:-1:-1;;;;;22261:401:0;;;;;;;;;;;;;-1:-1:-1;22261:401:0;-1:-1:-1;22261:401:0;;;;;-1:-1:-1;22261:401:0;;-1:-1:-1;22261:401:0;;;;;;;;;;;;;;-1:-1:-1;22261:401:0;;-1:-1:-1;;22261:401:0;;;-1:-1:-1;;;22261:401:0;;;;;;-1:-1:-1;22261:401:0;;-1:-1:-1;22261:401:0;2732:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2732:188:0;-1:-1:-1;;;;;2732:188:0;;;;;;;;;;;11558:1381;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11558:1381:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11558:1381:0;;-1:-1:-1;;;11558:1381:0;;-1:-1:-1;;;;;11558:1381:0;;-1:-1:-1;;;11558:1381:0;;;;;;;;;;-1:-1:-1;11558:1381:0;;;;;24437:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24437:120:0;;;;;;;;;;;;;;;;;;;;5940:359;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5940:359:0;-1:-1:-1;;;;;5940:359:0;;;;;;;;;;;;3539:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3539:35:0;;;;;;;;;;;;;;;;;;;;;;;25458:275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25458:275:0;-1:-1:-1;;;;;25458:275:0;;;;;1106:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1106:39:0;-1:-1:-1;;;;;1106:39:0;;;;;20398:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20398:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20398:254:0;;-1:-1:-1;;20398:254:0;;;-1:-1:-1;;;20398:254:0;;;;;;-1:-1:-1;20398:254:0;;-1:-1:-1;20398:254:0;13207:945;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13207:945:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13207:945:0;;-1:-1:-1;;;13207:945:0;;-1:-1:-1;;;;;13207:945:0;;-1:-1:-1;;;13207:945:0;;;;;;;;;;-1:-1:-1;13207:945:0;;;;;7404:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7404:207:0;-1:-1:-1;;;;;7404:207:0;;;;;;;24699:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24699:135:0;-1:-1:-1;;;;;24699:135:0;;;;;18324:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18324:170:0;;;;;15484:982;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15484:982:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15484:982:0;;-1:-1:-1;;;15484:982:0;;-1:-1:-1;;;;;15484:982:0;;-1:-1:-1;;;15484:982:0;;;;;;;;;;-1:-1:-1;15484:982:0;;;;;1053:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1053:20:0;;;;18784:887;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18784:887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18784:887:0;;-1:-1:-1;;18784:887:0;;;-1:-1:-1;;;18784:887:0;;;;;;-1:-1:-1;18784:887:0;;-1:-1:-1;18784:887:0;4925:247;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4925:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4925:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4925:247:0;;-1:-1:-1;4925:247:0;;-1:-1:-1;;;;;;;4925:247:0;3431:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3431:38:0;;;;19879:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19879:235:0;;;;;;;5454:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5454:181:0;-1:-1:-1;;;;;5454:181:0;;;;;;;21305:367;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21305:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21305:367:0;;;;-1:-1:-1;;;;;21305:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21305:367:0;;-1:-1:-1;;21305:367:0;;;-1:-1:-1;;;21305:367:0;;;;;;-1:-1:-1;21305:367:0;;-1:-1:-1;21305:367:0;14354:988;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14354:988:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14354:988:0;;-1:-1:-1;;;14354:988:0;;-1:-1:-1;;;;;14354:988:0;;-1:-1:-1;;;14354:988:0;;;;;;;;;;-1:-1:-1;14354:988:0;;;;;22833:195;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22833:195:0;;;;;16951:1127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16951:1127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16951:1127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16951:1127:0;;;;;;;;;;;-1:-1:-1;16951:1127:0;;;;;-1:-1:-1;16951:1127:0;;-1:-1:-1;16951:1127:0;;;;-1:-1:-1;16951:1127:0;;;;;;;;;;-1:-1:-1;16951:1127:0;;-1:-1:-1;;16951:1127:0;;;-1:-1:-1;;;16951:1127:0;;;;;;-1:-1:-1;16951:1127:0;;-1:-1:-1;16951:1127:0;7921:312;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7921:312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7921:312:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7921:312:0;;-1:-1:-1;7921:312:0;;-1:-1:-1;;;;;;;7921:312:0;23294:986;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23294:986:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23294:986:0;;-1:-1:-1;23294:986:0;;-1:-1:-1;;;;;;;23294:986:0;6953:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6953:207:0;-1:-1:-1;;;;;6953:207:0;;;;;;;25075:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25075:163:0;-1:-1:-1;;;;;25075:163:0;;;;;;;;;;2332:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2332:162:0;-1:-1:-1;;;;;2332:162:0;;;;;1986:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1986:178:0;-1:-1:-1;;;;;1986:178:0;;;;;3476:50;;;;;;;;;;;;;;;;;;;:::o;1078:23::-;;;-1:-1:-1;;;;;1078:23:0;;:::o;6520:189::-;6601:12;6639:39;6648:10;6660:8;6670:7;6639:8;:39::i;:::-;6631:48;;;;;;;;-1:-1:-1;6697:4:0;6520:189;;;;:::o;22261:401::-;22504:17;22546:108;22563:84;22575:71;22592:9;22603:3;22608:6;22616:10;22628:9;22639:6;22575:16;:71::i;:::-;22563:11;:84::i;:::-;22649:4;22546:16;:108::i;:::-;22539:115;22261:401;-1:-1:-1;;;;;;;;22261:401:0:o;2732:188::-;1715:8;;-1:-1:-1;;;;;1715:8:0;1701:10;:22;1693:31;;;;;;-1:-1:-1;;;;;2831:19:0;;;;2823:28;;;;;;2875:8;;-1:-1:-1;;;;;2866:17:0;;;2875:8;;2866:17;;2858:26;;;;;;-1:-1:-1;;;;;2891:13:0;;;;;;;;:6;:13;;;;;:23;;-1:-1:-1;;2891:23:0;;;;;;;;;;2732:188::o;11558:1381::-;11744:4;11850:11;11970:12;12217:14;11864:9;11850:23;;11985:77;12002:10;3759;-1:-1:-1;;;12014:11:0;12027:3;12032:6;11985:77;;;;;;;;;;;;;12044:9;12055:6;11985:16;:77::i;:::-;11970:92;-1:-1:-1;;;;;;12081:18:0;;;;12073:58;;;;;-1:-1:-1;;;;;12073:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12073:58:0;;;;;;;;;;;;;;;12234:65;3759:10;-1:-1:-1;;;12251:11:0;12264:3;12269:6;12234:65;;;;;;;;;;;;;12281:9;12292:6;12234:16;:65::i;:::-;-1:-1:-1;;;;;12319:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;12217:82;;-1:-1:-1;12319:27:0;;12318:28;12310:79;;;;;-1:-1:-1;;;;;12310:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12310:79:0;;;;-1:-1:-1;;;;;;;;;;;12310:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;12400:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;12400:34:0;12430:4;12400:34;;;12486:28;12414:4;12502:3;12507:6;12486:9;:28::i;:::-;12478:37;;;;;;;;12611:1;12599:9;:13;12595:263;;;12727:18;12735:9;12727:3;;:18;:7;:18;:::i;:::-;12719:5;:26;;-1:-1:-1;12768:46:0;12778:4;12784:9;12795:18;:9;12719:26;12795:18;:13;:18;:::i;:::-;12768:9;:46::i;:::-;12760:86;;;;;;;-1:-1:-1;;;;;12760:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12883:26;;-1:-1:-1;;;;;12883:26:0;;;12896:6;;12883:26;;;;;-1:-1:-1;12927:4:0;;11558:1381;-1:-1:-1;;;;;;;;11558:1381:0:o;24437:120::-;24537:12;;24437:120;:::o;5940:359::-;-1:-1:-1;;;;;6070:15:0;;6032:12;6070:15;;;:8;:15;;;;;;:26;-1:-1:-1;6070:26:0;;;:67;;-1:-1:-1;;;;;;6100:14:0;;;;;;:7;:14;;;;;;;;6115:10;6100:26;;;;;;;;:37;-1:-1:-1;6100:37:0;6070:67;6062:76;;;;;;;;-1:-1:-1;;;;;6180:14:0;;;;;;:7;:14;;;;;;;;6195:10;6180:26;;;;;;;;:39;;6211:7;6180:39;:30;:39;:::i;:::-;-1:-1:-1;;;;;6151:14:0;;;;;;:7;:14;;;;;;;;6166:10;6151:26;;;;;;;:68;6238:30;6159:5;6255:3;6260:7;6238:9;:30::i;:::-;6230:39;;;;;;;;-1:-1:-1;6287:4:0;5940:359;;;;;:::o;3539:35::-;3572:2;3539:35;:::o;25458:275::-;25552:19;1634:5;;25552:19;;-1:-1:-1;;;;;1634:5:0;1620:10;:19;1612:28;;;;;;25642:34;;;;;;25670:4;25642:34;;;;;;25584:14;;-1:-1:-1;;;;;;25642:19:0;;;;;:34;;;;;;;;;;;;;;-1:-1:-1;25642:19:0;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;25642:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25642:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25642:34:0;25706:5;;;25687:38;;;;;;-1:-1:-1;;;;;25706:5:0;;;25687:38;;;;;;;;;;;;25642:34;;-1:-1:-1;25687:18:0;;;;;;:38;;;;;25642:34;;25687:38;;;;;;;;;;;:18;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;25687:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25687:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;25458:275:0:o;1106:39::-;;;;;;;;;;;;;;;:::o;20398:254::-;20525:12;20562:82;20579:52;20591:39;20605:13;20620:9;20591:13;:39::i;20579:52::-;20633:10;20562:16;:82::i;:::-;20555:89;20398:254;-1:-1:-1;;;;20398:254:0:o;13207:945::-;13392:4;13415:11;13449:12;13622:14;13429:9;13415:23;;13464:76;13481:10;3814;-1:-1:-1;;;13493:10:0;13505:3;13510:6;13464:76;;;;;;;;;;;;;13522:9;13533:6;13464:16;:76::i;:::-;13449:91;-1:-1:-1;;;;;;13559:18:0;;;;13551:58;;;;;-1:-1:-1;;;;;13551:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13551:58:0;;;;;;;;;;;;;;;13639:64;3814:10;-1:-1:-1;;;13656:10:0;13668:3;13673:6;13639:64;;;;;;;;;;;;;13685:9;13696:6;13639:16;:64::i;:::-;-1:-1:-1;;;;;13723:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;13622:81;;-1:-1:-1;13723:27:0;;13722:28;13714:79;;;;;-1:-1:-1;;;;;13714:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13714:79:0;;;;-1:-1:-1;;;;;;;;;;;13714:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13804:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;13804:34:0;13834:4;13804:34;;;13859:27;13818:4;13874:3;13879:6;13859:8;:27::i;7404:207::-;7494:12;7532:48;7550:10;7562:8;7572:7;7532:17;:48::i;24699:135::-;-1:-1:-1;;;;;24810:16:0;24777:7;24810:16;;;:8;:16;;;;;;;24699:135::o;18324:170::-;18431:10;18395:4;18417:25;;;:13;:25;;;;;;;;:40;;;;;;;:47;;-1:-1:-1;;18417:47:0;18460:4;18417:47;;;;;;18460:4;18324:170::o;15484:982::-;15679:4;15702:11;15736:12;15918:14;15716:9;15702:23;;15751:85;15768:10;3942;-1:-1:-1;;;15780:19:0;15801:3;15806:6;15751:85;;;;;;;;;;;;;15818:9;15829:6;15751:16;:85::i;:::-;15736:100;-1:-1:-1;;;;;;15855:18:0;;;;15847:58;;;;;-1:-1:-1;;;;;15847:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15847:58:0;;;;;;;;;;;;;;;15935:73;3942:10;-1:-1:-1;;;15952:19:0;15973:3;15978:6;15935:73;;;;;;;;;;;;;15990:9;16001:6;15935:16;:73::i;:::-;-1:-1:-1;;;;;16028:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;15918:90;;-1:-1:-1;16028:27:0;;16027:28;16019:79;;;;;-1:-1:-1;;;;;16019:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16019:79:0;;;;-1:-1:-1;;;;;;;;;;;16019:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16109:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;16109:34:0;16139:4;16109:34;;;16164:36;16123:4;16188:3;16193:6;16164:17;:36::i;1053:20::-;;;-1:-1:-1;;;;;1053:20:0;;:::o;18784:887::-;18929:4;18951:11;18985:12;19145:14;18965:9;18951:23;;19000:55;19018:10;19030:13;19045:9;19000:17;:55::i;:::-;18985:70;-1:-1:-1;;;;;;19074:18:0;;;;19066:58;;;;;-1:-1:-1;;;;;19066:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19066:58:0;;;;;;;;;;;;;;;19162:39;19176:13;19191:9;19162:13;:39::i;:::-;-1:-1:-1;;;;;19221:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;19145:56;;-1:-1:-1;19221:27:0;;19220:28;19212:79;;;;;-1:-1:-1;;;;;19212:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19212:79:0;;;;-1:-1:-1;;;;;;;;;;;19212:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19302:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;:34;;19332:4;-1:-1:-1;;19302:34:0;;;;;;;;19349;;;;;;:41;;;;;;;;19415:13;;19411:179;;;19459:18;19467:9;19459:3;;:18;:7;:18;:::i;:::-;19451:5;:26;;-1:-1:-1;19500:46:0;19510:4;19516:9;19527:18;:9;19451:26;19527:18;:13;:18;:::i;19500:46::-;19492:86;;;;;;;-1:-1:-1;;;;;19492:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19615:26;;-1:-1:-1;;;;;19615:26:0;;;19628:6;;19615:26;;;;;-1:-1:-1;19659:4:0;;18784:887;-1:-1:-1;;;;;;18784:887:0:o;4925:247::-;5050:10;5072:4;5050:27;;5042:36;;;;;;5105:4;-1:-1:-1;;;;;5097:26:0;5124:5;5097:33;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5097:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5089:42;;;;;;;;4925:247;;;;:::o;3431:38::-;;;;;;;;;;;;;;;;;;;:::o;19879:235::-;20033:72;;;;20058:4;20033:72;;;;;;;;;20065:13;20033:72;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20033:72:0;;;;;;;;20023:83;;19984:14;;20033:72;;;20023:83;;;;;20033:72;20023:83;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;20023:83:0;;;;;;;;;;;;-1:-1:-1;;;;;;19879:235:0:o;5454:181::-;5531:12;5569:35;5579:10;5591:3;5596:7;5569:9;:35::i;21305:367::-;21527:14;21602:4;21609:9;21620:3;21625:6;21633:10;21645:9;21656:6;21577:86;;;;;;-1:-1:-1;;;;;21577:86:0;-1:-1:-1;;;;;21577:86:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21577:86:0;-1:-1:-1;;;;;21577:86:0;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;21577:86:0;;;;;-1:-1:-1;21577:86:0;;;;;;;-1:-1:-1;21577:86:0;;;26:21:-1;;;22:32;;6:49;;21577:86:0;;;;;;;21567:97;;21577:86;;-1:-1:-1;21577:86:0;-1:-1:-1;21577:86:0;;-1:-1:-1;21567:97:0;;;-1:-1:-1;21567:97:0;-1:-1:-1;21567:97:0;21577:86;21567:97;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;21567:97:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;21305:367:0:o;14354:988::-;14547:4;14570:11;14604:12;14786:14;14584:9;14570:23;;14619:85;14636:10;3878;-1:-1:-1;;;14648:19:0;14669:3;14674:6;14619:85;;;;;;;;;;;;;14686:9;14697:6;14619:16;:85::i;:::-;14604:100;-1:-1:-1;;;;;;14723:18:0;;;;14715:58;;;;;-1:-1:-1;;;;;14715:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14715:58:0;;;;;;;;;;;;;;;14803:73;3878:10;-1:-1:-1;;;14820:19:0;14841:3;14846:6;14803:73;;;;;;;;;;;;;14858:9;14869:6;14803:16;:73::i;:::-;-1:-1:-1;;;;;14896:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;14786:90;;-1:-1:-1;14896:27:0;;14895:28;14887:79;;;;;-1:-1:-1;;;;;14887:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14887:79:0;;;;-1:-1:-1;;;;;;;;;;;14887:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14977:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;14977:34:0;15007:4;14977:34;;;15032:36;14991:4;15056:3;15061:6;15032:17;:36::i;22833:195::-;22960:59;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22960:59:0;;;;;;;;22950:70;;22909:16;;22960:59;;;22950:70;;;;;22960:59;22950:70;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;22950:70:0;;;;;;;;;;;;-1:-1:-1;;;;;22833:195:0:o;16951:1127::-;17169:4;17192:11;17226:12;17414:14;17206:9;17192:23;-1:-1:-1;17241:91:0;17258:10;17270:17;17289:3;17294:6;17302:10;17314:9;17325:6;17241:16;:91::i;:::-;17226:106;-1:-1:-1;;;;;;17351:18:0;;;;17343:58;;;;;-1:-1:-1;;;;;17343:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17343:58:0;;;;;;;;;;;;;;;17431:79;17448:17;17467:3;17472:6;17480:10;17492:9;17503:6;17431:16;:79::i;:::-;-1:-1:-1;;;;;17530:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;17414:96;;-1:-1:-1;17530:27:0;;17529:28;17521:79;;;;;-1:-1:-1;;;;;17521:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17521:79:0;;;;-1:-1:-1;;;;;;;;;;;17521:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17611:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;17611:34:0;17641:4;17611:34;;;17662:10;;17658:52;;;17682:27;17691:4;17697:3;17702:6;17682:8;:27::i;:::-;17674:36;;;;;;;;17744:3;-1:-1:-1;;;;;17721:43:0;;17765:4;17771:6;17787:4;17794:10;17721:84;;;;;-1:-1:-1;;;17721:84:0;;;;;;;-1:-1:-1;;;;;17721:84:0;-1:-1:-1;;;;;17721:84:0;;;;;;;;;;;-1:-1:-1;;;;;17721:84:0;-1:-1:-1;;;;;17721:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17721:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17721:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17721:84:0;;;;17834:1;17822:9;:13;17818:179;;;17866:18;17874:9;17866:3;;:18;:7;:18;:::i;:::-;17858:5;:26;;-1:-1:-1;17907:46:0;17917:4;17923:9;17934:18;:9;17858:26;17934:18;:13;:18;:::i;17907:46::-;17899:86;;;;;;;-1:-1:-1;;;;;17899:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18022:26;;-1:-1:-1;;;;;18022:26:0;;;18035:6;;18022:26;;;;;-1:-1:-1;18066:4:0;;16951:1127;-1:-1:-1;;;;;;;;;16951:1127:0:o;7921:312::-;8022:12;8061:39;8070:10;8082:8;8092:7;8061:8;:39::i;:::-;8053:48;;;;;;;;8112:91;;;;;8161:10;8112:91;;;;;;;;;;;;8190:4;8112:91;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8112:48:0;;;;;8161:10;8173:7;;8190:4;8197:5;;8112:91;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8112:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8112:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;8221:4:0;;7921:312;-1:-1:-1;;;;;;;7921:312:0:o;23294:986::-;23388:24;23431:9;23451;23471:7;23493:3;:10;23507:2;23493:16;;23489:39;;;23526:1;23511:17;;;;23489:39;-1:-1:-1;;;23583:2:0;23574:12;;23568:19;23621:2;23612:12;;23606:19;23866:2;23857:12;;23851:19;23848:1;23843:28;24167:2;24163:6;;;;24159:19;;;24176:2;24171:7;24159:19;24193:1;:7;;24198:2;24193:7;;:18;;;;;24204:1;:7;;24209:2;24204:7;;24193:18;24189:41;;;24228:1;24213:17;;;;24189:41;24248:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24248:24:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24248:24:0;;;;;;;;24241:31;;23294:986;;;;;;;;:::o;6953:207::-;7043:12;7081:48;7099:10;7111:8;7121:7;7081:17;:48::i;25075:163::-;-1:-1:-1;;;;;25205:15:0;;;25172:7;25205:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;25075:163::o;2332:162::-;1715:8;;-1:-1:-1;;;;;1715:8:0;1701:10;:22;1693:31;;;;;;-1:-1:-1;;;;;2431:26:0;;;;2423:35;;;;;;2465:8;:23;;-1:-1:-1;;2465:23:0;-1:-1:-1;;;;;2465:23:0;;;;;;;;;;2332:162::o;1986:178::-;1634:5;;-1:-1:-1;;;;;1634:5:0;1620:10;:19;1612:28;;;;;;-1:-1:-1;;;;;2063:22:0;;;;2055:31;;;;;;2119:5;;;2098:37;;-1:-1:-1;;;;;2098:37:0;;;;2119:5;;;2098:37;;;2142:5;:16;;-1:-1:-1;;2142:16:0;-1:-1:-1;;;;;2142:16:0;;;;;;;;;;1986:178::o;9375:246::-;-1:-1:-1;;;;;9505:15:0;;;9475:12;9505:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;:35;;;9556;;;;;;;9475:12;;9505:25;:15;9556:35;;;;;;;;;;;-1:-1:-1;9609:4:0;9375:246;;;;;:::o;8589:481::-;8683:12;-1:-1:-1;;;;;8722:17:0;;;;8713:66;;;;;-1:-1:-1;;;;;8713:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8798:15:0;;;;;;:8;:15;;;;;;:26;-1:-1:-1;8798:26:0;8790:75;;;;;-1:-1:-1;;;;;8790:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8904:15:0;;;;;;:8;:15;;;;;;:28;;8924:7;8904:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;8886:15:0;;;;;;;:8;:15;;;;;;:46;;;;8959:13;;;;;;;:26;;8977:7;8959:26;:17;:26;:::i;:::-;-1:-1:-1;;;;;8943:13:0;;;;;;;:8;:13;;;;;;;;;:42;;;;9011:29;;;;;;;8943:13;;9011:29;;;;;;;;;;;;;-1:-1:-1;9058:4:0;8589:481;;;;;:::o;575:113::-;633:7;656:6;;;;649:14;;;;-1:-1:-1;677:5:0;;;575:113::o;146:147::-;204:7;232:5;;;251:6;;;:20;;;270:1;265;261;:5;;;;;;;;:10;251:20;244:28;;;;;;286:1;146:147;-1:-1:-1;;;146:147:0:o;10537:400::-;-1:-1:-1;;;;;10679:15:0;;;10645:12;10679:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;:36;-1:-1:-1;10675:153:0;;-1:-1:-1;;;;;10717:15:0;;;10745:1;10717:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;:29;10675:153;;;-1:-1:-1;;;;;10790:15:0;;;;;;;:7;:15;;;;;;;;:25;;;;;;;;;;:38;;10820:7;10790:38;:29;:38;:::i;:::-;-1:-1:-1;;;;;10762:15:0;;;;;;;:7;:15;;;;;;;;:25;;;;;;;;;:66;10675:153;-1:-1:-1;;;;;10854:53:0;;;10881:15;;;;:7;:15;;;;;;;;10854:53;;;10881:25;;;;;;;;;;;10854:53;;;;;;;;;;;;;;;;;-1:-1:-1;10925:4:0;10537:400;;;;;:::o;9923:303::-;-1:-1:-1;;;;;10089:15:0;;;10031:12;10089:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;:38;;10119:7;10089:38;:29;:38;:::i;696:133::-;754:7;782:5;;;801:6;;;;794:14;;

Swarm Source

bzzr://c5f31889e3915aad670c448dac3aa2e66d2b27260024d48e62c2b7ab26b2697b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Coin is a cross-chain P2P decentralized wallet, exchange, and assistant powered by atomic swap and artificial intelligence technology.

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.