ETH Price: $3,483.38 (+2.56%)

Contract

0xeE94cf48924B720AF939E732E98F30F9594f87C5
 
Transaction Hash
Method
Block
From
To
Drain125089422021-05-26 8:41:231308 days ago1622018483IN
0xeE94cf48...9594f87C5
0 ETH0.001388632
Drain125089312021-05-26 8:38:531308 days ago1622018333IN
0xeE94cf48...9594f87C5
0 ETH0.0014700132
Drain125089252021-05-26 8:37:151308 days ago1622018235IN
0xeE94cf48...9594f87C5
0 ETH0.001071232.4
Drain125083912021-05-26 6:33:331309 days ago1622010813IN
0xeE94cf48...9594f87C5
0 ETH0.0010579832.00000145
Drain125083912021-05-26 6:33:331309 days ago1622010813IN
0xeE94cf48...9594f87C5
0 ETH0.0018148230
Drain125083912021-05-26 6:33:331309 days ago1622010813IN
0xeE94cf48...9594f87C5
0 ETH0.0017306730
Drain125083532021-05-26 6:26:221309 days ago1622010382IN
0xeE94cf48...9594f87C5
0 ETH0.0009401333
Drain116077492021-01-07 13:12:531447 days ago1610025173IN
0xeE94cf48...9594f87C5
0 ETH0.0038498116.00000145
Drain116073412021-01-07 11:41:121447 days ago1610019672IN
0xeE94cf48...9594f87C5
0 ETH0.0026941759
Drain116073402021-01-07 11:41:111447 days ago1610019671IN
0xeE94cf48...9594f87C5
0 ETH0.0031177358
Drain116073382021-01-07 11:40:331447 days ago1610019633IN
0xeE94cf48...9594f87C5
0 ETH0.0017582758
Drain116073352021-01-07 11:40:221447 days ago1610019622IN
0xeE94cf48...9594f87C5
0 ETH0.0028512456
Transfer Ownersh...116057962021-01-07 6:01:431448 days ago1609999303IN
0xeE94cf48...9594f87C5
0 ETH0.0034046377

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
214759672024-12-25 0:40:597 hrs ago1735087259
0xeE94cf48...9594f87C5
0.00091433 ETH
214755732024-12-24 23:21:238 hrs ago1735082483
0xeE94cf48...9594f87C5
0.00065135 ETH
214754852024-12-24 23:03:358 hrs ago1735081415
0xeE94cf48...9594f87C5
0.00079446 ETH
214718642024-12-24 10:54:5921 hrs ago1735037699
0xeE94cf48...9594f87C5
0.00142797 ETH
214496162024-12-21 8:13:233 days ago1734768803
0xeE94cf48...9594f87C5
0.00218368 ETH
214496042024-12-21 8:10:593 days ago1734768659
0xeE94cf48...9594f87C5
0.00597296 ETH
214495952024-12-21 8:09:113 days ago1734768551
0xeE94cf48...9594f87C5
0.0034298 ETH
214269532024-12-18 4:12:357 days ago1734495155
0xeE94cf48...9594f87C5
0.00179082 ETH
214267082024-12-18 3:23:357 days ago1734492215
0xeE94cf48...9594f87C5
0.00272552 ETH
214262002024-12-18 1:41:237 days ago1734486083
0xeE94cf48...9594f87C5
0.00130657 ETH
214230982024-12-17 15:17:357 days ago1734448655
0xeE94cf48...9594f87C5
0.00809915 ETH
214195902024-12-17 3:33:238 days ago1734406403
0xeE94cf48...9594f87C5
0.00222102 ETH
214193592024-12-17 2:46:598 days ago1734403619
0xeE94cf48...9594f87C5
0.0026538 ETH
214167432024-12-16 18:01:598 days ago1734372119
0xeE94cf48...9594f87C5
0.00438085 ETH
214079882024-12-15 12:42:119 days ago1734266531
0xeE94cf48...9594f87C5
0.0010624 ETH
214079852024-12-15 12:41:359 days ago1734266495
0xeE94cf48...9594f87C5
0.00113752 ETH
214018772024-12-14 16:14:4710 days ago1734192887
0xeE94cf48...9594f87C5
0.00200513 ETH
213868382024-12-12 13:51:3512 days ago1734011495
0xeE94cf48...9594f87C5
0.00529821 ETH
213793752024-12-11 12:50:4713 days ago1733921447
0xeE94cf48...9594f87C5
0.00267971 ETH
213792402024-12-11 12:23:4713 days ago1733919827
0xeE94cf48...9594f87C5
0.00280621 ETH
213792102024-12-11 12:17:4713 days ago1733919467
0xeE94cf48...9594f87C5
0.0031051 ETH
213656482024-12-09 14:48:5915 days ago1733755739
0xeE94cf48...9594f87C5
0.00558384 ETH
213524102024-12-07 18:29:5917 days ago1733596199
0xeE94cf48...9594f87C5
0.00260664 ETH
213523912024-12-07 18:26:1117 days ago1733595971
0xeE94cf48...9594f87C5
0.00269874 ETH
213489582024-12-07 6:54:4718 days ago1733554487
0xeE94cf48...9594f87C5
0.00167236 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FeeCollector

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.7.0;
// File: contracts/lib/AddressUtil.sol

// Copyright 2017 Loopring Technology Limited.


/// @title Utility Functions for addresses
/// @author Daniel Wang - <[email protected]>
/// @author Brecht Devos - <[email protected]>
library AddressUtil
{
    using AddressUtil for *;

    function isContract(
        address addr
        )
        internal
        view
        returns (bool)
    {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(addr) }
        return (codehash != 0x0 &&
                codehash != 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470);
    }

    function toPayable(
        address addr
        )
        internal
        pure
        returns (address payable)
    {
        return payable(addr);
    }

    // Works like address.send but with a customizable gas limit
    // Make sure your code is safe for reentrancy when using this function!
    function sendETH(
        address to,
        uint    amount,
        uint    gasLimit
        )
        internal
        returns (bool success)
    {
        if (amount == 0) {
            return true;
        }
        address payable recipient = to.toPayable();
        /* solium-disable-next-line */
        (success,) = recipient.call{value: amount, gas: gasLimit}("");
    }

    // Works like address.transfer but with a customizable gas limit
    // Make sure your code is safe for reentrancy when using this function!
    function sendETHAndVerify(
        address to,
        uint    amount,
        uint    gasLimit
        )
        internal
        returns (bool success)
    {
        success = to.sendETH(amount, gasLimit);
        require(success, "TRANSFER_FAILURE");
    }

    // Works like call but is slightly more efficient when data
    // needs to be copied from memory to do the call.
    function fastCall(
        address to,
        uint    gasLimit,
        uint    value,
        bytes   memory data
        )
        internal
        returns (bool success, bytes memory returnData)
    {
        if (to != address(0)) {
            assembly {
                // Do the call
                success := call(gasLimit, to, value, add(data, 32), mload(data), 0, 0)
                // Copy the return data
                let size := returndatasize()
                returnData := mload(0x40)
                mstore(returnData, size)
                returndatacopy(add(returnData, 32), 0, size)
                // Update free memory pointer
                mstore(0x40, add(returnData, add(32, size)))
            }
        }
    }

    // Like fastCall, but throws when the call is unsuccessful.
    function fastCallAndVerify(
        address to,
        uint    gasLimit,
        uint    value,
        bytes   memory data
        )
        internal
        returns (bytes memory returnData)
    {
        bool success;
        (success, returnData) = fastCall(to, gasLimit, value, data);
        if (!success) {
            assembly {
                revert(add(returnData, 32), mload(returnData))
            }
        }
    }
}

// File: contracts/lib/ERC20.sol

// Copyright 2017 Loopring Technology Limited.


/// @title ERC20 Token Interface
/// @dev see https://github.com/ethereum/EIPs/issues/20
/// @author Daniel Wang - <[email protected]>
abstract contract ERC20
{
    function totalSupply()
        public
        view
        virtual
        returns (uint);

    function balanceOf(
        address who
        )
        public
        view
        virtual
        returns (uint);

    function allowance(
        address owner,
        address spender
        )
        public
        view
        virtual
        returns (uint);

    function transfer(
        address to,
        uint value
        )
        public
        virtual
        returns (bool);

    function transferFrom(
        address from,
        address to,
        uint    value
        )
        public
        virtual
        returns (bool);

    function approve(
        address spender,
        uint    value
        )
        public
        virtual
        returns (bool);
}

// File: contracts/lib/ERC20SafeTransfer.sol

// Copyright 2017 Loopring Technology Limited.


/// @title ERC20 safe transfer
/// @dev see https://github.com/sec-bit/badERC20Fix
/// @author Brecht Devos - <[email protected]>
library ERC20SafeTransfer
{
    function safeTransferAndVerify(
        address token,
        address to,
        uint    value
        )
        internal
    {
        safeTransferWithGasLimitAndVerify(
            token,
            to,
            value,
            gasleft()
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint    value
        )
        internal
        returns (bool)
    {
        return safeTransferWithGasLimit(
            token,
            to,
            value,
            gasleft()
        );
    }

    function safeTransferWithGasLimitAndVerify(
        address token,
        address to,
        uint    value,
        uint    gasLimit
        )
        internal
    {
        require(
            safeTransferWithGasLimit(token, to, value, gasLimit),
            "TRANSFER_FAILURE"
        );
    }

    function safeTransferWithGasLimit(
        address token,
        address to,
        uint    value,
        uint    gasLimit
        )
        internal
        returns (bool)
    {
        // A transfer is successful when 'call' is successful and depending on the token:
        // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false)
        // - A single boolean is returned: this boolean needs to be true (non-zero)

        // bytes4(keccak256("transfer(address,uint256)")) = 0xa9059cbb
        bytes memory callData = abi.encodeWithSelector(
            bytes4(0xa9059cbb),
            to,
            value
        );
        (bool success, ) = token.call{gas: gasLimit}(callData);
        return checkReturnValue(success);
    }

    function safeTransferFromAndVerify(
        address token,
        address from,
        address to,
        uint    value
        )
        internal
    {
        safeTransferFromWithGasLimitAndVerify(
            token,
            from,
            to,
            value,
            gasleft()
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint    value
        )
        internal
        returns (bool)
    {
        return safeTransferFromWithGasLimit(
            token,
            from,
            to,
            value,
            gasleft()
        );
    }

    function safeTransferFromWithGasLimitAndVerify(
        address token,
        address from,
        address to,
        uint    value,
        uint    gasLimit
        )
        internal
    {
        bool result = safeTransferFromWithGasLimit(
            token,
            from,
            to,
            value,
            gasLimit
        );
        require(result, "TRANSFER_FAILURE");
    }

    function safeTransferFromWithGasLimit(
        address token,
        address from,
        address to,
        uint    value,
        uint    gasLimit
        )
        internal
        returns (bool)
    {
        // A transferFrom is successful when 'call' is successful and depending on the token:
        // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false)
        // - A single boolean is returned: this boolean needs to be true (non-zero)

        // bytes4(keccak256("transferFrom(address,address,uint256)")) = 0x23b872dd
        bytes memory callData = abi.encodeWithSelector(
            bytes4(0x23b872dd),
            from,
            to,
            value
        );
        (bool success, ) = token.call{gas: gasLimit}(callData);
        return checkReturnValue(success);
    }

    function checkReturnValue(
        bool success
        )
        internal
        pure
        returns (bool)
    {
        // A transfer/transferFrom is successful when 'call' is successful and depending on the token:
        // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false)
        // - A single boolean is returned: this boolean needs to be true (non-zero)
        if (success) {
            assembly {
                switch returndatasize()
                // Non-standard ERC20: nothing is returned so if 'call' was successful we assume the transfer succeeded
                case 0 {
                    success := 1
                }
                // Standard ERC20: a single boolean value is returned which needs to be true
                case 32 {
                    returndatacopy(0, 0, 32)
                    success := mload(0)
                }
                // None of the above: not successful
                default {
                    success := 0
                }
            }
        }
        return success;
    }
}

// File: contracts/lib/Drainable.sol

// Copyright 2017 Loopring Technology Limited.





/// @title Drainable
/// @author Brecht Devos - <[email protected]>
/// @dev Standard functionality to allow draining funds from a contract.
abstract contract Drainable
{
    using AddressUtil       for address;
    using ERC20SafeTransfer for address;

    event Drained(
        address to,
        address token,
        uint    amount
    );

    function drain(
        address to,
        address token
        )
        external
        returns (uint amount)
    {
        require(canDrain(msg.sender, token), "UNAUTHORIZED");

        if (token == address(0)) {
            amount = address(this).balance;
            to.sendETHAndVerify(amount, gasleft());   // ETH
        } else {
            amount = ERC20(token).balanceOf(address(this));
            token.safeTransferAndVerify(to, amount);  // ERC20 token
        }

        emit Drained(to, token, amount);
    }

    // Needs to return if the address is authorized to call drain.
    function canDrain(address drainer, address token)
        public
        virtual
        view
        returns (bool);
}

// File: contracts/lib/AddressSet.sol

// Copyright 2017 Loopring Technology Limited.


/// @title AddressSet
/// @author Daniel Wang - <[email protected]>
contract AddressSet
{
    struct Set
    {
        address[] addresses;
        mapping (address => uint) positions;
        uint count;
    }
    mapping (bytes32 => Set) private sets;

    function addAddressToSet(
        bytes32 key,
        address addr,
        bool    maintainList
        ) internal
    {
        Set storage set = sets[key];
        require(set.positions[addr] == 0, "ALREADY_IN_SET");

        if (maintainList) {
            require(set.addresses.length == set.count, "PREVIOUSLY_NOT_MAINTAILED");
            set.addresses.push(addr);
        } else {
            require(set.addresses.length == 0, "MUST_MAINTAIN");
        }

        set.count += 1;
        set.positions[addr] = set.count;
    }

    function removeAddressFromSet(
        bytes32 key,
        address addr
        )
        internal
    {
        Set storage set = sets[key];
        uint pos = set.positions[addr];
        require(pos != 0, "NOT_IN_SET");

        delete set.positions[addr];
        set.count -= 1;

        if (set.addresses.length > 0) {
            address lastAddr = set.addresses[set.count];
            if (lastAddr != addr) {
                set.addresses[pos - 1] = lastAddr;
                set.positions[lastAddr] = pos;
            }
            set.addresses.pop();
        }
    }

    function removeSet(bytes32 key)
        internal
    {
        delete sets[key];
    }

    function isAddressInSet(
        bytes32 key,
        address addr
        )
        internal
        view
        returns (bool)
    {
        return sets[key].positions[addr] != 0;
    }

    function numAddressesInSet(bytes32 key)
        internal
        view
        returns (uint)
    {
        Set storage set = sets[key];
        return set.count;
    }

    function addressesInSet(bytes32 key)
        internal
        view
        returns (address[] memory)
    {
        Set storage set = sets[key];
        require(set.count == set.addresses.length, "NOT_MAINTAINED");
        return sets[key].addresses;
    }
}

// File: contracts/lib/Ownable.sol

// Copyright 2017 Loopring Technology Limited.


/// @title Ownable
/// @author Brecht Devos - <[email protected]>
/// @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;

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

    /// @dev The Ownable constructor sets the original `owner` of the contract
    ///      to the sender.
    constructor()
    {
        owner = msg.sender;
    }

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

    /// @dev Allows the current owner to transfer control of the contract to a
    ///      new owner.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(
        address newOwner
        )
        public
        virtual
        onlyOwner
    {
        require(newOwner != address(0), "ZERO_ADDRESS");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    function renounceOwnership()
        public
        onlyOwner
    {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }
}

// File: contracts/lib/Claimable.sol

// Copyright 2017 Loopring Technology Limited.



/// @title Claimable
/// @author Brecht Devos - <[email protected]>
/// @dev Extension for the Ownable contract, where the ownership needs
///      to be claimed. This allows the new owner to accept the transfer.
contract Claimable is Ownable
{
    address public pendingOwner;

    /// @dev Modifier throws if called by any account other than the pendingOwner.
    modifier onlyPendingOwner() {
        require(msg.sender == pendingOwner, "UNAUTHORIZED");
        _;
    }

    /// @dev Allows the current owner to set the pendingOwner address.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(
        address newOwner
        )
        public
        override
        onlyOwner
    {
        require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS");
        pendingOwner = newOwner;
    }

    /// @dev Allows the pendingOwner address to finalize the transfer.
    function claimOwnership()
        public
        onlyPendingOwner
    {
        emit OwnershipTransferred(owner, pendingOwner);
        owner = pendingOwner;
        pendingOwner = address(0);
    }
}

// File: contracts/lib/OwnerManagable.sol

// Copyright 2017 Loopring Technology Limited.




contract OwnerManagable is Claimable, AddressSet
{
    bytes32 internal constant MANAGER = keccak256("__MANAGED__");

    event ManagerAdded  (address indexed manager);
    event ManagerRemoved(address indexed manager);

    modifier onlyManager
    {
        require(isManager(msg.sender), "NOT_MANAGER");
        _;
    }

    modifier onlyOwnerOrManager
    {
        require(msg.sender == owner || isManager(msg.sender), "NOT_OWNER_OR_MANAGER");
        _;
    }

    constructor() Claimable() {}

    /// @dev Gets the managers.
    /// @return The list of managers.
    function managers()
        public
        view
        returns (address[] memory)
    {
        return addressesInSet(MANAGER);
    }

    /// @dev Gets the number of managers.
    /// @return The numer of managers.
    function numManagers()
        public
        view
        returns (uint)
    {
        return numAddressesInSet(MANAGER);
    }

    /// @dev Checks if an address is a manger.
    /// @param addr The address to check.
    /// @return True if the address is a manager, False otherwise.
    function isManager(address addr)
        public
        view
        returns (bool)
    {
        return isAddressInSet(MANAGER, addr);
    }

    /// @dev Adds a new manager.
    /// @param manager The new address to add.
    function addManager(address manager)
        public
        onlyOwner
    {
        addManagerInternal(manager);
    }

    /// @dev Removes a manager.
    /// @param manager The manager to remove.
    function removeManager(address manager)
        public
        onlyOwner
    {
        removeAddressFromSet(MANAGER, manager);
        emit ManagerRemoved(manager);
    }

    function addManagerInternal(address manager)
        internal
    {
        addAddressToSet(MANAGER, manager, true);
        emit ManagerAdded(manager);
    }
}

// File: contracts/aux/FeeCollector.sol

// Copyright 2017 Loopring Technology Limited.




/// @title FeeCollector
/// @author Daniel Wang - <[email protected]>
contract FeeCollector is Drainable, OwnerManagable
{
    function canDrain(address drainer, address /*token*/)
        public
        override
        view
        returns (bool)
    {
        return isManager(drainer) || drainer == owner;
    }

    // Allow receiving ETH
    receive() payable external {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Drained","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"addManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"drainer","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"canDrain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"drain","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numManagers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"removeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50600080546001600160a01b031916331790556114dc806100326000396000f3fe6080604052600436106100cb5760003560e01c8063907d985b11610074578063e68777d71161004e578063e68777d7146102f1578063f2fde38b14610306578063f3ae241514610346576100d2565b8063907d985b14610240578063ac18de431461029c578063e30c3978146102dc576100d2565b806372311705116100a55780637231170514610143578063837971e4146101a85780638da5cb5b14610202576100d2565b80632d06177a146100d75780634e71e0c814610119578063715018a61461012e576100d2565b366100d257005b600080fd5b3480156100e357600080fd5b50610117600480360360208110156100fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610386565b005b34801561012557600080fd5b50610117610418565b34801561013a57600080fd5b50610117610534565b34801561014f57600080fd5b50610158610629565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561019457818101518382015260200161017c565b505050509050019250505060405180910390f35b3480156101b457600080fd5b506101f0600480360360408110156101cb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610659565b60408051918252519081900360200190f35b34801561020e57600080fd5b5061021761082e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561024c57600080fd5b506102886004803603604081101561026357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661084a565b604080519115158252519081900360200190f35b3480156102a857600080fd5b50610117600480360360208110156102bf57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610881565b3480156102e857600080fd5b50610217610975565b3480156102fd57600080fd5b506101f0610991565b34801561031257600080fd5b506101176004803603602081101561032957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109bc565b34801561035257600080fd5b506102886004803603602081101561036957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b34565b60005473ffffffffffffffffffffffffffffffffffffffff16331461040c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b61041581610b66565b50565b60015473ffffffffffffffffffffffffffffffffffffffff16331461049e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105ba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60606106547fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8610bd6565b905090565b6000610665338361084a565b6106d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216610716575047610710815a73ffffffffffffffffffffffffffffffffffffffff86169190610cd4565b506107d1565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b15801561078257600080fd5b505afa158015610796573d6000803e3d6000fd5b505050506040513d60208110156107ac57600080fd5b505190506107d173ffffffffffffffffffffffffffffffffffffffff83168483610d65565b6040805173ffffffffffffffffffffffffffffffffffffffff80861682528416602082015280820183905290517fbfd2431e6c719bec0308db4f4ed0afc39712d368867354c711a1ea1e384fa7819181900360600190a192915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600061085583610b34565b8061087a575060005473ffffffffffffffffffffffffffffffffffffffff8481169116145b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461090757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6109317fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882610d76565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60006106547fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8610f92565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a4257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615801590610a82575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b610aed57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f414444524553530000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610b607fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f883610fa8565b92915050565b610b927fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8826001610fe3565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600081815260026020819052604090912080549181015460609214610c5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4d41494e5441494e4544000000000000000000000000000000000000604482015290519081900360640190fd5b60008381526002602090815260409182902080548351818402810184019094528084529091830182828015610cc757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c9c575b5050505050915050919050565b6000610cf773ffffffffffffffffffffffffffffffffffffffff851684846111ff565b90508061087a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5452414e534645525f4641494c55524500000000000000000000000000000000604482015290519081900360640190fd5b610d718383835a61129c565b505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600181019092529091205480610e1757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f494e5f53455400000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001830160205260408120556002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055815415610f8c57600082600001836002015481548110610e8557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116915084168114610f275780836000016001840381548110610ec657fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918316815260018501909152604090208290555b8254839080610f3257fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505b50505050565b6000908152600260208190526040909120015490565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600101909152902054151592915050565b600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845260018101909252909120541561108457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f494e5f534554000000000000000000000000000000000000604482015290519081900360640190fd5b81156111525760028101548154146110fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c454400000000000000604482015290519081900360640190fd5b80546001810182556000828152602090200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556111c0565b8054156111c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d5553545f4d41494e5441494e00000000000000000000000000000000000000604482015290519081900360640190fd5b60028101805460019081019182905573ffffffffffffffffffffffffffffffffffffffff90941660009081529190930160205260409020919091555050565b60008261120e5750600161087a565b600061122f8573ffffffffffffffffffffffffffffffffffffffff16611313565b60405190915073ffffffffffffffffffffffffffffffffffffffff821690849086906000818181858888f193505050503d806000811461128b576040519150601f19603f3d011682016040523d82523d6000602084013e611290565b606091505b50909695505050505050565b6112a884848484611316565b610f8c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5452414e534645525f4641494c55524500000000000000000000000000000000604482015290519081900360640190fd5b90565b6040805173ffffffffffffffffffffffffffffffffffffffff8086166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485938a16928792869282918083835b602083106113eb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016113ae565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d806000811461144e576040519150601f19603f3d011682016040523d82523d6000602084013e611453565b606091505b505090506114608161146b565b979650505050505050565b600081156114a2573d801561148b576020811461149457600092506114a0565b600192506114a0565b60206000803e60005192505b505b509056fea2646970667358221220f0fb48cd208ab708d902b7f3e309cdb1cad4f659982d9971552dec91929316b664736f6c63430007000033

Deployed Bytecode

0x6080604052600436106100cb5760003560e01c8063907d985b11610074578063e68777d71161004e578063e68777d7146102f1578063f2fde38b14610306578063f3ae241514610346576100d2565b8063907d985b14610240578063ac18de431461029c578063e30c3978146102dc576100d2565b806372311705116100a55780637231170514610143578063837971e4146101a85780638da5cb5b14610202576100d2565b80632d06177a146100d75780634e71e0c814610119578063715018a61461012e576100d2565b366100d257005b600080fd5b3480156100e357600080fd5b50610117600480360360208110156100fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610386565b005b34801561012557600080fd5b50610117610418565b34801561013a57600080fd5b50610117610534565b34801561014f57600080fd5b50610158610629565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561019457818101518382015260200161017c565b505050509050019250505060405180910390f35b3480156101b457600080fd5b506101f0600480360360408110156101cb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610659565b60408051918252519081900360200190f35b34801561020e57600080fd5b5061021761082e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561024c57600080fd5b506102886004803603604081101561026357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661084a565b604080519115158252519081900360200190f35b3480156102a857600080fd5b50610117600480360360208110156102bf57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610881565b3480156102e857600080fd5b50610217610975565b3480156102fd57600080fd5b506101f0610991565b34801561031257600080fd5b506101176004803603602081101561032957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109bc565b34801561035257600080fd5b506102886004803603602081101561036957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b34565b60005473ffffffffffffffffffffffffffffffffffffffff16331461040c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b61041581610b66565b50565b60015473ffffffffffffffffffffffffffffffffffffffff16331461049e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105ba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60606106547fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8610bd6565b905090565b6000610665338361084a565b6106d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216610716575047610710815a73ffffffffffffffffffffffffffffffffffffffff86169190610cd4565b506107d1565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b15801561078257600080fd5b505afa158015610796573d6000803e3d6000fd5b505050506040513d60208110156107ac57600080fd5b505190506107d173ffffffffffffffffffffffffffffffffffffffff83168483610d65565b6040805173ffffffffffffffffffffffffffffffffffffffff80861682528416602082015280820183905290517fbfd2431e6c719bec0308db4f4ed0afc39712d368867354c711a1ea1e384fa7819181900360600190a192915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600061085583610b34565b8061087a575060005473ffffffffffffffffffffffffffffffffffffffff8481169116145b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461090757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6109317fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882610d76565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60006106547fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8610f92565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a4257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615801590610a82575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b610aed57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f414444524553530000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610b607fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f883610fa8565b92915050565b610b927fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8826001610fe3565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600081815260026020819052604090912080549181015460609214610c5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4d41494e5441494e4544000000000000000000000000000000000000604482015290519081900360640190fd5b60008381526002602090815260409182902080548351818402810184019094528084529091830182828015610cc757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c9c575b5050505050915050919050565b6000610cf773ffffffffffffffffffffffffffffffffffffffff851684846111ff565b90508061087a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5452414e534645525f4641494c55524500000000000000000000000000000000604482015290519081900360640190fd5b610d718383835a61129c565b505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600181019092529091205480610e1757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f494e5f53455400000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001830160205260408120556002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055815415610f8c57600082600001836002015481548110610e8557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116915084168114610f275780836000016001840381548110610ec657fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918316815260018501909152604090208290555b8254839080610f3257fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505b50505050565b6000908152600260208190526040909120015490565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600101909152902054151592915050565b600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845260018101909252909120541561108457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f494e5f534554000000000000000000000000000000000000604482015290519081900360640190fd5b81156111525760028101548154146110fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c454400000000000000604482015290519081900360640190fd5b80546001810182556000828152602090200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556111c0565b8054156111c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d5553545f4d41494e5441494e00000000000000000000000000000000000000604482015290519081900360640190fd5b60028101805460019081019182905573ffffffffffffffffffffffffffffffffffffffff90941660009081529190930160205260409020919091555050565b60008261120e5750600161087a565b600061122f8573ffffffffffffffffffffffffffffffffffffffff16611313565b60405190915073ffffffffffffffffffffffffffffffffffffffff821690849086906000818181858888f193505050503d806000811461128b576040519150601f19603f3d011682016040523d82523d6000602084013e611290565b606091505b50909695505050505050565b6112a884848484611316565b610f8c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5452414e534645525f4641494c55524500000000000000000000000000000000604482015290519081900360640190fd5b90565b6040805173ffffffffffffffffffffffffffffffffffffffff8086166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485938a16928792869282918083835b602083106113eb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016113ae565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d806000811461144e576040519150601f19603f3d011682016040523d82523d6000602084013e611453565b606091505b505090506114608161146b565b979650505050505050565b600081156114a2573d801561148b576020811461149457600092506114a0565b600192506114a0565b60206000803e60005192505b505b509056fea2646970667358221220f0fb48cd208ab708d902b7f3e309cdb1cad4f659982d9971552dec91929316b664736f6c63430007000033

Deployed Bytecode Sourcemap

18202:322:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17464:123;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17464:123:0;;;;:::i;:::-;;15783:205;;;;;;;;;;;;;:::i;14564:161::-;;;;;;;;;;;;;:::i;16695:140::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10215:545;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10215:545:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13624:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18261:195;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18261:195:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;17675:176;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17675:176:0;;;;:::i;15083:27::-;;;;;;;;;;;;;:::i;16926:134::-;;;;;;;;;;;;;:::i;15456:247::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15456:247:0;;;;:::i;17227:147::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17227:147:0;;;;:::i;17464:123::-;14070:5;;;;14056:10;:19;14048:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17552:27:::1;17571:7;17552:18;:27::i;:::-;17464:123:::0;:::o;15783:205::-;15264:12;;;;15250:10;:26;15242:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15900:12:::1;::::0;::::1;15893:5:::0;;15872:41:::1;::::0;15900:12:::1;::::0;;::::1;::::0;15893:5;;::::1;::::0;15872:41:::1;::::0;::::1;15932:12;::::0;;::::1;15924:20:::0;;;;;::::1;15932:12;::::0;::::1;15924:20;::::0;;;15955:25:::1;::::0;;15783:205::o;14564:161::-;14070:5;;;;14056:10;:19;14048:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14685:1:::1;14670:5:::0;;14649:39:::1;::::0;::::1;14670:5:::0;;::::1;::::0;14649:39:::1;::::0;14685:1;;14649:39:::1;14715:1;14699:18:::0;;;::::1;::::0;;14564:161::o;16695:140::-;16763:16;16804:23;16189:24;16804:14;:23::i;:::-;16797:30;;16695:140;:::o;10215:545::-;10322:11;10359:27;10368:10;10380:5;10359:8;:27::i;:::-;10351:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10420:19;;;10416:293;;-1:-1:-1;10465:21:0;10501:38;10465:21;10529:9;10501:19;;;;:38;:19;:38::i;:::-;;10416:293;;;10590:37;;;;;;10621:4;10590:37;;;;;;:22;;;;;;:37;;;;;;;;;;;;;;:22;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10590:37:0;;-1:-1:-1;10642:39:0;:27;;;10670:2;10590:37;10642:27;:39::i;:::-;10726:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10215:545;;;;:::o;13624:20::-;;;;;;:::o;18261:195::-;18381:4;18410:18;18420:7;18410:9;:18::i;:::-;:38;;;-1:-1:-1;18443:5:0;;;18432:16;;;18443:5;;18432:16;18410:38;18403:45;18261:195;-1:-1:-1;;;18261:195:0:o;17675:176::-;14070:5;;;;14056:10;:19;14048:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17766:38:::1;16189:24;17796:7;17766:20;:38::i;:::-;17820:23;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;17675:176:::0;:::o;15083:27::-;;;;;;:::o;16926:134::-;16997:4;17026:26;16189:24;17026:17;:26::i;15456:247::-;14070:5;;;;14056:10;:19;14048:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15598:22:::1;::::0;::::1;::::0;;::::1;::::0;:43:::1;;-1:-1:-1::0;15636:5:0::1;::::0;::::1;15624:17:::0;;::::1;15636:5:::0;::::1;15624:17;;15598:43;15590:71;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15672:12;:23:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;15456:247::o;17227:147::-;17308:4;17337:29;16189:24;17361:4;17337:14;:29::i;:::-;17330:36;17227:147;-1:-1:-1;;17227:147:0:o;17859:163::-;17938:39;16189:24;17963:7;17972:4;17938:15;:39::i;:::-;17993:21;;;;;;;;;;;17859:163;:::o;12985:264::-;13106:15;13124:9;;;:4;:9;;;;;;;;13165:20;;13152:9;;;;13072:16;;13152:33;13144:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13222:9;;;;:4;:9;;;;;;;;;13215:26;;;;;;;;;;;;;;;;;13222:9;;13215:26;;13222:9;13215:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12985:264;;;:::o;1872:269::-;2018:12;2058:28;:10;;;2069:6;2077:8;2058:10;:28::i;:::-;2048:38;;2105:7;2097:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4925:278;5070:125;5118:5;5138:2;5155:5;5175:9;5070:33;:125::i;:::-;4925:278;;;:::o;11892:600::-;12012:15;12030:9;;;:4;:9;;;;;;;;12061:19;;;;;:13;;;:19;;;;;;;12099:8;12091:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12142:19;;;;;;;:13;;;:19;;;;;12135:26;12172:9;;;:14;;;;;;12203:20;;:24;12199:286;;12244:16;12263:3;:13;;12277:3;:9;;;12263:24;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12306:16:0;;;;12302:138;;12368:8;12343:3;:13;;12363:1;12357:3;:7;12343:22;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;12395:23;;;;;-1:-1:-1;12395:13:0;;:23;;;;;;:29;;;12302:138;12454:19;;:3;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12199:286:0;11892:600;;;;:::o;12803:174::-;12893:4;12933:9;;;:4;:9;;;;;;;;12960;;;12803:174::o;12598:197::-;12728:4;12757:9;;;:4;:9;;;;;;;;:25;;;;;:19;;:25;;;;;;:30;;12598:197;;;;:::o;11330:554::-;11467:15;11485:9;;;:4;:9;;;;;;;;11513:19;;;;;:13;;;:19;;;;;;;:24;11505:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11573:12;11569:239;;;11634:9;;;;11610:20;;:33;11602:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11688:24;;;;;;;-1:-1:-1;11688:24:0;;;;;;;;;;;;;;;;;11569:239;;;11753:20;;:25;11745:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11820:9;;;:14;;11833:1;11820:14;;;;;;;11845:19;;;;11820:9;11845:19;;;:13;;;;:19;;;;;:31;;;;-1:-1:-1;;11330:554:0:o;1323:394::-;1460:12;1494:11;1490:55;;-1:-1:-1;1529:4:0;1522:11;;1490:55;1555:25;1583:14;:2;:12;;;:14::i;:::-;1661:48;;1555:42;;-1:-1:-1;1661:14:0;;;;1696:8;;1683:6;;1661:48;;;;1683:6;1661:14;1696:8;1661:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1648:61:0;;1323:394;-1:-1:-1;;;;;;1323:394:0:o;5510:310::-;5716:52;5741:5;5748:2;5752:5;5759:8;5716:24;:52::i;:::-;5694:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1008:164;1159:4;1008:164::o;5828:800::-;6409:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6446:18;6409:103;;;6542:35;;;;6005:4;;;;6542:10;;;6558:8;;6409:103;;6542:35;;;;6409:103;6542:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6523:54;;;6595:25;6612:7;6595:16;:25::i;:::-;6588:32;5828:800;-1:-1:-1;;;;;;;5828:800:0:o;8616:1127::-;8726:4;9049:7;9045:666;;;9108:16;9263:61;;;;9441:2;9436:115;;;;9665:1;9654:12;;9101:584;;9263:61;9304:1;9293:12;;9263:61;;9436:115;9488:2;9485:1;9482;9467:24;9530:1;9524:8;9513:19;;9101:584;;9082:618;-1:-1:-1;9728:7:0;8616:1127::o

Swarm Source

ipfs://f0fb48cd208ab708d902b7f3e309cdb1cad4f659982d9971552dec91929316b6

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.