ETH Price: $2,468.14 (+0.95%)

Contract

0x4f5704D9D2cbCcAf11e70B34048d41A0d572993F
 

Overview

ETH Balance

6.99922729473246814 ETH

Eth Value

$17,275.06 (@ $2,468.14/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve197622932024-04-29 16:55:23166 days ago1714409723IN
0x4f5704D9...0d572993F
0 ETH0.0002587210.72836925
Approve187709132023-12-12 15:11:11305 days ago1702393871IN
0x4f5704D9...0d572993F
0 ETH0.0013677456.71532621
Approve182618592023-10-02 9:09:47376 days ago1696237787IN
0x4f5704D9...0d572993F
0 ETH0.0003194813.24797316
Approve177061062023-07-16 13:20:59454 days ago1689513659IN
0x4f5704D9...0d572993F
0 ETH0.0006379126.45213699
Approve174041352023-06-04 1:57:11497 days ago1685843831IN
0x4f5704D9...0d572993F
0 ETH0.0004436518.3965827
Approve171100952023-04-23 16:07:23538 days ago1682266043IN
0x4f5704D9...0d572993F
0 ETH0.0010429343.24677129
Approve169624412023-04-02 15:58:35559 days ago1680451115IN
0x4f5704D9...0d572993F
0 ETH0.0005692123.60337725
Approve165253242023-01-31 7:29:59621 days ago1675150199IN
0x4f5704D9...0d572993F
0 ETH0.000374815.54174415
Approve152884572022-08-06 11:29:27798 days ago1659785367IN
0x4f5704D9...0d572993F
0 ETH0.000119964.97439883
Approve150905212022-07-06 18:18:14829 days ago1657131494IN
0x4f5704D9...0d572993F
0 ETH0.0007822532.4372585
Approve141801062022-02-10 19:08:23975 days ago1644520103IN
0x4f5704D9...0d572993F
0 ETH0.00428986177.88465997
Approve134003612021-10-11 23:55:571097 days ago1633996557IN
0x4f5704D9...0d572993F
0 ETH0.00507677109.64013264
Approve133976812021-10-11 13:58:371097 days ago1633960717IN
0x4f5704D9...0d572993F
0 ETH0.0040793588.09932027
Approve133964932021-10-11 9:26:011097 days ago1633944361IN
0x4f5704D9...0d572993F
0 ETH0.0031631968.31362866
Approve133772822021-10-08 9:03:191100 days ago1633683799IN
0x4f5704D9...0d572993F
0 ETH0.0041332989.26438778
Approve133768262021-10-08 7:22:031101 days ago1633677723IN
0x4f5704D9...0d572993F
0 ETH0.00221884.00264035
Approve133768242021-10-08 7:21:451101 days ago1633677705IN
0x4f5704D9...0d572993F
0 ETH0.00278513105.48158113
Approve133768242021-10-08 7:21:451101 days ago1633677705IN
0x4f5704D9...0d572993F
0 ETH0.00292295110.70120053
Approve133768242021-10-08 7:21:451101 days ago1633677705IN
0x4f5704D9...0d572993F
0 ETH0.00271961103
Approve133768242021-10-08 7:21:451101 days ago1633677705IN
0x4f5704D9...0d572993F
0 ETH0.0022071283.59046276
Approve133768242021-10-08 7:21:451101 days ago1633677705IN
0x4f5704D9...0d572993F
0 ETH0.0038462183.06439069
Approve133737672021-10-07 19:48:481101 days ago1633636128IN
0x4f5704D9...0d572993F
0 ETH0.0039869150.99618102
Approve133737632021-10-07 19:47:481101 days ago1633636068IN
0x4f5704D9...0d572993F
0 ETH0.0064126138.48912632
Approve133734092021-10-07 18:31:291101 days ago1633631489IN
0x4f5704D9...0d572993F
0 ETH0.0057057123.22279122
Approve133728962021-10-07 16:32:431101 days ago1633624363IN
0x4f5704D9...0d572993F
0 ETH0.00730633157.79068441
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
207860932024-09-19 17:20:2323 days ago1726766423
0x4f5704D9...0d572993F
0.29756313 ETH
202934172024-07-12 22:29:2392 days ago1720823363
0x4f5704D9...0d572993F
0.40335543 ETH
197489472024-04-27 20:07:47168 days ago1714248467
0x4f5704D9...0d572993F
0.00648986 ETH
197041302024-04-21 13:39:11174 days ago1713706751
0x4f5704D9...0d572993F
0.07 ETH
196831052024-04-18 15:01:47177 days ago1713452507
0x4f5704D9...0d572993F
0.15 ETH
196613002024-04-15 13:46:59180 days ago1713188819
0x4f5704D9...0d572993F
0.1 ETH
196464952024-04-13 11:57:11182 days ago1713009431
0x4f5704D9...0d572993F
0.01607536 ETH
196444002024-04-13 4:53:59183 days ago1712984039
0x4f5704D9...0d572993F
0.21421129 ETH
196439662024-04-13 3:26:11183 days ago1712978771
0x4f5704D9...0d572993F
0.05385502 ETH
196437602024-04-13 2:44:35183 days ago1712976275
0x4f5704D9...0d572993F
0.05953524 ETH
196437582024-04-13 2:44:11183 days ago1712976251
0x4f5704D9...0d572993F
0.05953524 ETH
196437392024-04-13 2:40:23183 days ago1712976023
0x4f5704D9...0d572993F
0.015 ETH
196437362024-04-13 2:39:47183 days ago1712975987
0x4f5704D9...0d572993F
0.00468653 ETH
196437322024-04-13 2:38:59183 days ago1712975939
0x4f5704D9...0d572993F
0.00312636 ETH
196437242024-04-13 2:37:23183 days ago1712975843
0x4f5704D9...0d572993F
0.00156564 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.32844363 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.00000103 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.00000103 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.00000172 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.00000172 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.00000287 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.00000287 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.00000479 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.00000479 ETH
196436262024-04-13 2:17:23183 days ago1712974643
0x4f5704D9...0d572993F
0.00000798 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WETH10

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-22
*/

// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (C) 2015, 2016, 2017 Dapphub
// Adapted by Ethereum Community 2020
pragma solidity 0.7.6;



interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function decimals() external returns (uint8);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}



interface IERC2612 {
    /**
     * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);
}

interface IERC3156FlashBorrower {

    /**
     * @dev Receive a flash loan.
     * @param initiator The initiator of the loan.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @param fee The additional amount of tokens to repay.
     * @param data Arbitrary data structure, intended to contain user-defined parameters.
     * @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan"
     */
    function onFlashLoan(
        address initiator,
        address token,
        uint256 amount,
        uint256 fee,
        bytes calldata data
    ) external returns (bytes32);
}


interface IERC3156FlashLender {

    /**
     * @dev The amount of currency available to be lended.
     * @param token The loan currency.
     * @return The amount of `token` that can be borrowed.
     */
    function maxFlashLoan(
        address token
    ) external view returns (uint256);

    /**
     * @dev The fee to be charged for a given loan.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @return The amount of `token` to be charged for the loan, on top of the returned principal.
     */
    function flashFee(
        address token,
        uint256 amount
    ) external view returns (uint256);

    /**
     * @dev Initiate a flash loan.
     * @param receiver The receiver of the tokens in the loan, and the receiver of the callback.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @param data Arbitrary data structure, intended to contain user-defined parameters.
     */
    function flashLoan(
        IERC3156FlashBorrower receiver,
        address token,
        uint256 amount,
        bytes calldata data
    ) external returns (bool);
}

/// @dev Wrapped Ether v10 (WETH10) is an Ether (ETH) ERC-20 wrapper. You can `deposit` ETH and obtain an WETH10 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ETH from WETH10, which will then burn WETH10 token in your wallet. The amount of WETH10 token in any wallet is always identical to the
/// balance of ETH deposited minus the ETH withdrawn with that specific wallet.
interface IWETH10 is IERC20, IERC2612, IERC3156FlashLender {

    /// @dev Returns current amount of flash-minted WETH10 token.
    function flashMinted() external view returns(uint256);

    /// @dev `msg.value` of ETH sent to this contract grants caller account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to caller account.
    function deposit() external payable;

    /// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to `to` account.
    function depositTo(address to) external payable;

    /// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to the same.
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account. 
    /// Requirements:
    ///   - caller account must have at least `value` balance of WETH10 token.
    function withdraw(uint256 value) external;

    /// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to account (`to`).
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account.
    /// Requirements:
    ///   - caller account must have at least `value` balance of WETH10 token.
    function withdrawTo(address payable to, uint256 value) external;

    /// @dev Burn `value` WETH10 token from account (`from`) and withdraw matching ETH to account (`to`).
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from account (`from`).
    /// Requirements:
    ///   - `from` account must have at least `value` balance of WETH10 token.
    ///   - `from` account must have approved caller to spend at least `value` of WETH10 token, unless `from` and caller are the same account.
    function withdrawFrom(address from, address payable to, uint256 value) external;

    /// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on *transferAndCall* format, see https://github.com/ethereum/EIPs/issues/677.
    function depositToAndCall(address to, bytes calldata data) external payable returns (bool);

    /// @dev Sets `value` as allowance of `spender` account over caller account's WETH10 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` WETH10 token from caller's account to account (`to`), 
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WETH10 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}

interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

/// @dev Wrapped Ether v10 (WETH10) is an Ether (ETH) ERC-20 wrapper. You can `deposit` ETH and obtain an WETH10 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ETH from WETH10, which will then burn WETH10 token in your wallet. The amount of WETH10 token in any wallet is always identical to the
/// balance of ETH deposited minus the ETH withdrawn with that specific wallet.
contract WETH10 is IWETH10 {

    string public constant name = "WETH10";
    string public constant symbol = "WETH10";
    uint8  public override constant decimals = 18;

    bytes32 public immutable CALLBACK_SUCCESS = keccak256("ERC3156FlashBorrower.onFlashLoan");
    bytes32 public immutable PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    /// @dev Records amount of WETH10 token owned by account.
    mapping (address => uint256) public override balanceOf;

    /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
    /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
    mapping (address => uint256) public override nonces;

    /// @dev Records number of WETH10 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping (address => mapping (address => uint256)) public override allowance;

    /// @dev Current amount of flash-minted WETH10 token.
    uint256 public override flashMinted;
    
    /// @dev Returns the total supply of WETH10 token as the ETH held in this contract.
    function totalSupply() external view override returns(uint256) {
        return address(this).balance + flashMinted;
    }

    /// @dev Fallback, `msg.value` of ETH sent to this contract grants caller account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to caller account.
    receive() external payable {
        // _mintTo(msg.sender, msg.value);
        balanceOf[msg.sender] += msg.value;
        emit Transfer(address(0), msg.sender, msg.value);
    }

    /// @dev `msg.value` of ETH sent to this contract grants caller account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to caller account.
    function deposit() external override payable {
        // _mintTo(msg.sender, msg.value);
        balanceOf[msg.sender] += msg.value;
        emit Transfer(address(0), msg.sender, msg.value);
    }

    /// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to `to` account.
    function depositTo(address to) external override payable {
        // _mintTo(to, msg.value);
        balanceOf[to] += msg.value;
        emit Transfer(address(0), to, msg.value);
    }

    /// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on *transferAndCall* format, see https://github.com/ethereum/EIPs/issues/677.
    function depositToAndCall(address to, bytes calldata data) external override payable returns (bool success) {
        // _mintTo(to, msg.value);
        balanceOf[to] += msg.value;
        emit Transfer(address(0), to, msg.value);

        return ITransferReceiver(to).onTokenTransfer(msg.sender, msg.value, data);
    }

    /// @dev Return the amount of WETH10 token that can be flash-lent.
    function maxFlashLoan(address token) external view override returns (uint256) {
        return token == address(this) ? type(uint112).max - flashMinted : 0; // Can't underflow
    }

    /// @dev Return the fee (zero) for flash-lending an amount of WETH10 token.
    function flashFee(address token, uint256) external view override returns (uint256) {
        require(token == address(this), "WETH: flash mint only WETH10");
        return 0;
    }

    /// @dev Flash lends `value` WETH10 token to the receiver address.
    /// By the end of the transaction, `value` WETH10 token will be burned from the receiver.
    /// The flash-minted WETH10 token is not backed by real ETH, but can be withdrawn as such up to the ETH balance of this contract.
    /// Arbitrary data can be passed as a bytes calldata parameter.
    /// Emits {Approval} event to reflect reduced allowance `value` for this contract to spend from receiver account (`receiver`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits two {Transfer} events for minting and burning of the flash-minted amount.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `value` must be less or equal to type(uint112).max.
    ///   - The total of all flash loans in a tx must be less or equal to type(uint112).max.
    function flashLoan(IERC3156FlashBorrower receiver, address token, uint256 value, bytes calldata data) external override returns(bool) {
        require(token == address(this), "WETH: flash mint only WETH10");
        require(value <= type(uint112).max, "WETH: individual loan limit exceeded");
        flashMinted = flashMinted + value;
        require(flashMinted <= type(uint112).max, "WETH: total loan limit exceeded");
        
        // _mintTo(address(receiver), value);
        balanceOf[address(receiver)] += value;
        emit Transfer(address(0), address(receiver), value);

        require(
            receiver.onFlashLoan(msg.sender, address(this), value, 0, data) == CALLBACK_SUCCESS,
            "WETH: flash loan failed"
        );
        
        // _decreaseAllowance(address(receiver), address(this), value);
        uint256 allowed = allowance[address(receiver)][address(this)];
        if (allowed != type(uint256).max) {
            require(allowed >= value, "WETH: request exceeds allowance");
            uint256 reduced = allowed - value;
            allowance[address(receiver)][address(this)] = reduced;
            emit Approval(address(receiver), address(this), reduced);
        }

        // _burnFrom(address(receiver), value);
        uint256 balance = balanceOf[address(receiver)];
        require(balance >= value, "WETH: burn amount exceeds balance");
        balanceOf[address(receiver)] = balance - value;
        emit Transfer(address(receiver), address(0), value);
        
        flashMinted = flashMinted - value;
        return true;
    }

    /// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to the same.
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account. 
    /// Requirements:
    ///   - caller account must have at least `value` balance of WETH10 token.
    function withdraw(uint256 value) external override {
        // _burnFrom(msg.sender, value);
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "WETH: burn amount exceeds balance");
        balanceOf[msg.sender] = balance - value;
        emit Transfer(msg.sender, address(0), value);

        // _transferEther(msg.sender, value);        
        (bool success, ) = msg.sender.call{value: value}("");
        require(success, "WETH: ETH transfer failed");
    }

    /// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to account (`to`).
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account.
    /// Requirements:
    ///   - caller account must have at least `value` balance of WETH10 token.
    function withdrawTo(address payable to, uint256 value) external override {
        // _burnFrom(msg.sender, value);
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "WETH: burn amount exceeds balance");
        balanceOf[msg.sender] = balance - value;
        emit Transfer(msg.sender, address(0), value);

        // _transferEther(to, value);        
        (bool success, ) = to.call{value: value}("");
        require(success, "WETH: ETH transfer failed");
    }

    /// @dev Burn `value` WETH10 token from account (`from`) and withdraw matching ETH to account (`to`).
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from account (`from`).
    /// Requirements:
    ///   - `from` account must have at least `value` balance of WETH10 token.
    ///   - `from` account must have approved caller to spend at least `value` of WETH10 token, unless `from` and caller are the same account.
    function withdrawFrom(address from, address payable to, uint256 value) external override {
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "WETH: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }
        
        // _burnFrom(from, value);
        uint256 balance = balanceOf[from];
        require(balance >= value, "WETH: burn amount exceeds balance");
        balanceOf[from] = balance - value;
        emit Transfer(from, address(0), value);

        // _transferEther(to, value);        
        (bool success, ) = to.call{value: value}("");
        require(success, "WETH: Ether transfer failed");
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's WETH10 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's WETH10 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        
        return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
    }

    /// @dev Sets `value` as allowance of `spender` account over `owner` account's WETH10 token, given `owner` account's signed approval.
    /// Emits {Approval} event.
    /// Requirements:
    ///   - `deadline` must be timestamp in future.
    ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
    ///   - the signature must use `owner` account's current nonce (see {nonces}).
    ///   - the signer cannot be zero address and must be `owner` account.
    /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
    /// WETH10 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(block.timestamp <= deadline, "WETH: Expired permit");

        uint256 chainId;
        assembly {chainId := chainid()}
        bytes32 DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));

        bytes32 hashStruct = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                owner,
                spender,
                value,
                nonces[owner]++,
                deadline));

        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashStruct));

        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0) && signer == owner, "WETH: invalid permit");

        // _approve(owner, spender, value);
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /// @dev Moves `value` WETH10 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WETH10 token.
    function transfer(address to, uint256 value) external override returns (bool) {
        // _transferFrom(msg.sender, to, value);
        if (to != address(0)) { // Transfer
            uint256 balance = balanceOf[msg.sender];
            require(balance >= value, "WETH: transfer amount exceeds balance");

            balanceOf[msg.sender] = balance - value;
            balanceOf[to] += value;
            emit Transfer(msg.sender, to, value);
        } else { // Withdraw
            uint256 balance = balanceOf[msg.sender];
            require(balance >= value, "WETH: burn amount exceeds balance");
            balanceOf[msg.sender] = balance - value;
            emit Transfer(msg.sender, address(0), value);
            
            (bool success, ) = msg.sender.call{value: value}("");
            require(success, "WETH: ETH transfer failed");
        }
        
        return true;
    }

    /// @dev Moves `value` WETH10 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of WETH10 token.
    ///   - `from` account must have approved caller to spend at least `value` of WETH10 token, unless `from` and caller are the same account.
    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "WETH: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }
        
        // _transferFrom(from, to, value);
        if (to != address(0)) { // Transfer
            uint256 balance = balanceOf[from];
            require(balance >= value, "WETH: transfer amount exceeds balance");

            balanceOf[from] = balance - value;
            balanceOf[to] += value;
            emit Transfer(from, to, value);
        } else { // Withdraw
            uint256 balance = balanceOf[from];
            require(balance >= value, "WETH: burn amount exceeds balance");
            balanceOf[from] = balance - value;
            emit Transfer(from, address(0), value);
        
            (bool success, ) = msg.sender.call{value: value}("");
            require(success, "WETH: ETH transfer failed");
        }
        
        return true;
    }

    /// @dev Moves `value` WETH10 token from caller's account to account (`to`), 
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WETH10 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
        // _transferFrom(msg.sender, to, value);
        if (to != address(0)) { // Transfer
            uint256 balance = balanceOf[msg.sender];
            require(balance >= value, "WETH: transfer amount exceeds balance");

            balanceOf[msg.sender] = balance - value;
            balanceOf[to] += value;
            emit Transfer(msg.sender, to, value);
        } else { // Withdraw
            uint256 balance = balanceOf[msg.sender];
            require(balance >= value, "WETH: burn amount exceeds balance");
            balanceOf[msg.sender] = balance - value;
            emit Transfer(msg.sender, address(0), value);
        
            (bool success, ) = msg.sender.call{value: value}("");
            require(success, "WETH: ETH transfer failed");
        }

        return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CALLBACK_SUCCESS","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"depositTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"depositToAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"flashFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC3156FlashBorrower","name":"receiver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"flashLoan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flashMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"maxFlashLoan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdrawFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd96080527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960a05234801561005857600080fd5b5060805160a051611feb61008660003980610d995280611c5a52508061119552806115a65250611feb6000f3fe60806040526004361061016a5760003560e01c806370a08231116100d1578063a9059cbb1161008a578063d0e30db011610064578063d0e30db014610733578063d505accf1461073b578063d9d98ce414610799578063dd62ed3e146107d2576101aa565b8063a9059cbb14610644578063b760faf91461067d578063cae9ca51146106a3576101aa565b806370a08231146105715780637ecebe00146105a45780638237e538146105d75780638b28d32f146105ec5780639555a9421461060157806395d89b41146101af576101aa565b806330adf81f1161012357806330adf81f14610355578063313ce5671461036a5780634000aea0146103955780635cffe9de146104255780635ddb7d7e146104c0578063613255ab1461053e576101aa565b806306fdde03146101af578063095ea7b31461023957806318160ddd14610286578063205c2878146102ad57806323b872dd146102e85780632e1a7d4d1461032b576101aa565b366101aa573360008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a3005b600080fd5b3480156101bb57600080fd5b506101c461080d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101fe5781810151838201526020016101e6565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024557600080fd5b506102726004803603604081101561025c57600080fd5b506001600160a01b03813516906020013561082f565b604080519115158252519081900360200190f35b34801561029257600080fd5b5061029b610883565b60408051918252519081900360200190f35b3480156102b957600080fd5b506102e6600480360360408110156102d057600080fd5b506001600160a01b03813516906020013561088b565b005b3480156102f457600080fd5b506102726004803603606081101561030b57600080fd5b506001600160a01b038135811691602081013590911690604001356109ac565b34801561033757600080fd5b506102e66004803603602081101561034e57600080fd5b5035610c80565b34801561036157600080fd5b5061029b610d97565b34801561037657600080fd5b5061037f610dbb565b6040805160ff9092168252519081900360200190f35b3480156103a157600080fd5b50610272600480360360608110156103b857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156103e757600080fd5b8201836020820111156103f957600080fd5b803590602001918460018302840111600160201b8311171561041a57600080fd5b509092509050610dc0565b34801561043157600080fd5b506102726004803603608081101561044857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561048257600080fd5b82018360208201111561049457600080fd5b803590602001918460018302840111600160201b831117156104b557600080fd5b50909250905061104a565b610272600480360360408110156104d657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561050057600080fd5b82018360208201111561051257600080fd5b803590602001918460018302840111600160201b8311171561053357600080fd5b509092509050611458565b34801561054a57600080fd5b5061029b6004803603602081101561056157600080fd5b50356001600160a01b0316611554565b34801561057d57600080fd5b5061029b6004803603602081101561059457600080fd5b50356001600160a01b0316611580565b3480156105b057600080fd5b5061029b600480360360208110156105c757600080fd5b50356001600160a01b0316611592565b3480156105e357600080fd5b5061029b6115a4565b3480156105f857600080fd5b5061029b6115c8565b34801561060d57600080fd5b506102e66004803603606081101561062457600080fd5b506001600160a01b038135811691602081013590911690604001356115ce565b34801561065057600080fd5b506102726004803603604081101561066757600080fd5b506001600160a01b0381351690602001356117f7565b6102e66004803603602081101561069357600080fd5b50356001600160a01b03166119ca565b3480156106af57600080fd5b50610272600480360360608110156106c657600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156106f557600080fd5b82018360208201111561070757600080fd5b803590602001918460018302840111600160201b8311171561072857600080fd5b509092509050611a0f565b6102e6611ae4565b34801561074757600080fd5b506102e6600480360360e081101561075e57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b1f565b3480156107a557600080fd5b5061029b600480360360408110156107bc57600080fd5b506001600160a01b038135169060200135611e66565b3480156107de57600080fd5b5061029b600480360360408110156107f557600080fd5b506001600160a01b0381358116916020013516611ece565b6040518060400160405280600681526020016505745544831360d41b81525081565b3360008181526002602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020611f75833981519152928290030190a350600192915050565b600354470190565b33600090815260208190526040902054818110156108da5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a36040516000906001600160a01b0385169084908381818185875af1925050503d806000811461095d576040519150601f19603f3d011682016040523d82523d6000602084013e610962565b606091505b50509050806109a6576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505050565b60006001600160a01b0384163314610a91576001600160a01b03841660009081526002602090815260408083203384529091529020546000198114610a8f5782811015610a40576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038516600081815260026020908152604080832033808552908352928190208786039081905581518181529151909492600080516020611f75833981519152928290030190a3505b505b6001600160a01b03831615610b4f576001600160a01b03841660009081526020819052604090205482811015610af85760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b6001600160a01b03808616600081815260208181526040808320888703905593881680835291849020805488019055835187815293519193600080516020611f55833981519152929081900390910190a350610c76565b6001600160a01b03841660009081526020819052604090205482811015610ba75760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b038516600081815260208181526040808320878603905580518781529051929392600080516020611f55833981519152929181900390910190a3604051600090339085908381818185875af1925050503d8060008114610c2a576040519150601f19603f3d011682016040523d82523d6000602084013e610c2f565b606091505b5050905080610c73576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b5060019392505050565b3360009081526020819052604090205481811015610ccf5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a3604051600090339084908381818185875af1925050503d8060008114610d49576040519150601f19603f3d011682016040523d82523d6000602084013e610d4e565b606091505b5050905080610d92576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601281565b60006001600160a01b03851615610e75573360009081526020819052604090205484811015610e205760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b3360008181526020818152604080832089860390556001600160a01b038a168084529281902080548a01905580518981529051929392600080516020611f55833981519152929181900390910190a350610f8a565b3360009081526020819052604090205484811015610ec45760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320898603905580518981529051929392600080516020611f55833981519152929181900390910190a3604051600090339087908381818185875af1925050503d8060008114610f3e576040519150601f19603f3d011682016040523d82523d6000602084013e610f43565b606091505b5050905080610f87576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b846001600160a01b031663a4c0ed36338686866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561101557600080fd5b505af1158015611029573d6000803e3d6000fd5b505050506040513d602081101561103f57600080fd5b505195945050505050565b60006001600160a01b03851630146110a9576040805162461bcd60e51b815260206004820152601c60248201527f574554483a20666c617368206d696e74206f6e6c792057455448313000000000604482015290519081900360640190fd5b6001600160701b038411156110ef5760405162461bcd60e51b8152600401808060200182810382526024815260200180611f316024913960400191505060405180910390fd5b600380548501908190556001600160701b031015611154576040805162461bcd60e51b815260206004820152601f60248201527f574554483a20746f74616c206c6f616e206c696d697420657863656564656400604482015290519081900360640190fd5b6001600160a01b03861660008181526020818152604080832080548901905580518881529051600080516020611f55833981519152929181900390910190a37f0000000000000000000000000000000000000000000000000000000000000000866001600160a01b03166323e30c8b333088600089896040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561125957600080fd5b505af115801561126d573d6000803e3d6000fd5b505050506040513d602081101561128357600080fd5b5051146112d7576040805162461bcd60e51b815260206004820152601760248201527f574554483a20666c617368206c6f616e206661696c6564000000000000000000604482015290519081900360640190fd5b6001600160a01b038616600090815260026020908152604080832030845290915290205460001981146113a85784811015611359576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038716600081815260026020908152604080832030808552908352928190208986039081905581518181529151909492600080516020611f75833981519152928290030190a3505b6001600160a01b038716600090815260208190526040902054858110156114005760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b0388166000818152602081815260408083208a8603905580518a81529051929392600080516020611f55833981519152929181900390910190a3505060038054859003905550600195945050505050565b6001600160a01b038316600081815260208181526040808320805434908101909155815190815290519293928492600080516020611f55833981519152928290030190a3604051635260769b60e11b815233600482018181523460248401819052606060448501908152606485018790526001600160a01b0389169463a4c0ed36949389928992608401848480828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561152057600080fd5b505af1158015611534573d6000803e3d6000fd5b505050506040513d602081101561154a57600080fd5b5051949350505050565b60006001600160a01b038216301461156d57600061157a565b6003546001600160701b03035b92915050565b60006020819052908152604090205481565b60016020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035481565b6001600160a01b03831633146116b1576001600160a01b038316600090815260026020908152604080832033845290915290205460001981146116af5781811015611660576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038416600081815260026020908152604080832033808552908352928190208686039081905581518181529151909492600080516020611f75833981519152928290030190a3505b505b6001600160a01b038316600090815260208190526040902054818110156117095760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b038416600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a36040516000906001600160a01b0385169084908381818185875af1925050503d8060008114611795576040519150601f19603f3d011682016040523d82523d6000602084013e61179a565b606091505b50509050806117f0576040805162461bcd60e51b815260206004820152601b60248201527f574554483a204574686572207472616e73666572206661696c65640000000000604482015290519081900360640190fd5b5050505050565b60006001600160a01b038316156118ac5733600090815260208190526040902054828110156118575760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b3360008181526020818152604080832087860390556001600160a01b0388168084529281902080548801905580518781529051929392600080516020611f55833981519152929181900390910190a3506119c1565b33600090815260208190526040902054828110156118fb5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320878603905580518781529051929392600080516020611f55833981519152929181900390910190a3604051600090339085908381818185875af1925050503d8060008114611975576040519150601f19603f3d011682016040523d82523d6000602084013e61197a565b606091505b50509050806119be576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b50600192915050565b6001600160a01b03811660008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a350565b3360008181526002602090815260408083206001600160a01b03891680855290835281842088905581518881529151939490939092600080516020611f75833981519152928290030190a3846001600160a01b031662ba451f338686866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561101557600080fd5b3360008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a3565b83421115611b6b576040805162461bcd60e51b815260206004820152601460248201527315d155120e88115e1c1a5c9959081c195c9b5a5d60621b604482015290519081900360640190fd5b604080518082018252600681526505745544831360d41b602091820152815180830183526001808252603160f81b9183019190915282517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818401527ffa1d09e0df93cff7ffb6d3d1b7ff0cd84ec4aea253cce83798281123893899d5818501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a0808401919091528551808403909101815260c0830186528051908501206001600160a01b038d8116600081815286885288812080548089019091557f000000000000000000000000000000000000000000000000000000000000000060e0880152610100870192909252918e1661012086015261014085018d90526101608501526101808085018c9052875180860390910181526101a08501885280519087012061190160f01b6101c08601526101c285018390526101e2808601829052885180870390910181526102028601808a52815191890191909120908390526102228601808a5281905260ff8c1661024287015261026286018b905261028286018a90529751939792969095929491936102a280840193601f198301929081900390910190855afa158015611d54573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611d8a57508b6001600160a01b0316816001600160a01b0316145b611dd2576040805162461bcd60e51b815260206004820152601460248201527315d155120e881a5b9d985b1a59081c195c9b5a5d60621b604482015290519081900360640190fd5b89600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055508a6001600160a01b03168c6001600160a01b0316600080516020611f758339815191528c6040518082815260200191505060405180910390a3505050505050505050505050565b60006001600160a01b0383163014611ec5576040805162461bcd60e51b815260206004820152601c60248201527f574554483a20666c617368206d696e74206f6e6c792057455448313000000000604482015290519081900360640190fd5b50600092915050565b60026020908152600092835260408084209091529082529020548156fe574554483a207472616e7366657220616d6f756e7420657863656564732062616c616e6365574554483a20455448207472616e73666572206661696c656400000000000000574554483a20696e646976696475616c206c6f616e206c696d6974206578636565646564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925574554483a206275726e20616d6f756e7420657863656564732062616c616e6365a264697066735822122007e7b41d28cce2bedfa6de35bda7588176f64aed97837af8334ee71d23369c7864736f6c63430007060033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c806370a08231116100d1578063a9059cbb1161008a578063d0e30db011610064578063d0e30db014610733578063d505accf1461073b578063d9d98ce414610799578063dd62ed3e146107d2576101aa565b8063a9059cbb14610644578063b760faf91461067d578063cae9ca51146106a3576101aa565b806370a08231146105715780637ecebe00146105a45780638237e538146105d75780638b28d32f146105ec5780639555a9421461060157806395d89b41146101af576101aa565b806330adf81f1161012357806330adf81f14610355578063313ce5671461036a5780634000aea0146103955780635cffe9de146104255780635ddb7d7e146104c0578063613255ab1461053e576101aa565b806306fdde03146101af578063095ea7b31461023957806318160ddd14610286578063205c2878146102ad57806323b872dd146102e85780632e1a7d4d1461032b576101aa565b366101aa573360008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a3005b600080fd5b3480156101bb57600080fd5b506101c461080d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101fe5781810151838201526020016101e6565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024557600080fd5b506102726004803603604081101561025c57600080fd5b506001600160a01b03813516906020013561082f565b604080519115158252519081900360200190f35b34801561029257600080fd5b5061029b610883565b60408051918252519081900360200190f35b3480156102b957600080fd5b506102e6600480360360408110156102d057600080fd5b506001600160a01b03813516906020013561088b565b005b3480156102f457600080fd5b506102726004803603606081101561030b57600080fd5b506001600160a01b038135811691602081013590911690604001356109ac565b34801561033757600080fd5b506102e66004803603602081101561034e57600080fd5b5035610c80565b34801561036157600080fd5b5061029b610d97565b34801561037657600080fd5b5061037f610dbb565b6040805160ff9092168252519081900360200190f35b3480156103a157600080fd5b50610272600480360360608110156103b857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156103e757600080fd5b8201836020820111156103f957600080fd5b803590602001918460018302840111600160201b8311171561041a57600080fd5b509092509050610dc0565b34801561043157600080fd5b506102726004803603608081101561044857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561048257600080fd5b82018360208201111561049457600080fd5b803590602001918460018302840111600160201b831117156104b557600080fd5b50909250905061104a565b610272600480360360408110156104d657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561050057600080fd5b82018360208201111561051257600080fd5b803590602001918460018302840111600160201b8311171561053357600080fd5b509092509050611458565b34801561054a57600080fd5b5061029b6004803603602081101561056157600080fd5b50356001600160a01b0316611554565b34801561057d57600080fd5b5061029b6004803603602081101561059457600080fd5b50356001600160a01b0316611580565b3480156105b057600080fd5b5061029b600480360360208110156105c757600080fd5b50356001600160a01b0316611592565b3480156105e357600080fd5b5061029b6115a4565b3480156105f857600080fd5b5061029b6115c8565b34801561060d57600080fd5b506102e66004803603606081101561062457600080fd5b506001600160a01b038135811691602081013590911690604001356115ce565b34801561065057600080fd5b506102726004803603604081101561066757600080fd5b506001600160a01b0381351690602001356117f7565b6102e66004803603602081101561069357600080fd5b50356001600160a01b03166119ca565b3480156106af57600080fd5b50610272600480360360608110156106c657600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156106f557600080fd5b82018360208201111561070757600080fd5b803590602001918460018302840111600160201b8311171561072857600080fd5b509092509050611a0f565b6102e6611ae4565b34801561074757600080fd5b506102e6600480360360e081101561075e57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b1f565b3480156107a557600080fd5b5061029b600480360360408110156107bc57600080fd5b506001600160a01b038135169060200135611e66565b3480156107de57600080fd5b5061029b600480360360408110156107f557600080fd5b506001600160a01b0381358116916020013516611ece565b6040518060400160405280600681526020016505745544831360d41b81525081565b3360008181526002602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020611f75833981519152928290030190a350600192915050565b600354470190565b33600090815260208190526040902054818110156108da5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a36040516000906001600160a01b0385169084908381818185875af1925050503d806000811461095d576040519150601f19603f3d011682016040523d82523d6000602084013e610962565b606091505b50509050806109a6576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505050565b60006001600160a01b0384163314610a91576001600160a01b03841660009081526002602090815260408083203384529091529020546000198114610a8f5782811015610a40576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038516600081815260026020908152604080832033808552908352928190208786039081905581518181529151909492600080516020611f75833981519152928290030190a3505b505b6001600160a01b03831615610b4f576001600160a01b03841660009081526020819052604090205482811015610af85760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b6001600160a01b03808616600081815260208181526040808320888703905593881680835291849020805488019055835187815293519193600080516020611f55833981519152929081900390910190a350610c76565b6001600160a01b03841660009081526020819052604090205482811015610ba75760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b038516600081815260208181526040808320878603905580518781529051929392600080516020611f55833981519152929181900390910190a3604051600090339085908381818185875af1925050503d8060008114610c2a576040519150601f19603f3d011682016040523d82523d6000602084013e610c2f565b606091505b5050905080610c73576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b5060019392505050565b3360009081526020819052604090205481811015610ccf5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a3604051600090339084908381818185875af1925050503d8060008114610d49576040519150601f19603f3d011682016040523d82523d6000602084013e610d4e565b606091505b5050905080610d92576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60006001600160a01b03851615610e75573360009081526020819052604090205484811015610e205760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b3360008181526020818152604080832089860390556001600160a01b038a168084529281902080548a01905580518981529051929392600080516020611f55833981519152929181900390910190a350610f8a565b3360009081526020819052604090205484811015610ec45760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320898603905580518981529051929392600080516020611f55833981519152929181900390910190a3604051600090339087908381818185875af1925050503d8060008114610f3e576040519150601f19603f3d011682016040523d82523d6000602084013e610f43565b606091505b5050905080610f87576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b846001600160a01b031663a4c0ed36338686866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561101557600080fd5b505af1158015611029573d6000803e3d6000fd5b505050506040513d602081101561103f57600080fd5b505195945050505050565b60006001600160a01b03851630146110a9576040805162461bcd60e51b815260206004820152601c60248201527f574554483a20666c617368206d696e74206f6e6c792057455448313000000000604482015290519081900360640190fd5b6001600160701b038411156110ef5760405162461bcd60e51b8152600401808060200182810382526024815260200180611f316024913960400191505060405180910390fd5b600380548501908190556001600160701b031015611154576040805162461bcd60e51b815260206004820152601f60248201527f574554483a20746f74616c206c6f616e206c696d697420657863656564656400604482015290519081900360640190fd5b6001600160a01b03861660008181526020818152604080832080548901905580518881529051600080516020611f55833981519152929181900390910190a37f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9866001600160a01b03166323e30c8b333088600089896040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561125957600080fd5b505af115801561126d573d6000803e3d6000fd5b505050506040513d602081101561128357600080fd5b5051146112d7576040805162461bcd60e51b815260206004820152601760248201527f574554483a20666c617368206c6f616e206661696c6564000000000000000000604482015290519081900360640190fd5b6001600160a01b038616600090815260026020908152604080832030845290915290205460001981146113a85784811015611359576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038716600081815260026020908152604080832030808552908352928190208986039081905581518181529151909492600080516020611f75833981519152928290030190a3505b6001600160a01b038716600090815260208190526040902054858110156114005760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b0388166000818152602081815260408083208a8603905580518a81529051929392600080516020611f55833981519152929181900390910190a3505060038054859003905550600195945050505050565b6001600160a01b038316600081815260208181526040808320805434908101909155815190815290519293928492600080516020611f55833981519152928290030190a3604051635260769b60e11b815233600482018181523460248401819052606060448501908152606485018790526001600160a01b0389169463a4c0ed36949389928992608401848480828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561152057600080fd5b505af1158015611534573d6000803e3d6000fd5b505050506040513d602081101561154a57600080fd5b5051949350505050565b60006001600160a01b038216301461156d57600061157a565b6003546001600160701b03035b92915050565b60006020819052908152604090205481565b60016020526000908152604090205481565b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd981565b60035481565b6001600160a01b03831633146116b1576001600160a01b038316600090815260026020908152604080832033845290915290205460001981146116af5781811015611660576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038416600081815260026020908152604080832033808552908352928190208686039081905581518181529151909492600080516020611f75833981519152928290030190a3505b505b6001600160a01b038316600090815260208190526040902054818110156117095760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b038416600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a36040516000906001600160a01b0385169084908381818185875af1925050503d8060008114611795576040519150601f19603f3d011682016040523d82523d6000602084013e61179a565b606091505b50509050806117f0576040805162461bcd60e51b815260206004820152601b60248201527f574554483a204574686572207472616e73666572206661696c65640000000000604482015290519081900360640190fd5b5050505050565b60006001600160a01b038316156118ac5733600090815260208190526040902054828110156118575760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b3360008181526020818152604080832087860390556001600160a01b0388168084529281902080548801905580518781529051929392600080516020611f55833981519152929181900390910190a3506119c1565b33600090815260208190526040902054828110156118fb5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320878603905580518781529051929392600080516020611f55833981519152929181900390910190a3604051600090339085908381818185875af1925050503d8060008114611975576040519150601f19603f3d011682016040523d82523d6000602084013e61197a565b606091505b50509050806119be576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b50600192915050565b6001600160a01b03811660008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a350565b3360008181526002602090815260408083206001600160a01b03891680855290835281842088905581518881529151939490939092600080516020611f75833981519152928290030190a3846001600160a01b031662ba451f338686866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561101557600080fd5b3360008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a3565b83421115611b6b576040805162461bcd60e51b815260206004820152601460248201527315d155120e88115e1c1a5c9959081c195c9b5a5d60621b604482015290519081900360640190fd5b604080518082018252600681526505745544831360d41b602091820152815180830183526001808252603160f81b9183019190915282517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818401527ffa1d09e0df93cff7ffb6d3d1b7ff0cd84ec4aea253cce83798281123893899d5818501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a0808401919091528551808403909101815260c0830186528051908501206001600160a01b038d8116600081815286885288812080548089019091557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960e0880152610100870192909252918e1661012086015261014085018d90526101608501526101808085018c9052875180860390910181526101a08501885280519087012061190160f01b6101c08601526101c285018390526101e2808601829052885180870390910181526102028601808a52815191890191909120908390526102228601808a5281905260ff8c1661024287015261026286018b905261028286018a90529751939792969095929491936102a280840193601f198301929081900390910190855afa158015611d54573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611d8a57508b6001600160a01b0316816001600160a01b0316145b611dd2576040805162461bcd60e51b815260206004820152601460248201527315d155120e881a5b9d985b1a59081c195c9b5a5d60621b604482015290519081900360640190fd5b89600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055508a6001600160a01b03168c6001600160a01b0316600080516020611f758339815191528c6040518082815260200191505060405180910390a3505050505050505050505050565b60006001600160a01b0383163014611ec5576040805162461bcd60e51b815260206004820152601c60248201527f574554483a20666c617368206d696e74206f6e6c792057455448313000000000604482015290519081900360640190fd5b50600092915050565b60026020908152600092835260408084209091529082529020548156fe574554483a207472616e7366657220616d6f756e7420657863656564732062616c616e6365574554483a20455448207472616e73666572206661696c656400000000000000574554483a20696e646976696475616c206c6f616e206c696d6974206578636565646564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925574554483a206275726e20616d6f756e7420657863656564732062616c616e6365a264697066735822122007e7b41d28cce2bedfa6de35bda7588176f64aed97837af8334ee71d23369c7864736f6c63430007060033

Deployed Bytecode Sourcemap

9310:18366:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11087:10;11077:9;:21;;;;;;;;;;;:34;;11102:9;11077:34;;;;;;11127:43;;;;;;;-1:-1:-1;;;;;;;;;;;11127:43:0;;;;;;;;;;9310:18366;;;;;9346:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19389:265;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19389:265:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10618:124;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17028:511;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17028:511:0;;;;;;;;:::i;:::-;;24703:1377;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24703:1377:0;;;;;;;;;;;;;;;;;:::i;16198:505::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16198:505:0;;:::i;9588:138::-;;;;;;;;;;;;;:::i;9438:45::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26684:989;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26684:989:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26684:989:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26684:989:0;;;;;;;;;;-1:-1:-1;26684:989:0;;-1:-1:-1;26684:989:0;-1:-1:-1;26684:989:0;:::i;14260:1618::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14260:1618:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14260:1618:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14260:1618:0;;;;;;;;;;-1:-1:-1;14260:1618:0;;-1:-1:-1;14260:1618:0;-1:-1:-1;14260:1618:0;:::i;12489:326::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12489:326:0;;;;;;;;;;;;;;;-1:-1:-1;;;12489:326:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12489:326:0;;;;;;;;;;-1:-1:-1;12489:326:0;;-1:-1:-1;12489:326:0;-1:-1:-1;12489:326:0;:::i;12895:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12895:183:0;-1:-1:-1;;;;;12895:183:0;;:::i;9798:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9798:54:0;-1:-1:-1;;;;;9798:54:0;;:::i;10125:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10125:51:0;-1:-1:-1;;;;;10125:51:0;;:::i;9492:89::-;;;;;;;;;;;;;:::i;10481:35::-;;;;;;;;;;;;;:::i;18188:992::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18188:992:0;;;;;;;;;;;;;;;;;:::i;22928:918::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22928:918:0;;;;;;;;:::i;11861:189::-;;;;;;;;;;;;;;;;-1:-1:-1;11861:189:0;-1:-1:-1;;;;;11861:189:0;;:::i;20067:364::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20067:364:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20067:364:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20067:364:0;;;;;;;;;;-1:-1:-1;20067:364:0;;-1:-1:-1;20067:364:0;-1:-1:-1;20067:364:0;:::i;11421:201::-;;;:::i;21248:1282::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21248:1282:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13167:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13167:184:0;;;;;;;;:::i;10338:75::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10338:75:0;;;;;;;;;;:::i;9346:38::-;;;;;;;;;;;;;;-1:-1:-1;;;9346:38:0;;;;:::o;19389:265::-;19542:10;19465:4;19532:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;19532:30:0;;;;;;;;;;;:38;;;19586:36;;;;;;;19465:4;;19532:30;;19542:10;;-1:-1:-1;;;;;;;;;;;19586:36:0;;;;;;;-1:-1:-1;19642:4:0;19389:265;;;;:::o;10618:124::-;10723:11;;10699:21;:35;10618:124;:::o;17028:511::-;17182:10;17154:15;17172:21;;;;;;;;;;;17212:16;;;;17204:62;;;;-1:-1:-1;;;17204:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17287:10;17277:9;:21;;;;;;;;;;;17301:15;;;17277:39;;17332;;;;;;;17277:9;;17287:10;-1:-1:-1;;;;;;;;;;;17332:39:0;;;;;;;;;;17450:25;;17432:12;;-1:-1:-1;;;;;17450:7:0;;;17465:5;;17432:12;17450:25;17432:12;17450:25;17465:5;17450:7;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17431:44;;;17494:7;17486:45;;;;;-1:-1:-1;;;17486:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17486:45:0;;;;;;;;;;;;;;;17028:511;;;;:::o;24703:1377::-;24793:4;-1:-1:-1;;;;;24814:18:0;;24822:10;24814:18;24810:467;;-1:-1:-1;;;;;24928:15:0;;24910;24928;;;:9;:15;;;;;;;;24944:10;24928:27;;;;;;;;-1:-1:-1;;24974:28:0;;24970:296;;25042:5;25031:7;:16;;25023:60;;;;;-1:-1:-1;;;25023:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25154:15:0;;25102;25154;;;:9;:15;;;;;;;;25170:10;25154:27;;;;;;;;;;25120:15;;;25154:37;;;;25215:35;;;;;;;25120:15;;25154;-1:-1:-1;;;;;;;;;;;25215:35:0;;;;;;;24970:296;;24810:467;;-1:-1:-1;;;;;25345:16:0;;;25341:700;;-1:-1:-1;;;;;25408:15:0;;25390;25408;;;;;;;;;;;25446:16;;;;25438:66;;;;-1:-1:-1;;;25438:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25521:15:0;;;:9;:15;;;;;;;;;;;25539;;;25521:33;;25569:13;;;;;;;;;;:22;;;;;;25611:25;;;;;;;25569:13;;-1:-1:-1;;;;;;;;;;;25611:25:0;;;;;;;;;;25341:700;;;;-1:-1:-1;;;;;25699:15:0;;25681;25699;;;;;;;;;;;25737:16;;;;25729:62;;;;-1:-1:-1;;;25729:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25806:15:0;;:9;:15;;;;;;;;;;;25824;;;25806:33;;25859;;;;;;;25806:9;;:15;-1:-1:-1;;;;;;;;;;;25859:33:0;;;;;;;;;;25936;;25918:12;;25936:10;;25959:5;;25918:12;25936:33;25918:12;25936:33;25959:5;25936:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25917:52;;;25992:7;25984:45;;;;;-1:-1:-1;;;25984:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25984:45:0;;;;;;;;;;;;;;;25341:700;;;-1:-1:-1;26068:4:0;24703:1377;;;;;:::o;16198:505::-;16330:10;16302:15;16320:21;;;;;;;;;;;16360:16;;;;16352:62;;;;-1:-1:-1;;;16352:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16435:10;16425:9;:21;;;;;;;;;;;16449:15;;;16425:39;;16480;;;;;;;16425:9;;16435:10;-1:-1:-1;;;;;;;;;;;16480:39:0;;;;;;;;;;16606:33;;16588:12;;16606:10;;16629:5;;16588:12;16606:33;16588:12;16606:33;16629:5;16606:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16587:52;;;16658:7;16650:45;;;;;-1:-1:-1;;;16650:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16650:45:0;;;;;;;;;;;;;;;16198:505;;;:::o;9588:138::-;;;:::o;9438:45::-;9481:2;9438:45;:::o;26684:989::-;26781:4;-1:-1:-1;;;;;26852:16:0;;;26848:736;;26925:10;26897:15;26915:21;;;;;;;;;;;26959:16;;;;26951:66;;;;-1:-1:-1;;;26951:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27044:10;27034:9;:21;;;;;;;;;;;27058:15;;;27034:39;;-1:-1:-1;;;;;27088:13:0;;;;;;;;;:22;;;;;;27130:31;;;;;;;27088:13;;27044:10;-1:-1:-1;;;;;;;;;;;27130:31:0;;;;;;;;;;26848:736;;;;27234:10;27206:15;27224:21;;;;;;;;;;;27268:16;;;;27260:62;;;;-1:-1:-1;;;27260:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27347:10;27337:9;:21;;;;;;;;;;;27361:15;;;27337:39;;27396;;;;;;;27337:9;;27347:10;-1:-1:-1;;;;;;;;;;;27396:39:0;;;;;;;;;;27479:33;;27461:12;;27479:10;;27502:5;;27461:12;27479:33;27461:12;27479:33;27502:5;27479:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27460:52;;;27535:7;27527:45;;;;;-1:-1:-1;;;27527:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27527:45:0;;;;;;;;;;;;;;;26848:736;;;27621:2;-1:-1:-1;;;;;27603:37:0;;27641:10;27653:5;27660:4;;27603:62;;;;;;;;;;;;;-1:-1:-1;;;;;27603:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27603:62:0;;26684:989;-1:-1:-1;;;;;26684:989:0:o;14260:1618::-;14388:4;-1:-1:-1;;;;;14413:22:0;;14430:4;14413:22;14405:63;;;;;-1:-1:-1;;;14405:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14487:26:0;;;14479:75;;;;-1:-1:-1;;;14479:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14579:11;;;:19;;14565:33;;;;-1:-1:-1;;;;;;14617:32:0;14609:76;;;;;-1:-1:-1;;;14609:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14753:28:0;;:9;:28;;;;;;;;;;;:37;;;;;;14806:46;;;;;;;-1:-1:-1;;;;;;;;;;;14806:46:0;;;;;;;;;;14954:16;14887:8;-1:-1:-1;;;;;14887:20:0;;14908:10;14928:4;14935:5;14942:1;14945:4;;14887:63;;;;;;;;;;;;;-1:-1:-1;;;;;14887:63:0;;;;;;-1:-1:-1;;;;;14887:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14887:63:0;:83;14865:156;;;;;-1:-1:-1;;;14865:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15133:28:0;;15115:15;15133:28;;;:9;:28;;;;;;;;15170:4;15133:43;;;;;;;;-1:-1:-1;;15191:28:0;;15187:308;;15255:5;15244:7;:16;;15236:60;;;;;-1:-1:-1;;;15236:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15359:28:0;;15311:15;15359:28;;;:9;:28;;;;;;;;15396:4;15359:43;;;;;;;;;;15329:15;;;15359:53;;;;15432:51;;;;;;;15329:15;;15359:28;-1:-1:-1;;;;;;;;;;;15432:51:0;;;;;;;15187:308;;-1:-1:-1;;;;;15574:28:0;;15556:15;15574:28;;;;;;;;;;;15621:16;;;;15613:62;;;;-1:-1:-1;;;15613:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15686:28:0;;:9;:28;;;;;;;;;;;15717:15;;;15686:46;;15748;;;;;;;15686:9;;:28;-1:-1:-1;;;;;;;;;;;15748:46:0;;;;;;;;;;-1:-1:-1;;15829:11:0;;;:19;;;15815:33;;-1:-1:-1;;14260:1618:0;;;;;;;:::o;12489:326::-;-1:-1:-1;;;;;12644:13:0;;12583:12;12644:13;;;;;;;;;;;:26;;12661:9;12644:26;;;;;;12686:35;;;;;;;12583:12;;12644:13;12583:12;;-1:-1:-1;;;;;;;;;;;12686:35:0;;;;;;;12741:66;;-1:-1:-1;;;12741:66:0;;12779:10;12741:66;;;;;;12791:9;12741:66;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12741:37:0;;;;;12779:10;12802:4;;;;12741:66;;12802:4;;;;12741:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12741:66:0;;12489:326;-1:-1:-1;;;;12489:326:0:o;12895:183::-;12964:7;-1:-1:-1;;;;;12991:22:0;;13008:4;12991:22;:60;;13050:1;12991:60;;;13036:11;;-1:-1:-1;;;;;13016:31:0;12991:60;12984:67;12895:183;-1:-1:-1;;12895:183:0:o;9798:54::-;;;;;;;;;;;;;;:::o;10125:51::-;;;;;;;;;;;;;:::o;9492:89::-;;;:::o;10481:35::-;;;;:::o;18188:992::-;-1:-1:-1;;;;;18292:18:0;;18300:10;18292:18;18288:467;;-1:-1:-1;;;;;18406:15:0;;18388;18406;;;:9;:15;;;;;;;;18422:10;18406:27;;;;;;;;-1:-1:-1;;18452:28:0;;18448:296;;18520:5;18509:7;:16;;18501:60;;;;;-1:-1:-1;;;18501:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18632:15:0;;18580;18632;;;:9;:15;;;;;;;;18648:10;18632:27;;;;;;;;;;18598:15;;;18632:37;;;;18693:35;;;;;;;18598:15;;18632;-1:-1:-1;;;;;;;;;;;18693:35:0;;;;;;;18448:296;;18288:467;;-1:-1:-1;;;;;18829:15:0;;18811;18829;;;;;;;;;;;18863:16;;;;18855:62;;;;-1:-1:-1;;;18855:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18928:15:0;;:9;:15;;;;;;;;;;;18946;;;18928:33;;18977;;;;;;;18928:9;;:15;-1:-1:-1;;;;;;;;;;;18977:33:0;;;;;;;;;;19089:25;;19071:12;;-1:-1:-1;;;;;19089:7:0;;;19104:5;;19071:12;19089:25;19071:12;19089:25;19104:5;19089:7;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19070:44;;;19133:7;19125:47;;;;;-1:-1:-1;;;19125:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18188:992;;;;;:::o;22928:918::-;23000:4;-1:-1:-1;;;;;23071:16:0;;;23067:740;;23144:10;23116:15;23134:21;;;;;;;;;;;23178:16;;;;23170:66;;;;-1:-1:-1;;;23170:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23263:10;23253:9;:21;;;;;;;;;;;23277:15;;;23253:39;;-1:-1:-1;;;;;23307:13:0;;;;;;;;;:22;;;;;;23349:31;;;;;;;23307:13;;23263:10;-1:-1:-1;;;;;;;;;;;23349:31:0;;;;;;;;;;23067:740;;;;23453:10;23425:15;23443:21;;;;;;;;;;;23487:16;;;;23479:62;;;;-1:-1:-1;;;23479:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23566:10;23556:9;:21;;;;;;;;;;;23580:15;;;23556:39;;23615;;;;;;;23556:9;;23566:10;-1:-1:-1;;;;;;;;;;;23615:39:0;;;;;;;;;;23702:33;;23684:12;;23702:10;;23725:5;;23684:12;23702:33;23684:12;23702:33;23725:5;23702:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23683:52;;;23758:7;23750:45;;;;;-1:-1:-1;;;23750:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23750:45:0;;;;;;;;;;;;;;;23067:740;;;-1:-1:-1;23834:4:0;22928:918;;;;:::o;11861:189::-;-1:-1:-1;;;;;11965:13:0;;:9;:13;;;;;;;;;;;:26;;11982:9;11965:26;;;;;;12007:35;;;;;;;-1:-1:-1;;;;;;;;;;;12007:35:0;;;;;;;;;;11861:189;:::o;20067:364::-;20248:10;20171:4;20238:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;20238:30:0;;;;;;;;;;;:38;;;20292:36;;;;;;;20171:4;;20238:30;;20248:10;;-1:-1:-1;;;;;;;;;;;20292:36:0;;;;;;;20374:7;-1:-1:-1;;;;;20356:42:0;;20399:10;20411:5;20418:4;;20356:67;;;;;;;;;;;;;-1:-1:-1;;;;;20356:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11421:201;11531:10;11521:9;:21;;;;;;;;;;;:34;;11546:9;11521:34;;;;;;11571:43;;;;;;;-1:-1:-1;;;;;;;;;;;11571:43:0;;;;;;;;;;11421:201::o;21248:1282::-;21416:8;21397:15;:27;;21389:60;;;;;-1:-1:-1;;;21389:60:0;;;;;;;;;;;;-1:-1:-1;;;21389:60:0;;;;;;;;;;;;;;;21739:4;;;;;;;;;;;-1:-1:-1;;;21739:4:0;;;;;21774:10;;;;;;;;;;;-1:-1:-1;;;21774:10:0;;;;;;;21580:264;;21609:95;21580:264;;;;21723:22;21580:264;;;;21764:21;21580:264;;;;21509:9;21580:264;;;;;;21838:4;21580:264;;;;;;;;;;;;;;;;;;;;;;;21556:289;;;;;;-1:-1:-1;;;;;22040:13:0;;;21462:15;22040:13;;;;;;;;;:15;;;;;;;;21932;21903:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21879:205;;;;;;-1:-1:-1;;;22136:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22112:135;;;;;;;;;22277:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21509:9;;21556:289;;21879:205;;22112:135;;21462:15;;22277:24;;;;;-1:-1:-1;;22277:24:0;;;;;;;;;;;21774:10;22277:24;;;;;;;;;;;;;;;-1:-1:-1;;22277:24:0;;-1:-1:-1;;22277:24:0;;;-1:-1:-1;;;;;;;22320:20:0;;;;;;:39;;;22354:5;-1:-1:-1;;;;;22344:15:0;:6;-1:-1:-1;;;;;22344:15:0;;22320:39;22312:72;;;;;-1:-1:-1;;;22312:72:0;;;;;;;;;;;;-1:-1:-1;;;22312:72:0;;;;;;;;;;;;;;;22470:5;22442:9;:16;22452:5;-1:-1:-1;;;;;22442:16:0;-1:-1:-1;;;;;22442:16:0;;;;;;;;;;;;:25;22459:7;-1:-1:-1;;;;;22442:25:0;-1:-1:-1;;;;;22442:25:0;;;;;;;;;;;;:33;;;;22507:7;-1:-1:-1;;;;;22491:31:0;22500:5;-1:-1:-1;;;;;22491:31:0;-1:-1:-1;;;;;;;;;;;22516:5:0;22491:31;;;;;;;;;;;;;;;;;;21248:1282;;;;;;;;;;;;:::o;13167:184::-;13241:7;-1:-1:-1;;;;;13269:22:0;;13286:4;13269:22;13261:63;;;;;-1:-1:-1;;;13261:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13342:1:0;13167:184;;;;:::o;10338:75::-;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://07e7b41d28cce2bedfa6de35bda7588176f64aed97837af8334ee71d23369c78

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.