ETH Price: $2,114.37 (-1.79%)

Contract

0xecB55b39ADB7C166CCab4CCb77463dEd1d201De4
 

Overview

ETH Balance

17.927310255373170953 ETH

Eth Value

$37,904.89 (@ $2,114.37/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

> 10 Internal Transactions and 3 Token Transfers found.

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer242978912026-01-23 13:50:1157 days ago1769176211
0xecB55b39...d1d201De4
0.00092223 ETH
Transfer232237742025-08-26 7:24:11207 days ago1756193051
0xecB55b39...d1d201De4
0.00186034 ETH
Transfer231565362025-08-16 22:17:35217 days ago1755382655
0xecB55b39...d1d201De4
0.02591313 ETH
Transfer203834622024-07-25 12:08:23604 days ago1721909303
0xecB55b39...d1d201De4
0.01002988 ETH
Transfer203829502024-07-25 10:24:59604 days ago1721903099
0xecB55b39...d1d201De4
0.01780156 ETH
Transfer203829392024-07-25 10:22:47604 days ago1721902967
0xecB55b39...d1d201De4
0.06133002 ETH
Transfer198587852024-05-13 4:43:59678 days ago1715575439
0xecB55b39...d1d201De4
0.00385252 ETH
Transfer190964762024-01-27 7:37:47784 days ago1706341067
0xecB55b39...d1d201De4
0.02980863 ETH
Transfer190964632024-01-27 7:35:11784 days ago1706340911
0xecB55b39...d1d201De4
0.04243916 ETH
Transfer178185232023-08-01 7:01:11963 days ago1690873271
0xecB55b39...d1d201De4
0.01623459 ETH
Transfer178184742023-08-01 6:51:23963 days ago1690872683
0xecB55b39...d1d201De4
0.18423112 ETH
Transfer178184672023-08-01 6:49:59963 days ago1690872599
0xecB55b39...d1d201De4
0.05411532 ETH
Transfer169133902023-03-26 18:30:111091 days ago1679855411
0xecB55b39...d1d201De4
0.03865081 ETH
Transfer169014932023-03-25 2:24:231093 days ago1679711063
0xecB55b39...d1d201De4
0.00358748 ETH
Transfer168075902023-03-11 21:45:471106 days ago1678571147
0xecB55b39...d1d201De4
0.01106343 ETH
Transfer166748922023-02-21 5:47:351124 days ago1676958455
0xecB55b39...d1d201De4
0.01948892 ETH
Transfer164561142023-01-21 15:36:351155 days ago1674315395
0xecB55b39...d1d201De4
0.05610058 ETH
Transfer157285072022-10-12 0:40:231257 days ago1665535223
0xecB55b39...d1d201De4
0.03050248 ETH
Transfer155083502022-09-10 10:36:111288 days ago1662806171
0xecB55b39...d1d201De4
0.00180549 ETH
Transfer154774712022-09-05 11:00:191293 days ago1662375619
0xecB55b39...d1d201De4
0.01155734 ETH
Transfer154500012022-09-01 1:31:141298 days ago1661995874
0xecB55b39...d1d201De4
0.03077663 ETH
Transfer154474052022-08-31 15:28:521298 days ago1661959732
0xecB55b39...d1d201De4
0.03370605 ETH
Transfer154473572022-08-31 15:19:261298 days ago1661959166
0xecB55b39...d1d201De4
0.04611183 ETH
Transfer154396812022-08-30 9:47:001299 days ago1661852820
0xecB55b39...d1d201De4
0.06283967 ETH
Transfer154341182022-08-29 12:35:151300 days ago1661776515
0xecB55b39...d1d201De4
0.02079572 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DiamondDividendTracker

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2026-02-06
*/

/**
 *Submitted for verification at Etherscan.io on 2022-03-25
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

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

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

    function transfer(address to, 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 from,
        address to,
        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 IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

contract Ownable {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

library SignedSafeMath {
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        return a - b;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

library SafeCast {
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(
            value <= type(uint224).max,
            "SafeCast: value doesn't fit in 224 bits"
        );
        return uint224(value);
    }

    function toUint128(uint256 value) internal pure returns (uint128) {
        require(
            value <= type(uint128).max,
            "SafeCast: value doesn't fit in 128 bits"
        );
        return uint128(value);
    }

    function toUint96(uint256 value) internal pure returns (uint96) {
        require(
            value <= type(uint96).max,
            "SafeCast: value doesn't fit in 96 bits"
        );
        return uint96(value);
    }

    function toUint64(uint256 value) internal pure returns (uint64) {
        require(
            value <= type(uint64).max,
            "SafeCast: value doesn't fit in 64 bits"
        );
        return uint64(value);
    }

    function toUint32(uint256 value) internal pure returns (uint32) {
        require(
            value <= type(uint32).max,
            "SafeCast: value doesn't fit in 32 bits"
        );
        return uint32(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        require(
            value <= type(uint16).max,
            "SafeCast: value doesn't fit in 16 bits"
        );
        return uint16(value);
    }

    function toUint8(uint256 value) internal pure returns (uint8) {
        require(
            value <= type(uint8).max,
            "SafeCast: value doesn't fit in 8 bits"
        );
        return uint8(value);
    }

    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    function toInt128(int256 value) internal pure returns (int128) {
        require(
            value >= type(int128).min && value <= type(int128).max,
            "SafeCast: value doesn't fit in 128 bits"
        );
        return int128(value);
    }

    function toInt64(int256 value) internal pure returns (int64) {
        require(
            value >= type(int64).min && value <= type(int64).max,
            "SafeCast: value doesn't fit in 64 bits"
        );
        return int64(value);
    }

    function toInt32(int256 value) internal pure returns (int32) {
        require(
            value >= type(int32).min && value <= type(int32).max,
            "SafeCast: value doesn't fit in 32 bits"
        );
        return int32(value);
    }

    function toInt16(int256 value) internal pure returns (int16) {
        require(
            value >= type(int16).min && value <= type(int16).max,
            "SafeCast: value doesn't fit in 16 bits"
        );
        return int16(value);
    }

    function toInt8(int256 value) internal pure returns (int8) {
        require(
            value >= type(int8).min && value <= type(int8).max,
            "SafeCast: value doesn't fit in 8 bits"
        );
        return int8(value);
    }

    function toInt256(uint256 value) internal pure returns (int256) {
        require(
            value <= uint256(type(int256).max),
            "SafeCast: value doesn't fit in an int256"
        );
        return int256(value);
    }
}

interface DividendPayingTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);

    function distributeDividends() external payable;

    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(
        address indexed to,
        uint256 weiAmount,
        address received
    );
}

interface DividendPayingTokenOptionalInterface {
    function withdrawableDividendOf(address _owner)
        external
        view
        returns (uint256);

    function withdrawnDividendOf(address _owner)
        external
        view
        returns (uint256);

    function accumulativeDividendOf(address _owner)
        external
        view
        returns (uint256);
}

abstract contract DividendPayingToken is
    ERC20,
    DividendPayingTokenInterface,
    DividendPayingTokenOptionalInterface
{
    using SafeMath for uint256;
    using SignedSafeMath for int256;
    using SafeCast for uint256;
    using SafeCast for int256;
    uint256 internal constant magnitude = 2**128;

    uint256 internal magnifiedDividendPerShare;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    uint256 public totalDividendsDistributed;

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {}

    receive() external payable {
        distributeDividends();
    }

    function distributeDividends() public payable override {
        require(totalSupply() > 0);

        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);

            totalDividendsDistributed = totalDividendsDistributed.add(
                msg.value
            );
        }
    }

    function withdrawDividend() public virtual override {
        _withdrawDividendOfUser(payable(msg.sender), payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user, address payable to)
        internal
        returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit DividendWithdrawn(user, _withdrawableDividend, to);
            (bool success, ) = to.call{value: _withdrawableDividend}("");

            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
                return 0;
            }

            return _withdrawableDividend;
        }

        return 0;
    }

    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return
            magnifiedDividendPerShare
                .mul(balanceOf(_owner))
                .toInt256()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256() / magnitude;
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256());
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);

        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function getAccount(address _account)
        public
        view
        returns (uint256 _withdrawableDividends, uint256 _withdrawnDividends)
    {
        _withdrawableDividends = withdrawableDividendOf(_account);
        _withdrawnDividends = withdrawnDividends[_account];
    }
}

contract DiamondDividendTracker is DividendPayingToken, Ownable {
    using SafeMath for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private tokenHoldersCount;
    mapping(address => bool) private tokenHoldersMap;

    mapping(address => bool) public excludedFromDividends;

    uint256 public immutable minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);

    constructor()
        DividendPayingToken(
            "Diamond_Dividend_Tracker",
            "Diamond_Dividend_Tracker"
        )
    {
        minimumTokenBalanceForDividends = 10000 * 10**18;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function _approve(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Diamond_Dividend_Tracker: No approvals allowed");
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Diamond_Dividend_Tracker: No transfers allowed");
    }

    function withdrawDividend() public pure override {
        require(
            false,
            "Diamond_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main Diamond contract."
        );
    }

    function excludeFromDividends(address account) external onlyOwner {
        excludedFromDividends[account] = true;

        _setBalance(account, 0);

        if (tokenHoldersMap[account] == true) {
            tokenHoldersMap[account] = false;
            tokenHoldersCount.decrement();
        }

        emit ExcludeFromDividends(account);
    }

    function includeFromDividends(address account, uint256 balance)
        external
        onlyOwner
    {
        excludedFromDividends[account] = false;

        if (balance >= minimumTokenBalanceForDividends) {
            _setBalance(account, balance);

            if (tokenHoldersMap[account] == false) {
                tokenHoldersMap[account] = true;
                tokenHoldersCount.increment();
            }
        }

        emit ExcludeFromDividends(account);
    }

    function isExcludeFromDividends(address account)
        external
        view
        onlyOwner
        returns (bool)
    {
        return excludedFromDividends[account];
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersCount.current();
    }

    function setBalance(address payable account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }

        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);

            if (tokenHoldersMap[account] == false) {
                tokenHoldersMap[account] = true;
                tokenHoldersCount.increment();
            }
        } else {
            _setBalance(account, 0);

            if (tokenHoldersMap[account] == true) {
                tokenHoldersMap[account] = false;
                tokenHoldersCount.decrement();
            }
        }
    }

    function processAccount(address account, address toAccount)
        public
        onlyOwner
        returns (uint256)
    {
        uint256 amount = _withdrawDividendOfUser(
            payable(account),
            payable(toAccount)
        );
        return amount;
    }
}

contract Diamond is ERC20, Ownable {
    using SafeMath for uint256;
    using Counters for Counters.Counter;

    string private constant _name = "Diamond";
    string private constant _symbol = "DIAMONDS";
    uint8 private constant _decimals = 18;
    uint256 private constant _tTotal = 1e12 * 10**18;

    IUniswapV2Router02 private uniswapV2Router =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    bool private tradingOpen = false;
    uint256 private launchBlock = 0;
    address private uniswapV2Pair;

    IERC20 private MyBagsInstance;
    uint256 private minimumMyBagsToken = 1e8 * 10**18;
    uint256 private privateSaleTimestamp;
    uint256 private publicSaleTimestamp;

    mapping(address => bool) private automatedMarketMakerPairs;
    mapping(address => bool) public isExcludeFromFee;
    mapping(address => bool) public isBot;

    uint256 private walletLimitPercentage = 50;
    mapping(address => bool) public isExludeFromWalletLimit;

    uint256 private baseBuyTax = 10;
    uint256 public baseSellTax = 5;
    uint256 public sellPercentageOfHolding = 20;
    uint256 public minutesIntervalPerSell = 7200 minutes;
    mapping(address => uint256) public initialSellTimestamp;

    uint256 private autoLP = 27;
    uint256 private devFee = 40;
    uint256 private marketingFee = 33;

    uint256 public minContractTokensToSwap = 2e9 * 10**18;
    bool public swapAll = false;

    struct MinutesRangeTax {
        uint256 from;
        uint256 to;
        uint256 tax;
    }

    mapping(address => uint256) public initialBuyTimestamp;
    mapping(uint8 => MinutesRangeTax) public minutesRangeTaxes;
    uint8 public maxIndexMinutesRange;

    address private devWalletAddress;
    address private marketingWalletAddress;

    DiamondDividendTracker public dividendTracker;
    uint256 minimumTokenBalanceForDividends = 10000 * 10**18;
    mapping(address => uint256) public lastTransfer;

    uint256 public pendingTokensForReward;
    uint256 public minRewardTokensToSwap = 10000 * 10**18;

    uint256 public pendingEthReward;

    struct ClaimedEth {
        uint256 ethAmount;
        uint256 tokenAmount;
        uint256 timestamp;
    }

    Counters.Counter private claimedHistoryIds;

    mapping(uint256 => ClaimedEth) private claimedEthMap;
    mapping(address => uint256[]) private userClaimedIds;

    event BuyFees(address from, address to, uint256 amountTokens);
    event SellFees(address from, address to, uint256 amountTokens);
    event AddLiquidity(uint256 amountTokens, uint256 amountEth);
    event SwapTokensForEth(uint256 sentTokens, uint256 receivedEth);
    event SwapEthForTokens(uint256 sentEth, uint256 receivedTokens);
    event DistributeFees(uint256 devEth, uint256 remarketingEth);
    event AddRewardPool(uint256 _ethAmount);

    event SendDividends(uint256 amount);

    event DividendClaimed(
        uint256 ethAmount,
        uint256 tokenAmount,
        address account
    );

    constructor(
        address _devWalletAddress,
        address _marketingWalletAddress,
        address _myBagsTokenAddress
    ) ERC20(_name, _symbol) {
        devWalletAddress = _devWalletAddress;
        marketingWalletAddress = _marketingWalletAddress;

        MyBagsInstance = IERC20(_myBagsTokenAddress);

        isExcludeFromFee[owner()] = true;
        isExcludeFromFee[address(this)] = true;
        isExludeFromWalletLimit[owner()] = true;
        isExludeFromWalletLimit[address(this)] = true;
        isExludeFromWalletLimit[address(uniswapV2Router)] = true;

        dividendTracker = new DiamondDividendTracker();
        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(address(uniswapV2Router));
        minutesRangeTaxes[1].from = 0 minutes;
        minutesRangeTaxes[1].to = 7200 minutes;
        minutesRangeTaxes[1].tax = 30;
        minutesRangeTaxes[2].from = 7200 minutes;
        minutesRangeTaxes[2].to = 14400 minutes;
        minutesRangeTaxes[2].tax = 25;
        minutesRangeTaxes[3].from = 14400 minutes;
        minutesRangeTaxes[3].to = 21600 minutes;
        minutesRangeTaxes[3].tax = 20;
        minutesRangeTaxes[4].from = 21600 minutes;
        minutesRangeTaxes[4].to = 28800 minutes;
        minutesRangeTaxes[4].tax = 15;

        maxIndexMinutesRange = 4;

        _mint(owner(), _tTotal);
    }

    function openTrading(uint256 _launchTime, uint256 _minutesForPrivateSale)
        external
        onlyOwner
    {
        require(!tradingOpen, "Diamond: Trading is already open");
        require(_launchTime > block.timestamp, "Diamond: Invalid timestamp");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this),
                uniswapV2Router.WETH()
            );

        automatedMarketMakerPairs[uniswapV2Pair] = true;
        dividendTracker.excludeFromDividends(uniswapV2Pair);

        addLiquidity(balanceOf(address(this)), address(this).balance);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        tradingOpen = true;
        privateSaleTimestamp = _launchTime;
        publicSaleTimestamp = _launchTime.add(
            _minutesForPrivateSale.mul(1 minutes)
        );
        launchBlock = block.number;
    }

    function manualSwap() external onlyOwner {
        uint256 totalTokens = balanceOf(address(this)).sub(
            pendingTokensForReward
        );

        swapTokensForEth(totalTokens);
    }

    function manualSend() external onlyOwner {
        uint256 totalEth = address(this).balance.sub(pendingEthReward);

        uint256 devFeesToSend = totalEth.mul(devFee).div(
            uint256(100).sub(autoLP)
        );
        uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(
            uint256(100).sub(autoLP)
        );
        uint256 remainingEthForFees = totalEth.sub(devFeesToSend).sub(
            marketingFeesToSend
        );
        devFeesToSend = devFeesToSend.add(remainingEthForFees);

        sendEthToWallets(devFeesToSend, marketingFeesToSend);
    }

    function getTax(address _ad) public view returns (uint256) {
        uint256 tax = baseSellTax;

        for (uint8 x = 1; x <= maxIndexMinutesRange; x++) {
            if (
                (initialBuyTimestamp[_ad] + minutesRangeTaxes[x].from <=
                    block.timestamp &&
                    initialBuyTimestamp[_ad] + minutesRangeTaxes[x].to >=
                    block.timestamp)
            ) {
                tax = minutesRangeTaxes[x].tax;
                return tax;
            }
        }

        return tax;
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

    function withdrawableDividendOf(address _account)
        public
        view
        returns (uint256)
    {
        return dividendTracker.withdrawableDividendOf(_account);
    }

    function dividendTokenBalanceOf(address _account)
        public
        view
        returns (uint256)
    {
        return dividendTracker.balanceOf(_account);
    }

    function claim() external {
        _claim(payable(msg.sender), false);
    }

    function reinvest() external {
        _claim(payable(msg.sender), true);
    }

    function _claim(address payable _account, bool _reinvest) private {
        uint256 withdrawableAmount = dividendTracker.withdrawableDividendOf(
            _account
        );
        require(
            withdrawableAmount > 0,
            "Diamond: Claimer has no withdrawable dividend"
        );
        uint256 ethAmount;
        uint256 tokenAmount;

        if (!_reinvest) {
            ethAmount = dividendTracker.processAccount(_account, _account);
        } else {
            ethAmount = dividendTracker.processAccount(_account, address(this));
            if (ethAmount > 0) {
                tokenAmount = swapEthForTokens(ethAmount, _account);
            }
        }
        if (ethAmount > 0) {
            claimedHistoryIds.increment();
            uint256 hId = claimedHistoryIds.current();
            claimedEthMap[hId].ethAmount = ethAmount;
            claimedEthMap[hId].tokenAmount = tokenAmount;
            claimedEthMap[hId].timestamp = block.timestamp;

            userClaimedIds[_account].push(hId);

            emit DividendClaimed(ethAmount, tokenAmount, _account);
        }
    }

    function getNumberOfDividendTokenHolders() external view returns (uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }

    function getAccount(address _account)
        public
        view
        returns (
            uint256 withdrawableDividends,
            uint256 withdrawnDividends,
            uint256 balance
        )
    {
        (withdrawableDividends, withdrawnDividends) = dividendTracker
            .getAccount(_account);
        return (withdrawableDividends, withdrawnDividends, balanceOf(_account));
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    function _transfer(
        address _from,
        address _to,
        uint256 _amount
    ) internal virtual override {
        require(!isBot[_from] && !isBot[_to]);

        uint256 transferAmount = _amount;
        uint256 prevWalletLimit = walletLimitPercentage;
        if (
            tradingOpen &&
            (automatedMarketMakerPairs[_from] ||
                automatedMarketMakerPairs[_to]) &&
            !isExcludeFromFee[_from] &&
            !isExcludeFromFee[_to]
        ) {
            require(
                privateSaleTimestamp <= block.timestamp,
                "Diamond: Private and public sale is not open"
            );
            if (
                privateSaleTimestamp <= block.timestamp &&
                publicSaleTimestamp > block.timestamp
            ) {
                walletLimitPercentage = 10;
                require(
                    MyBagsInstance.balanceOf(_to) >= minimumMyBagsToken,
                    "Diamond: Not enough $MyBagsToken"
                );
            }
            transferAmount = takeFees(_from, _to, _amount);
        }
        if (initialBuyTimestamp[_to] == 0) {
            initialBuyTimestamp[_to] = block.timestamp;
        }
        if (!automatedMarketMakerPairs[_to] && !isExludeFromWalletLimit[_to]) {
            uint256 addressBalance = balanceOf(_to).add(transferAmount);
            require(
                addressBalance <=
                    totalSupply().mul(walletLimitPercentage).div(10000),
                "Diamond: Wallet balance limit reached"
            );
        }

        super._transfer(_from, _to, transferAmount);
        walletLimitPercentage = prevWalletLimit;
        if (!dividendTracker.isExcludeFromDividends(_from)) {
            try
                dividendTracker.setBalance(payable(_from), balanceOf(_from))
            {} catch {}
        }
        if (!dividendTracker.isExcludeFromDividends(_to)) {
            try
                dividendTracker.setBalance(payable(_to), balanceOf(_to))
            {} catch {}
        }
    }

    function _setAutomatedMarketMakerPair(address _pair, bool _value) private {
        require(
            automatedMarketMakerPairs[_pair] != _value,
            "Diamond: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[_pair] = _value;

        if (_value) {
            dividendTracker.excludeFromDividends(_pair);
        }
    }

    function setMinimumMyBagsToken(uint256 _minimumMyBagsToken)
        external
        onlyOwner
    {
        minimumMyBagsToken = _minimumMyBagsToken;
    }

    function setExcludeFromFee(address _address, bool _isExludeFromFee)
        external
        onlyOwner
    {
        isExcludeFromFee[_address] = _isExludeFromFee;
    }

    function setExludeFromDividends(
        address _address,
        bool _isExludeFromDividends
    ) external onlyOwner {
        if (_isExludeFromDividends) {
            dividendTracker.excludeFromDividends(_address);
        } else {
            dividendTracker.includeFromDividends(_address, balanceOf(_address));
        }
    }

    function setExludeFromWalletLimit(
        address _address,
        bool _isExludeFromWalletLimit
    ) external onlyOwner {
        isExludeFromWalletLimit[_address] = _isExludeFromWalletLimit;
    }

    function setWalletLimitPercentage(uint256 _percentage) external onlyOwner {
        walletLimitPercentage = _percentage;
    }

    function setTaxes(
        uint256 _baseBuyTax,
        uint256 _baseSellTax,
        uint256 _autoLP,
        uint256 _devFee,
        uint256 _marketingFee
    ) external onlyOwner {
        require(_baseBuyTax <= 10 && baseSellTax <= 5);

        baseBuyTax = _baseBuyTax;
        baseSellTax = _baseSellTax;
        autoLP = _autoLP;
        devFee = _devFee;
        marketingFee = _marketingFee;
    }

    function setMinContractTokensToSwap(uint256 _numToken) public onlyOwner {
        minContractTokensToSwap = _numToken;
    }

    function setMinRewardTokensToSwap(uint256 _numToken) public onlyOwner {
        minRewardTokensToSwap = _numToken;
    }

    function setSwapAll(bool _isWapAll) public onlyOwner {
        swapAll = _isWapAll;
    }

    function setMinutesRangeTax(
        uint8 _index,
        uint256 _from,
        uint256 _to,
        uint256 _tax
    ) external onlyOwner {
        minutesRangeTaxes[_index].from = _from.mul(1 minutes);
        minutesRangeTaxes[_index].to = _to.mul(1 minutes);
        minutesRangeTaxes[_index].tax = _tax;
    }

    function setMaxIndexMinutesRange(uint8 _maxIndex) external onlyOwner {
        maxIndexMinutesRange = _maxIndex;
    }

    function setPercentageOfHolding(
        uint256 _sellPercentageOfHolding,
        uint256 _minutesIntervalPerSell
    ) external onlyOwner {
        sellPercentageOfHolding = _sellPercentageOfHolding;
        minutesIntervalPerSell = _minutesIntervalPerSell.mul(1 minutes);
    }

    function setBots(address[] calldata _bots) public onlyOwner {
        for (uint256 i = 0; i < _bots.length; i++) {
            if (
                _bots[i] != uniswapV2Pair &&
                _bots[i] != address(uniswapV2Router)
            ) {
                isBot[_bots[i]] = true;
            }
        }
    }

    function setWalletAddress(address _devWallet, address _marketingWallet)
        external
        onlyOwner
    {
        devWalletAddress = _devWallet;
        marketingWalletAddress = _marketingWallet;
    }

    function takeFees(
        address _from,
        address _to,
        uint256 _amount
    ) private returns (uint256) {
        uint256 fees;
        uint256 remainingAmount;
        require(
            automatedMarketMakerPairs[_from] || automatedMarketMakerPairs[_to],
            "Diamond: No market makers found"
        );

        if (automatedMarketMakerPairs[_from]) {
            fees = _amount.mul(baseBuyTax).div(100);
            remainingAmount = _amount.sub(fees);

            super._transfer(_from, address(this), fees);

            emit BuyFees(_from, address(this), fees);
        } else {
            uint256 totalSellTax;
            if (isExcludeByInitialSell(_from, _amount)) {
                totalSellTax = baseSellTax;
            } else {
                totalSellTax = getTax(_from);
            }

            fees = _amount.mul(totalSellTax).div(100);
            uint256 rewardTokens = _amount
                .mul(totalSellTax.sub(baseSellTax))
                .div(100);
            pendingTokensForReward = pendingTokensForReward.add(rewardTokens);

            remainingAmount = _amount.sub(fees);

            super._transfer(_from, address(this), fees);
            uint256 tokensToSwap = balanceOf(address(this)).sub(
                pendingTokensForReward
            );

            if (tokensToSwap > minContractTokensToSwap) {
                if (!swapAll) {
                    tokensToSwap = minContractTokensToSwap;
                }

                distributeTokensEth(tokensToSwap);
            }
            if (pendingTokensForReward > minRewardTokensToSwap) {
                swapAndSendDividends(pendingTokensForReward);
            }

            emit SellFees(_from, address(this), fees);
        }

        return remainingAmount;
    }

    function distributeTokensEth(uint256 _tokenAmount) private {
        uint256 tokensForLiquidity = _tokenAmount.mul(autoLP).div(100);

        uint256 halfLiquidity = tokensForLiquidity.div(2);
        uint256 tokensForSwap = _tokenAmount.sub(halfLiquidity);

        uint256 totalEth = swapTokensForEth(tokensForSwap);

        uint256 ethForAddLP = totalEth.mul(autoLP).div(100);
        uint256 devFeesToSend = totalEth.mul(devFee).div(100);
        uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(100);
        uint256 remainingEthForFees = totalEth
            .sub(ethForAddLP)
            .sub(devFeesToSend)
            .sub(marketingFeesToSend);
        devFeesToSend = devFeesToSend.add(remainingEthForFees);

        sendEthToWallets(devFeesToSend, marketingFeesToSend);

        if (halfLiquidity > 0 && ethForAddLP > 0) {
            addLiquidity(halfLiquidity, ethForAddLP);
        }
    }

    function sendEthToWallets(uint256 _devFees, uint256 _marketingFees)
        private
    {
        if (_devFees > 0) {
            payable(devWalletAddress).transfer(_devFees);
        }
        if (_marketingFees > 0) {
            payable(marketingWalletAddress).transfer(_marketingFees);
        }
        emit DistributeFees(_devFees, _marketingFees);
    }

    function swapTokensForEth(uint256 _tokenAmount) private returns (uint256) {
        uint256 initialEthBalance = address(this).balance;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), _tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 receivedEth = address(this).balance.sub(initialEthBalance);

        emit SwapTokensForEth(_tokenAmount, receivedEth);
        return receivedEth;
    }

    function swapEthForTokens(uint256 _ethAmount, address _to)
        private
        returns (uint256)
    {
        uint256 initialTokenBalance = balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: _ethAmount
        }(0, path, _to, block.timestamp);

        uint256 receivedTokens = balanceOf(address(this)).sub(
            initialTokenBalance
        );

        emit SwapEthForTokens(_ethAmount, receivedTokens);
        return receivedTokens;
    }

    function addLiquidity(uint256 _tokenAmount, uint256 _ethAmount) private {
        _approve(address(this), address(uniswapV2Router), _tokenAmount);
        uniswapV2Router.addLiquidityETH{value: _ethAmount}(
            address(this),
            _tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
        emit AddLiquidity(_tokenAmount, _ethAmount);
    }

    function swapAndSendDividends(uint256 _tokenAmount) private {
        uint256 dividends = swapTokensForEth(_tokenAmount);

        pendingTokensForReward = pendingTokensForReward.sub(_tokenAmount);
        uint256 totalEthToSend = dividends.add(pendingEthReward);

        (bool success, ) = address(dividendTracker).call{value: totalEthToSend}(
            ""
        );

        if (success) {
            emit SendDividends(dividends);
        } else {
            pendingEthReward = pendingEthReward.add(dividends);
        }
    }

    function isExcludeByInitialSell(address _ad, uint256 _tokenAmount)
        private
        returns (bool)
    {
        if (
            initialSellTimestamp[_ad] + minutesIntervalPerSell <=
            block.timestamp
        ) {
            initialSellTimestamp[_ad] = block.timestamp;
            if (
                _tokenAmount <=
                balanceOf(_ad).mul(sellPercentageOfHolding).div(100)
            ) {
                return true;
            }
        }

        return false;
    }

    function availableContractTokenBalance() public view returns (uint256) {
        return balanceOf(address(this)).sub(pendingTokensForReward);
    }

    function getHistory(
        address _account,
        uint256 _limit,
        uint256 _pageNumber
    ) external view returns (ClaimedEth[] memory) {
        require(_limit > 0 && _pageNumber > 0, "Diamond: Invalid arguments");
        uint256 userClaimedCount = userClaimedIds[_account].length;
        uint256 end = _pageNumber * _limit;
        uint256 start = end - _limit;
        require(start < userClaimedCount, "Diamond: Out of range");
        uint256 limit = _limit;
        if (end > userClaimedCount) {
            end = userClaimedCount;
            limit = userClaimedCount % _limit;
        }

        ClaimedEth[] memory myClaimedEth = new ClaimedEth[](limit);
        uint256 currentIndex = 0;
        for (uint256 i = start; i < end; i++) {
            uint256 hId = userClaimedIds[_account][i];
            myClaimedEth[currentIndex] = claimedEthMap[hId];
            currentIndex += 1;
        }
        return myClaimedEth;
    }

    function getHistoryCount(address _account) external view returns (uint256) {
        return userClaimedIds[_account].length;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"received","type":"address"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","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"},{"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"uint256","name":"_withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"_withdrawnDividends","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"includeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludeFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"toAccount","type":"address"}],"name":"processAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b5060408051808201825260188082527f4469616d6f6e645f4469766964656e645f547261636b65720000000000000000602080840182815285518087019096529285528401528151919291839183916200006e91600391620000df565b50805162000084906004906020840190620000df565b5050600980546001600160a01b03191633908117909155604051909350600092507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091508290a369021e19e0c9bab2400000608052620001c1565b828054620000ed9062000185565b90600052602060002090601f0160209004810192826200011157600085556200015c565b82601f106200012c57805160ff19168380011785556200015c565b828001600101855582156200015c579182015b828111156200015c5782518255916020019190600101906200013f565b506200016a9291506200016e565b5090565b5b808211156200016a57600081556001016200016f565b600181811c908216806200019a57607f821691505b602082108103620001bb57634e487b7160e01b600052602260045260246000fd5b50919050565b6080516117ce620001eb6000396000818161051c0152818161077d0152610cb101526117ce6000f3fe6080604052600436106101c65760003560e01c80636a474002116100f7578063a457c2d711610095578063be10b61411610064578063be10b6141461050a578063dd62ed3e1461053e578063e30443bc14610584578063fbcbc0f1146105a457600080fd5b8063a457c2d714610474578063a8b9d24014610494578063a9059cbb146104b4578063aafd847a146104d457600080fd5b806385a6b3ae116100d157806385a6b3ae146104015780638da5cb5b1461041757806391b89fba1461043f57806395d89b411461045f57600080fd5b80636a474002146103a157806370a08231146103b6578063715018a6146103ec57600080fd5b806327ce014711610164578063369513561161013e578063369513561461031157806339509351146103315780634e7b827f1461035157806352b5f81d1461038157600080fd5b806327ce0147146102b5578063313ce567146102d557806331e79db0146102f157600080fd5b806309bbedde116101a057806309bbedde1461023d57806318160ddd1461026057806318c18adb1461027557806323b872dd1461029557600080fd5b806303c83302146101da57806306fdde03146101e2578063095ea7b31461020d57600080fd5b366101d5576101d36105d9565b005b600080fd5b6101d36105d9565b3480156101ee57600080fd5b506101f761066c565b60405161020491906114f3565b60405180910390f35b34801561021957600080fd5b5061022d610228366004611560565b6106fe565b6040519015158152602001610204565b34801561024957600080fd5b50610252610718565b604051908152602001610204565b34801561026c57600080fd5b50600254610252565b34801561028157600080fd5b506101d3610290366004611560565b610728565b3480156102a157600080fd5b5061022d6102b036600461158c565b610839565b3480156102c157600080fd5b506102526102d03660046115cd565b61085d565b3480156102e157600080fd5b5060405160128152602001610204565b3480156102fd57600080fd5b506101d361030c3660046115cd565b6108b9565b34801561031d57600080fd5b5061022d61032c3660046115cd565b610997565b34801561033d57600080fd5b5061022d61034c366004611560565b6109e3565b34801561035d57600080fd5b5061022d61036c3660046115cd565b600d6020526000908152604090205460ff1681565b34801561038d57600080fd5b5061025261039c3660046115ea565b610a22565b3480156103ad57600080fd5b506101d3610a63565b3480156103c257600080fd5b506102526103d13660046115cd565b6001600160a01b031660009081526020819052604090205490565b3480156103f857600080fd5b506101d3610b0b565b34801561040d57600080fd5b5061025260085481565b34801561042357600080fd5b506009546040516001600160a01b039091168152602001610204565b34801561044b57600080fd5b5061025261045a3660046115cd565b610b7f565b34801561046b57600080fd5b506101f7610b8a565b34801561048057600080fd5b5061022d61048f366004611560565b610b99565b3480156104a057600080fd5b506102526104af3660046115cd565b610c2b565b3480156104c057600080fd5b5061022d6104cf366004611560565b610c57565b3480156104e057600080fd5b506102526104ef3660046115cd565b6001600160a01b031660009081526007602052604090205490565b34801561051657600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b34801561054a57600080fd5b506102526105593660046115ea565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561059057600080fd5b506101d361059f366004611560565b610c65565b3480156105b057600080fd5b506105c46105bf3660046115cd565b610d93565b60408051928352602083019190915201610204565b60006105e460025490565b116105ee57600080fd5b341561066a5761062161060060025490565b61060e34600160801b610dc0565b6106189190611639565b60055490610dd3565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26008546106669034610dd3565b6008555b565b60606003805461067b9061165b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a79061165b565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b60003361070c818585610ddf565b60019150505b92915050565b6000610723600b5490565b905090565b6009546001600160a01b0316331461075b5760405162461bcd60e51b815260040161075290611695565b60405180910390fd5b6001600160a01b0382166000908152600d60205260409020805460ff191690557f00000000000000000000000000000000000000000000000000000000000000008110610801576107ac8282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610801576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610801600b80546001019055565b6040516001600160a01b038316907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a25050565b600033610847858285610ea2565b610852858585610f2e565b506001949350505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b926108af926108aa926108a49161089f9190610dc0565b610f8d565b90610ffb565b611007565b6107129190611639565b6009546001600160a01b031633146108e35760405162461bcd60e51b815260040161075290611695565b6001600160a01b0381166000908152600d60205260408120805460ff19166001179055610911908290610e43565b6001600160a01b0381166000908152600c602052604090205460ff161515600103610960576001600160a01b0381166000908152600c60205260409020805460ff19169055610960600b611059565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546000906001600160a01b031633146109c45760405162461bcd60e51b815260040161075290611695565b506001600160a01b03166000908152600d602052604090205460ff1690565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061070c9082908690610a1d9087906116ca565b610ddf565b6009546000906001600160a01b03163314610a4f5760405162461bcd60e51b815260040161075290611695565b6000610a5b84846110b0565b949350505050565b60405162461bcd60e51b815260206004820152606b60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a2077697468647260448201527f61774469766964656e642064697361626c65642e20557365207468652027636c60648201527f61696d272066756e6374696f6e206f6e20746865206d61696e204469616d6f6e60848201526a321031b7b73a3930b1ba1760a91b60a482015260c401610752565b6009546001600160a01b03163314610b355760405162461bcd60e51b815260040161075290611695565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b600061071282610c2b565b60606004805461067b9061165b565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610752565b6108528286868403610ddf565b6001600160a01b03811660009081526007602052604081205461071290610c518461085d565b90611206565b60003361070c818585610f2e565b6009546001600160a01b03163314610c8f5760405162461bcd60e51b815260040161075290611695565b6001600160a01b0382166000908152600d602052604090205460ff16610d35577f00000000000000000000000000000000000000000000000000000000000000008110610d3957610ce08282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610d35576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610d35600b80546001019055565b5050565b610d44826000610e43565b6001600160a01b0382166000908152600c602052604090205460ff161515600103610d35576001600160a01b0382166000908152600c60205260409020805460ff19169055610d35600b611059565b600080610d9f83610c2b565b6001600160a01b039093166000908152600760205260409020549293915050565b6000610dcc82846116e2565b9392505050565b6000610dcc82846116ca565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2061707060448201526d1c9bdd985b1cc8185b1b1bddd95960921b6064820152608401610752565b505050565b6001600160a01b03821660009081526020819052604090205480821115610e82576000610e708383611206565b9050610e7c8482611212565b50505050565b80821015610e3e576000610e968284611206565b9050610e7c8482611276565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610e7c5781811015610f215760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610752565b610e7c8484848403610ddf565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2074726160448201526d1b9cd9995c9cc8185b1b1bddd95960921b6064820152608401610752565b60006001600160ff1b03821115610ff75760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610752565b5090565b6000610dcc8284611701565b600080821215610ff75760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610752565b8054806110a85760405162461bcd60e51b815260206004820152601b60248201527f436f756e7465723a2064656372656d656e74206f766572666c6f7700000000006044820152606401610752565b600019019055565b6000806110bc84610c2b565b905080156111fc576001600160a01b0384166000908152600760205260409020546110e79082610dd3565b6001600160a01b038516600081815260076020526040908190209290925590517feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69061114890849087909182526001600160a01b0316602082015260400190565b60405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461119d576040519150601f19603f3d011682016040523d82523d6000602084013e6111a2565b606091505b50509050806111f4576001600160a01b0385166000908152600760205260409020546111ce9083611206565b6001600160a01b0386166000908152600760205260408120919091559250610712915050565b509050610712565b5060009392505050565b6000610dcc8284611742565b61121c82826112ba565b61125661123761089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611399565b6001600160a01b0390921660009081526006602052604090209190915550565b61128082826113a5565b61125661129b61089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490610ffb565b6001600160a01b0382166113105760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610752565b806002600082825461132291906116ca565b90915550506001600160a01b0382166000908152602081905260408120805483929061134f9084906116ca565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000610dcc8284611759565b6001600160a01b0382166114055760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610752565b6001600160a01b038216600090815260208190526040902054818110156114795760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610752565b6001600160a01b03831660009081526020819052604081208383039055600280548492906114a8908490611742565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208083528351808285015260005b8181101561152057858101830151858201604001528201611504565b81811115611532576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461155d57600080fd5b50565b6000806040838503121561157357600080fd5b823561157e81611548565b946020939093013593505050565b6000806000606084860312156115a157600080fd5b83356115ac81611548565b925060208401356115bc81611548565b929592945050506040919091013590565b6000602082840312156115df57600080fd5b8135610dcc81611548565b600080604083850312156115fd57600080fd5b823561160881611548565b9150602083013561161881611548565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008261165657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061166f57607f821691505b60208210810361168f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156116dd576116dd611623565b500190565b60008160001904831182151516156116fc576116fc611623565b500290565b600080821280156001600160ff1b038490038513161561172357611723611623565b600160ff1b839003841281161561173c5761173c611623565b50500190565b60008282101561175457611754611623565b500390565b60008083128015600160ff1b85018412161561177757611777611623565b6001600160ff1b038401831381161561179257611792611623565b5050039056fea2646970667358221220a1a3e832f086de6cb61f3b31813c5ae482d8dd06bf6b057ed57fae724de6effc64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c80636a474002116100f7578063a457c2d711610095578063be10b61411610064578063be10b6141461050a578063dd62ed3e1461053e578063e30443bc14610584578063fbcbc0f1146105a457600080fd5b8063a457c2d714610474578063a8b9d24014610494578063a9059cbb146104b4578063aafd847a146104d457600080fd5b806385a6b3ae116100d157806385a6b3ae146104015780638da5cb5b1461041757806391b89fba1461043f57806395d89b411461045f57600080fd5b80636a474002146103a157806370a08231146103b6578063715018a6146103ec57600080fd5b806327ce014711610164578063369513561161013e578063369513561461031157806339509351146103315780634e7b827f1461035157806352b5f81d1461038157600080fd5b806327ce0147146102b5578063313ce567146102d557806331e79db0146102f157600080fd5b806309bbedde116101a057806309bbedde1461023d57806318160ddd1461026057806318c18adb1461027557806323b872dd1461029557600080fd5b806303c83302146101da57806306fdde03146101e2578063095ea7b31461020d57600080fd5b366101d5576101d36105d9565b005b600080fd5b6101d36105d9565b3480156101ee57600080fd5b506101f761066c565b60405161020491906114f3565b60405180910390f35b34801561021957600080fd5b5061022d610228366004611560565b6106fe565b6040519015158152602001610204565b34801561024957600080fd5b50610252610718565b604051908152602001610204565b34801561026c57600080fd5b50600254610252565b34801561028157600080fd5b506101d3610290366004611560565b610728565b3480156102a157600080fd5b5061022d6102b036600461158c565b610839565b3480156102c157600080fd5b506102526102d03660046115cd565b61085d565b3480156102e157600080fd5b5060405160128152602001610204565b3480156102fd57600080fd5b506101d361030c3660046115cd565b6108b9565b34801561031d57600080fd5b5061022d61032c3660046115cd565b610997565b34801561033d57600080fd5b5061022d61034c366004611560565b6109e3565b34801561035d57600080fd5b5061022d61036c3660046115cd565b600d6020526000908152604090205460ff1681565b34801561038d57600080fd5b5061025261039c3660046115ea565b610a22565b3480156103ad57600080fd5b506101d3610a63565b3480156103c257600080fd5b506102526103d13660046115cd565b6001600160a01b031660009081526020819052604090205490565b3480156103f857600080fd5b506101d3610b0b565b34801561040d57600080fd5b5061025260085481565b34801561042357600080fd5b506009546040516001600160a01b039091168152602001610204565b34801561044b57600080fd5b5061025261045a3660046115cd565b610b7f565b34801561046b57600080fd5b506101f7610b8a565b34801561048057600080fd5b5061022d61048f366004611560565b610b99565b3480156104a057600080fd5b506102526104af3660046115cd565b610c2b565b3480156104c057600080fd5b5061022d6104cf366004611560565b610c57565b3480156104e057600080fd5b506102526104ef3660046115cd565b6001600160a01b031660009081526007602052604090205490565b34801561051657600080fd5b506102527f00000000000000000000000000000000000000000000021e19e0c9bab240000081565b34801561054a57600080fd5b506102526105593660046115ea565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561059057600080fd5b506101d361059f366004611560565b610c65565b3480156105b057600080fd5b506105c46105bf3660046115cd565b610d93565b60408051928352602083019190915201610204565b60006105e460025490565b116105ee57600080fd5b341561066a5761062161060060025490565b61060e34600160801b610dc0565b6106189190611639565b60055490610dd3565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26008546106669034610dd3565b6008555b565b60606003805461067b9061165b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a79061165b565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b60003361070c818585610ddf565b60019150505b92915050565b6000610723600b5490565b905090565b6009546001600160a01b0316331461075b5760405162461bcd60e51b815260040161075290611695565b60405180910390fd5b6001600160a01b0382166000908152600d60205260409020805460ff191690557f00000000000000000000000000000000000000000000021e19e0c9bab24000008110610801576107ac8282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610801576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610801600b80546001019055565b6040516001600160a01b038316907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a25050565b600033610847858285610ea2565b610852858585610f2e565b506001949350505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b926108af926108aa926108a49161089f9190610dc0565b610f8d565b90610ffb565b611007565b6107129190611639565b6009546001600160a01b031633146108e35760405162461bcd60e51b815260040161075290611695565b6001600160a01b0381166000908152600d60205260408120805460ff19166001179055610911908290610e43565b6001600160a01b0381166000908152600c602052604090205460ff161515600103610960576001600160a01b0381166000908152600c60205260409020805460ff19169055610960600b611059565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546000906001600160a01b031633146109c45760405162461bcd60e51b815260040161075290611695565b506001600160a01b03166000908152600d602052604090205460ff1690565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061070c9082908690610a1d9087906116ca565b610ddf565b6009546000906001600160a01b03163314610a4f5760405162461bcd60e51b815260040161075290611695565b6000610a5b84846110b0565b949350505050565b60405162461bcd60e51b815260206004820152606b60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a2077697468647260448201527f61774469766964656e642064697361626c65642e20557365207468652027636c60648201527f61696d272066756e6374696f6e206f6e20746865206d61696e204469616d6f6e60848201526a321031b7b73a3930b1ba1760a91b60a482015260c401610752565b6009546001600160a01b03163314610b355760405162461bcd60e51b815260040161075290611695565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b600061071282610c2b565b60606004805461067b9061165b565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610752565b6108528286868403610ddf565b6001600160a01b03811660009081526007602052604081205461071290610c518461085d565b90611206565b60003361070c818585610f2e565b6009546001600160a01b03163314610c8f5760405162461bcd60e51b815260040161075290611695565b6001600160a01b0382166000908152600d602052604090205460ff16610d35577f00000000000000000000000000000000000000000000021e19e0c9bab24000008110610d3957610ce08282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610d35576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610d35600b80546001019055565b5050565b610d44826000610e43565b6001600160a01b0382166000908152600c602052604090205460ff161515600103610d35576001600160a01b0382166000908152600c60205260409020805460ff19169055610d35600b611059565b600080610d9f83610c2b565b6001600160a01b039093166000908152600760205260409020549293915050565b6000610dcc82846116e2565b9392505050565b6000610dcc82846116ca565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2061707060448201526d1c9bdd985b1cc8185b1b1bddd95960921b6064820152608401610752565b505050565b6001600160a01b03821660009081526020819052604090205480821115610e82576000610e708383611206565b9050610e7c8482611212565b50505050565b80821015610e3e576000610e968284611206565b9050610e7c8482611276565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610e7c5781811015610f215760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610752565b610e7c8484848403610ddf565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2074726160448201526d1b9cd9995c9cc8185b1b1bddd95960921b6064820152608401610752565b60006001600160ff1b03821115610ff75760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610752565b5090565b6000610dcc8284611701565b600080821215610ff75760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610752565b8054806110a85760405162461bcd60e51b815260206004820152601b60248201527f436f756e7465723a2064656372656d656e74206f766572666c6f7700000000006044820152606401610752565b600019019055565b6000806110bc84610c2b565b905080156111fc576001600160a01b0384166000908152600760205260409020546110e79082610dd3565b6001600160a01b038516600081815260076020526040908190209290925590517feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69061114890849087909182526001600160a01b0316602082015260400190565b60405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461119d576040519150601f19603f3d011682016040523d82523d6000602084013e6111a2565b606091505b50509050806111f4576001600160a01b0385166000908152600760205260409020546111ce9083611206565b6001600160a01b0386166000908152600760205260408120919091559250610712915050565b509050610712565b5060009392505050565b6000610dcc8284611742565b61121c82826112ba565b61125661123761089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611399565b6001600160a01b0390921660009081526006602052604090209190915550565b61128082826113a5565b61125661129b61089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490610ffb565b6001600160a01b0382166113105760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610752565b806002600082825461132291906116ca565b90915550506001600160a01b0382166000908152602081905260408120805483929061134f9084906116ca565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000610dcc8284611759565b6001600160a01b0382166114055760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610752565b6001600160a01b038216600090815260208190526040902054818110156114795760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610752565b6001600160a01b03831660009081526020819052604081208383039055600280548492906114a8908490611742565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208083528351808285015260005b8181101561152057858101830151858201604001528201611504565b81811115611532576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461155d57600080fd5b50565b6000806040838503121561157357600080fd5b823561157e81611548565b946020939093013593505050565b6000806000606084860312156115a157600080fd5b83356115ac81611548565b925060208401356115bc81611548565b929592945050506040919091013590565b6000602082840312156115df57600080fd5b8135610dcc81611548565b600080604083850312156115fd57600080fd5b823561160881611548565b9150602083013561161881611548565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008261165657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061166f57607f821691505b60208210810361168f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156116dd576116dd611623565b500190565b60008160001904831182151516156116fc576116fc611623565b500290565b600080821280156001600160ff1b038490038513161561172357611723611623565b600160ff1b839003841281161561173c5761173c611623565b50500190565b60008282101561175457611754611623565b500390565b60008083128015600160ff1b85018412161561177757611777611623565b6001600160ff1b038401831381161561179257611792611623565b5050039056fea2646970667358221220a1a3e832f086de6cb61f3b31813c5ae482d8dd06bf6b057ed57fae724de6effc64736f6c634300080d0033

Deployed Bytecode Sourcemap

21180:3579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17460:21;:19;:21::i;:::-;21180:3579;;;;;17497:471;;;:::i;1778:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2851:242;;;;;;;;;;-1:-1:-1;2851:242:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;2851:242:0;1072:187:1;23625:120:0;;;;;;;;;;;;;:::i;:::-;;;1410:25:1;;;1398:2;1383:18;23625:120:0;1264:177:1;2099:108:0;;;;;;;;;;-1:-1:-1;2187:12:0;;2099:108;;22929:495;;;;;;;;;;-1:-1:-1;22929:495:0;;;;;:::i;:::-;;:::i;3101:295::-;;;;;;;;;;-1:-1:-1;3101:295:0;;;;;:::i;:::-;;:::i;19479:364::-;;;;;;;;;;-1:-1:-1;19479:364:0;;;;;:::i;:::-;;:::i;21837:93::-;;;;;;;;;;-1:-1:-1;21837:93:0;;21920:2;2301:36:1;;2289:2;2274:18;21837:93:0;2159:184:1;22563:358:0;;;;;;;;;;-1:-1:-1;22563:358:0;;;;;:::i;:::-;;:::i;23432:185::-;;;;;;;;;;-1:-1:-1;23432:185:0;;;;;:::i;:::-;;:::i;3404:272::-;;;;;;;;;;-1:-1:-1;3404:272:0;;;;;:::i;:::-;;:::i;21434:53::-;;;;;;;;;;-1:-1:-1;21434:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24471:285;;;;;;;;;;-1:-1:-1;24471:285:0;;;;;:::i;:::-;;:::i;22325:230::-;;;;;;;;;;;;;:::i;2215:177::-;;;;;;;;;;-1:-1:-1;2215:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;2366:18:0;2334:7;2366:18;;;;;;;;;;;;2215:177;10862:148;;;;;;;;;;;;;:::i;17271:40::-;;;;;;;;;;;;;;;;10650:79;;;;;;;;;;-1:-1:-1;10715:6:0;;10650:79;;-1:-1:-1;;;;;10715:6:0;;;2887:51:1;;2875:2;2860:18;10650:79:0;2741:203:1;18931:131:0;;;;;;;;;;-1:-1:-1;18931:131:0;;;;;:::i;:::-;;:::i;1886:104::-;;;;;;;;;;;;;:::i;3684:507::-;;;;;;;;;;-1:-1:-1;3684:507:0;;;;;:::i;:::-;;:::i;19070:216::-;;;;;;;;;;-1:-1:-1;19070:216:0;;;;;:::i;:::-;;:::i;2400:234::-;;;;;;;;;;-1:-1:-1;2400:234:0;;;;;:::i;:::-;;:::i;19294:177::-;;;;;;;;;;-1:-1:-1;19294:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;19437:26:0;19405:7;19437:26;;;:18;:26;;;;;;;19294:177;21496:56;;;;;;;;;;;;;;;2642:201;;;;;;;;;;-1:-1:-1;2642:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;2808:18:0;;;2776:7;2808:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2642:201;23753:710;;;;;;;;;;-1:-1:-1;23753:710:0;;;;;:::i;:::-;;:::i;20884:289::-;;;;;;;;;;-1:-1:-1;20884:289:0;;;;;:::i;:::-;;:::i;:::-;;;;3451:25:1;;;3507:2;3492:18;;3485:34;;;;3424:18;20884:289:0;3277:248:1;17497:471:0;17587:1;17571:13;2187:12;;;2099:108;17571:13;:17;17563:26;;;;;;17606:9;:13;17602:359;;17664:105;17741:13;2187:12;;;2099:108;17741:13;17712:26;17713:9;-1:-1:-1;;;17712:15:0;:26::i;:::-;:42;;;;:::i;:::-;17664:25;;;:29;:105::i;:::-;17636:25;:133;17789:43;;17822:9;1410:25:1;;17810:10:0;;17789:43;;1398:2:1;1383:18;17789:43:0;;;;;;;17877:25;;:72;;17925:9;17877:29;:72::i;:::-;17849:25;:100;17602:359;17497:471::o;1778:100::-;1832:13;1865:5;1858:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1778:100;:::o;2851:242::-;2970:4;1238:10;3031:32;1238:10;3047:7;3056:6;3031:8;:32::i;:::-;3081:4;3074:11;;;2851:242;;;;;:::o;23625:120::-;23683:7;23710:27;:17;9826:14;;9734:114;23710:27;23703:34;;23625:120;:::o;22929:495::-;10777:6;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;23046:30:0;::::1;23079:5;23046:30:::0;;;:21:::1;:30;::::0;;;;:38;;-1:-1:-1;;23046:38:0::1;::::0;;23112:31:::1;23101:42:::0;::::1;23097:273;;23160:29;23172:7;23181;23160:11;:29::i;:::-;-1:-1:-1::0;;;;;23210:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;:33;;::::0;;23206:153:::1;;-1:-1:-1::0;;;;;23264:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;23264:31:0::1;23291:4;23264:31;::::0;;23314:29:::1;:17;9945:19:::0;;9963:1;9945:19;;;9856:127;23314:29:::1;23387;::::0;-1:-1:-1;;;;;23387:29:0;::::1;::::0;::::1;::::0;;;::::1;22929:495:::0;;:::o;3101:295::-;3232:4;1238:10;3290:38;3306:4;1238:10;3321:6;3290:15;:38::i;:::-;3339:27;3349:4;3355:2;3359:6;3339:9;:27::i;:::-;-1:-1:-1;3384:4:0;;3101:295;-1:-1:-1;;;;3101:295:0:o;19479:364::-;-1:-1:-1;;;;;19756:36:0;;19593:7;19756:36;;;:28;:36;;;;;;;;;2366:18;;;;;;;19638:25;;-1:-1:-1;;;17070:6:0;19638:185;;:155;;:95;;:66;;:25;:47;:66::i;:::-;:93;:95::i;:::-;:117;;:155::i;:::-;:183;:185::i;:::-;:197;;;;:::i;22563:358::-;10777:6;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22640:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;22640:37:0::1;22673:4;22640:37;::::0;;22690:23:::1;::::0;22662:7;;22690:11:::1;:23::i;:::-;-1:-1:-1::0;;;;;22730:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;:32;;:24:::0;:32;22726:141:::1;;-1:-1:-1::0;;;;;22779:24:0;::::1;22806:5;22779:24:::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;22779:32:0::1;::::0;;22826:29:::1;:17;:27;:29::i;:::-;22884;::::0;-1:-1:-1;;;;;22884:29:0;::::1;::::0;::::1;::::0;;;::::1;22563:358:::0;:::o;23432:185::-;10777:6;;23550:4;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23579:30:0::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;::::0;23432:185::o;3404:272::-;1238:10;3519:4;3605:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3605:27:0;;;;;;;;;;3519:4;;1238:10;3580:66;;1238:10;;3605:27;;:40;;3635:10;;3605:40;:::i;:::-;3580:8;:66::i;24471:285::-;10777:6;;24584:7;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;24609:14:::1;24626:98;24672:7;24703:9;24626:23;:98::i;:::-;24609:115:::0;24471:285;-1:-1:-1;;;;24471:285:0:o;22325:230::-;22385:162;;-1:-1:-1;;;22385:162:0;;4965:2:1;22385:162:0;;;4947:21:1;5004:3;4984:18;;;4977:31;5044:34;5024:18;;;5017:62;5115:34;5095:18;;;5088:62;5187:34;5166:19;;;5159:63;-1:-1:-1;;;5238:19:1;;;5231:42;5290:19;;22385:162:0;4763:552:1;10862:148:0;10777:6;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;10953:6:::1;::::0;10932:40:::1;::::0;10969:1:::1;::::0;-1:-1:-1;;;;;10953:6:0::1;::::0;10932:40:::1;::::0;10969:1;;10932:40:::1;10983:6;:19:::0;;-1:-1:-1;;;;;;10983:19:0::1;::::0;;10862:148::o;18931:131::-;18997:7;19024:30;19047:6;19024:22;:30::i;1886:104::-;1942:13;1975:7;1968:14;;;;;:::i;3684:507::-;1238:10;3804:4;3892:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3892:27:0;;;;;;;;;;3804:4;;1238:10;3952:35;;;;3930:122;;;;-1:-1:-1;;;3930:122:0;;5522:2:1;3930:122:0;;;5504:21:1;5561:2;5541:18;;;5534:30;5600:34;5580:18;;;5573:62;-1:-1:-1;;;5651:18:1;;;5644:35;5696:19;;3930:122:0;5320:401:1;3930:122:0;4088:60;4097:5;4104:7;4132:15;4113:16;:34;4088:8;:60::i;19070:216::-;-1:-1:-1;;;;;19251:26:0;;19184:7;19251:26;;;:18;:26;;;;;;19216:62;;:30;19270:6;19216:22;:30::i;:::-;:34;;:62::i;2400:234::-;2515:4;1238:10;2576:28;1238:10;2593:2;2597:6;2576:9;:28::i;23753:710::-;10777:6;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23875:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;23922:7;23871:69;23970:31;23956:10;:45;23952:504;;24018:32;24030:7;24039:10;24018:11;:32::i;:::-;-1:-1:-1::0;;;;;24071:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;:33;;::::0;;24067:153:::1;;-1:-1:-1::0;;;;;24125:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;24125:31:0::1;24152:4;24125:31;::::0;;24175:29:::1;:17;9945:19:::0;;9963:1;9945:19;;;9856:127;24175:29:::1;23753:710:::0;;:::o;23952:504::-:1;24252:23;24264:7;24273:1;24252:11;:23::i;:::-;-1:-1:-1::0;;;;;24296:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;:32;;:24:::0;:32;24292:153:::1;;-1:-1:-1::0;;;;;24349:24:0;::::1;24376:5;24349:24:::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;24349:32:0::1;::::0;;24400:29:::1;:17;:27;:29::i;20884:289::-:0;20970:30;21002:27;21072:32;21095:8;21072:22;:32::i;:::-;-1:-1:-1;;;;;21137:28:0;;;;;;;:18;:28;;;;;;21047:57;;20884:289;-1:-1:-1;;20884:289:0:o;8595:98::-;8653:7;8680:5;8684:1;8680;:5;:::i;:::-;8673:12;8595:98;-1:-1:-1;;;8595:98:0:o;8383:::-;8441:7;8468:5;8472:1;8468;:5;:::i;21938:185::-;22051:64;;-1:-1:-1;;;22051:64:0;;6101:2:1;22051:64:0;;;6083:21:1;6140:2;6120:18;;;6113:30;6179:34;6159:18;;;6152:62;-1:-1:-1;;;6230:18:1;;;6223:44;6284:19;;22051:64:0;5899:410:1;22051:64:0;21938:185;;;:::o;20425:451::-;-1:-1:-1;;;;;2366:18:0;;20503:22;2366:18;;;;;;;;;;;20563:27;;;20559:310;;;20607:18;20628:30;:10;20643:14;20628;:30::i;:::-;20607:51;;20673:26;20679:7;20688:10;20673:5;:26::i;:::-;20592:119;21938:185;;;:::o;20559:310::-;20734:14;20721:10;:27;20717:152;;;20765:18;20786:30;:14;20805:10;20786:18;:30::i;:::-;20765:51;;20831:26;20837:7;20846:10;20831:5;:26::i;6309:502::-;-1:-1:-1;;;;;2808:18:0;;;6444:24;2808:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;6511:37:0;;6507:297;;6611:6;6591:16;:26;;6565:117;;;;-1:-1:-1;;;6565:117:0;;6516:2:1;6565:117:0;;;6498:21:1;6555:2;6535:18;;;6528:30;6594:31;6574:18;;;6567:59;6643:18;;6565:117:0;6314:353:1;6565:117:0;6726:51;6735:5;6742:7;6770:6;6751:16;:25;6726:8;:51::i;22131:186::-;22245:64;;-1:-1:-1;;;22245:64:0;;6874:2:1;22245:64:0;;;6856:21:1;6913:2;6893:18;;;6886:30;6952:34;6932:18;;;6925:62;-1:-1:-1;;;7003:18:1;;;6996:44;7057:19;;22245:64:0;6672:410:1;15699:238:0;15755:6;-1:-1:-1;;;;;15796:5:0;:34;;15774:124;;;;-1:-1:-1;;;15774:124:0;;7289:2:1;15774:124:0;;;7271:21:1;7328:2;7308:18;;;7301:30;7367:34;7347:18;;;7340:62;-1:-1:-1;;;7418:18:1;;;7411:38;7466:19;;15774:124:0;7087:404:1;15774:124:0;-1:-1:-1;15923:5:0;15699:238::o;12454:95::-;12510:6;12536:5;12540:1;12536;:5;:::i;14230:171::-;14286:7;14323:1;14314:5;:10;;14306:55;;;;-1:-1:-1;;;14306:55:0;;7968:2:1;14306:55:0;;;7950:21:1;;;7987:18;;;7980:30;8046:34;8026:18;;;8019:62;8098:18;;14306:55:0;7766:356:1;9991:235:0;10071:14;;10104:9;10096:49;;;;-1:-1:-1;;;10096:49:0;;8329:2:1;10096:49:0;;;8311:21:1;8368:2;8348:18;;;8341:30;8407:29;8387:18;;;8380:57;8454:18;;10096:49:0;8127:351:1;10096:49:0;-1:-1:-1;;10198:9:0;10181:26;;9991:235::o;18120:803::-;18231:7;18256:29;18288:28;18311:4;18288:22;:28::i;:::-;18256:60;-1:-1:-1;18331:25:0;;18327:568;;-1:-1:-1;;;;;18400:24:0;;;;;;:18;:24;;;;;;:83;;18447:21;18400:28;:83::i;:::-;-1:-1:-1;;;;;18373:24:0;;;;;;:18;:24;;;;;;;:110;;;;18503:50;;;;;;18527:21;;18550:2;;8665:25:1;;;-1:-1:-1;;;;;8726:32:1;8721:2;8706:18;;8699:60;8653:2;8638:18;;8483:282;18503:50:0;;;;;;;;18569:12;18587:2;-1:-1:-1;;;;;18587:7:0;18602:21;18587:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18568:60;;;18650:7;18645:194;;-1:-1:-1;;;;;18705:24:0;;;;;;:18;:24;;;;;;:91;;18756:21;18705:28;:91::i;:::-;-1:-1:-1;;;;;18678:24:0;;;;;;:18;:24;;;;;:118;;;;:24;-1:-1:-1;18815:8:0;;-1:-1:-1;;18815:8:0;18645:194;-1:-1:-1;18862:21:0;-1:-1:-1;18855:28:0;;18327:568;-1:-1:-1;18914:1:0;;18120:803;-1:-1:-1;;;18120:803:0:o;8489:98::-;8547:7;8574:5;8578:1;8574;:5;:::i;19851:280::-;19927:27;19939:7;19948:5;19927:11;:27::i;:::-;20007:116;20073:49;20074:36;20104:5;20074:25;;:29;;:36;;;;:::i;20073:49::-;-1:-1:-1;;;;;20007:61:0;;;;;;:28;:61;;;;;;;:65;:116::i;:::-;-1:-1:-1;;;;;19967:37:0;;;;;;;:28;:37;;;;;:156;;;;-1:-1:-1;19851:280:0:o;20139:278::-;20215:27;20227:7;20236:5;20215:11;:27::i;:::-;20293:116;20359:49;20360:36;20390:5;20360:25;;:29;;:36;;;;:::i;20359:49::-;-1:-1:-1;;;;;20293:61:0;;;;;;:28;:61;;;;;;;:65;:116::i;4915:399::-;-1:-1:-1;;;;;4999:21:0;;4991:65;;;;-1:-1:-1;;;4991:65:0;;9312:2:1;4991:65:0;;;9294:21:1;9351:2;9331:18;;;9324:30;9390:33;9370:18;;;9363:61;9441:18;;4991:65:0;9110:355:1;4991:65:0;5147:6;5131:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;5164:18:0;;:9;:18;;;;;;;;;;:28;;5186:6;;5164:9;:28;;5186:6;;5164:28;:::i;:::-;;;;-1:-1:-1;;5208:37:0;;1410:25:1;;;-1:-1:-1;;;;;5208:37:0;;;5225:1;;5208:37;;1398:2:1;1383:18;5208:37:0;;;;;;;23753:710;;:::o;12351:95::-;12407:6;12433:5;12437:1;12433;:5;:::i;5322:591::-;-1:-1:-1;;;;;5406:21:0;;5398:67;;;;-1:-1:-1;;;5398:67:0;;9944:2:1;5398:67:0;;;9926:21:1;9983:2;9963:18;;;9956:30;10022:34;10002:18;;;9995:62;-1:-1:-1;;;10073:18:1;;;10066:31;10114:19;;5398:67:0;9742:397:1;5398:67:0;-1:-1:-1;;;;;5565:18:0;;5540:22;5565:18;;;;;;;;;;;5602:24;;;;5594:71;;;;-1:-1:-1;;;5594:71:0;;10346:2:1;5594:71:0;;;10328:21:1;10385:2;10365:18;;;10358:30;10424:34;10404:18;;;10397:62;-1:-1:-1;;;10475:18:1;;;10468:32;10517:19;;5594:71:0;10144:398:1;5594:71:0;-1:-1:-1;;;;;5701:18:0;;:9;:18;;;;;;;;;;5722:23;;;5701:44;;5767:12;:22;;5739:6;;5701:9;5767:22;;5739:6;;5767:22;:::i;:::-;;;;-1:-1:-1;;5807:37:0;;1410:25:1;;;5833:1:0;;-1:-1:-1;;;;;5807:37:0;;;;;1398:2:1;1383:18;5807:37:0;;;;;;;21938:185;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1446:456::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;1647:9;1634:23;1666:31;1691:5;1666:31;:::i;:::-;1716:5;-1:-1:-1;1773:2:1;1758:18;;1745:32;1786:33;1745:32;1786:33;:::i;:::-;1446:456;;1838:7;;-1:-1:-1;;;1892:2:1;1877:18;;;;1864:32;;1446:456::o;1907:247::-;1966:6;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2074:9;2061:23;2093:31;2118:5;2093:31;:::i;2348:388::-;2416:6;2424;2477:2;2465:9;2456:7;2452:23;2448:32;2445:52;;;2493:1;2490;2483:12;2445:52;2532:9;2519:23;2551:31;2576:5;2551:31;:::i;:::-;2601:5;-1:-1:-1;2658:2:1;2643:18;;2630:32;2671:33;2630:32;2671:33;:::i;:::-;2723:7;2713:17;;;2348:388;;;;;:::o;3530:127::-;3591:10;3586:3;3582:20;3579:1;3572:31;3622:4;3619:1;3612:15;3646:4;3643:1;3636:15;3662:217;3702:1;3728;3718:132;;3772:10;3767:3;3763:20;3760:1;3753:31;3807:4;3804:1;3797:15;3835:4;3832:1;3825:15;3718:132;-1:-1:-1;3864:9:1;;3662:217::o;3884:380::-;3963:1;3959:12;;;;4006;;;4027:61;;4081:4;4073:6;4069:17;4059:27;;4027:61;4134:2;4126:6;4123:14;4103:18;4100:38;4097:161;;4180:10;4175:3;4171:20;4168:1;4161:31;4215:4;4212:1;4205:15;4243:4;4240:1;4233:15;4097:161;;3884:380;;;:::o;4269:356::-;4471:2;4453:21;;;4490:18;;;4483:30;4549:34;4544:2;4529:18;;4522:62;4616:2;4601:18;;4269:356::o;4630:128::-;4670:3;4701:1;4697:6;4694:1;4691:13;4688:39;;;4707:18;;:::i;:::-;-1:-1:-1;4743:9:1;;4630:128::o;5726:168::-;5766:7;5832:1;5828;5824:6;5820:14;5817:1;5814:21;5809:1;5802:9;5795:17;5791:45;5788:71;;;5839:18;;:::i;:::-;-1:-1:-1;5879:9:1;;5726:168::o;7496:265::-;7535:3;7563:9;;;7588:10;;-1:-1:-1;;;;;7607:27:1;;;7600:35;;7584:52;7581:78;;;7639:18;;:::i;:::-;-1:-1:-1;;;7686:19:1;;;7679:27;;7671:36;;7668:62;;;7710:18;;:::i;:::-;-1:-1:-1;;7746:9:1;;7496:265::o;8980:125::-;9020:4;9048:1;9045;9042:8;9039:34;;;9053:18;;:::i;:::-;-1:-1:-1;9090:9:1;;8980:125::o;9470:267::-;9509:4;9538:9;;;9563:10;;-1:-1:-1;;;9582:19:1;;9575:27;;9559:44;9556:70;;;9606:18;;:::i;:::-;-1:-1:-1;;;;;9653:27:1;;9646:35;;9638:44;;9635:70;;;9685:18;;:::i;:::-;-1:-1:-1;;9722:9:1;;9470:267::o

Swarm Source

ipfs://a1a3e832f086de6cb61f3b31813c5ae482d8dd06bf6b057ed57fae724de6effc

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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