ETH Price: $3,620.72 (+1.08%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve213888852024-12-12 20:42:2322 days ago1734036143IN
0x67Dcf853...7061E0646
0 ETH0.0012126926.08391651
Approve213888362024-12-12 20:32:3522 days ago1734035555IN
0x67Dcf853...7061E0646
0 ETH0.0012379326.62678563
Approve210340992024-10-24 7:55:3572 days ago1729756535IN
0x67Dcf853...7061E0646
0 ETH0.000406318.72814937
Approve208879852024-10-03 22:31:5992 days ago1727994719IN
0x67Dcf853...7061E0646
0 ETH0.000261255.61207352
Approve201877222024-06-28 4:13:35190 days ago1719548015IN
0x67Dcf853...7061E0646
0 ETH0.000369177.93039275
Approve201658102024-06-25 2:47:35193 days ago1719283655IN
0x67Dcf853...7061E0646
0 ETH0.000154573.32038651
Approve201547462024-06-23 13:40:11195 days ago1719150011IN
0x67Dcf853...7061E0646
0 ETH0.000138722.98374845
Transfer201420562024-06-21 19:02:59196 days ago1718996579IN
0x67Dcf853...7061E0646
0 ETH0.005587837.27165583
Transfer201420422024-06-21 19:00:11196 days ago1718996411IN
0x67Dcf853...7061E0646
0 ETH0.006344736.26772894
Approve201349212024-06-20 19:07:47197 days ago1718910467IN
0x67Dcf853...7061E0646
0 ETH0.0003677.89402003
Approve201326152024-06-20 11:23:11198 days ago1718882591IN
0x67Dcf853...7061E0646
0 ETH0.001250127
Approve201317022024-06-20 8:19:23198 days ago1718871563IN
0x67Dcf853...7061E0646
0 ETH0.0004680310.06704872
Approve201307032024-06-20 4:57:47198 days ago1718859467IN
0x67Dcf853...7061E0646
0 ETH0.000314456.7635586
Approve201298382024-06-20 2:02:59198 days ago1718848979IN
0x67Dcf853...7061E0646
0 ETH0.000308456.66377068
Approve201296912024-06-20 1:33:23198 days ago1718847203IN
0x67Dcf853...7061E0646
0 ETH0.000390888.39673652
Approve201296032024-06-20 1:15:47198 days ago1718846147IN
0x67Dcf853...7061E0646
0 ETH0.0007239615.55179837
Approve201296032024-06-20 1:15:47198 days ago1718846147IN
0x67Dcf853...7061E0646
0 ETH0.0007239615.55179837
Approve201295972024-06-20 1:14:35198 days ago1718846075IN
0x67Dcf853...7061E0646
0 ETH0.000379613
Approve201291402024-06-19 23:42:59198 days ago1718840579IN
0x67Dcf853...7061E0646
0 ETH0.000366017.862576
Approve201290392024-06-19 23:22:35198 days ago1718839355IN
0x67Dcf853...7061E0646
0 ETH0.000460259.88680135
Approve201288502024-06-19 22:44:47198 days ago1718837087IN
0x67Dcf853...7061E0646
0 ETH0.000458749.85439323
Approve201288342024-06-19 22:41:35198 days ago1718836895IN
0x67Dcf853...7061E0646
0 ETH0.000449459.6548085
Approve201288342024-06-19 22:41:35198 days ago1718836895IN
0x67Dcf853...7061E0646
0 ETH0.000449459.6548085
Claim Dividend201284782024-06-19 21:29:47198 days ago1718832587IN
0x67Dcf853...7061E0646
0 ETH0.0019051519.31445503
Approve201281302024-06-19 20:20:11198 days ago1718828411IN
0x67Dcf853...7061E0646
0 ETH0.000559912.02750939
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
213888872024-12-12 20:42:4722 days ago1734036167
0x67Dcf853...7061E0646
0.00078916 ETH
213888872024-12-12 20:42:4722 days ago1734036167
0x67Dcf853...7061E0646
0.00236749 ETH
213888872024-12-12 20:42:4722 days ago1734036167
0x67Dcf853...7061E0646
0.00315666 ETH
208881922024-10-03 23:13:2392 days ago1727997203
0x67Dcf853...7061E0646
0.00105206 ETH
208881922024-10-03 23:13:2392 days ago1727997203
0x67Dcf853...7061E0646
0.0031562 ETH
208881922024-10-03 23:13:2392 days ago1727997203
0x67Dcf853...7061E0646
0.00420827 ETH
202073962024-06-30 22:09:11187 days ago1719785351
0x67Dcf853...7061E0646
0.00092357 ETH
202073962024-06-30 22:09:11187 days ago1719785351
0x67Dcf853...7061E0646
0.00277072 ETH
202073962024-06-30 22:09:11187 days ago1719785351
0x67Dcf853...7061E0646
0.00369429 ETH
201420422024-06-21 19:00:11196 days ago1718996411
0x67Dcf853...7061E0646
0.00127473 ETH
201420422024-06-21 19:00:11196 days ago1718996411
0x67Dcf853...7061E0646
0.00382419 ETH
201420422024-06-21 19:00:11196 days ago1718996411
0x67Dcf853...7061E0646
0.00509893 ETH
201326222024-06-20 11:24:35198 days ago1718882675
0x67Dcf853...7061E0646
0.00127981 ETH
201326222024-06-20 11:24:35198 days ago1718882675
0x67Dcf853...7061E0646
0.00383943 ETH
201326222024-06-20 11:24:35198 days ago1718882675
0x67Dcf853...7061E0646
0.00511924 ETH
201298492024-06-20 2:05:11198 days ago1718849111
0x67Dcf853...7061E0646
0.00136947 ETH
201298492024-06-20 2:05:11198 days ago1718849111
0x67Dcf853...7061E0646
0.00410842 ETH
201298492024-06-20 2:05:11198 days ago1718849111
0x67Dcf853...7061E0646
0.0054779 ETH
201297832024-06-20 1:51:59198 days ago1718848319
0x67Dcf853...7061E0646
0.00202745 ETH
201297832024-06-20 1:51:59198 days ago1718848319
0x67Dcf853...7061E0646
0.00608235 ETH
201297832024-06-20 1:51:59198 days ago1718848319
0x67Dcf853...7061E0646
0.0081098 ETH
201291892024-06-19 23:52:59198 days ago1718841179
0x67Dcf853...7061E0646
0.00150108 ETH
201291892024-06-19 23:52:59198 days ago1718841179
0x67Dcf853...7061E0646
0.00450326 ETH
201291892024-06-19 23:52:59198 days ago1718841179
0x67Dcf853...7061E0646
0.00600435 ETH
201288362024-06-19 22:41:59198 days ago1718836919
0x67Dcf853...7061E0646
0.00148824 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HODL

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-19
*/

/**
*
$HODL is a movement that aims to turn every 'jeet' into a HODLER. We'll eliminate the jeets and move forward. To usher in this new era, we'll use a smart contract designed to reward holders.

🔛How It Works:

TOTAL TAX : 4% Tax: Every time someone buys or sells $HODL, we take a small fee.
➡️3% Rewards: We share most of this fee in eth (3%) with everyone who holds $HODL.
➡️1% Development: We use the rest (1%) to make $HODL even better.

So, holding $HODL is like having a magic toy that gives you more toys the longer you keep it!

✅Website: https://hodl.cfd/
✖️Twiitter: https://x.com/JustHodl_eth
✈️Telegram: https://t.me/justhodl_eth

*/

pragma solidity 0.8.19;

// SPDX-License-Identifier: Unlicensed

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;
        }
    }
}

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

    function decimals() external view returns (uint8);

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

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

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

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

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

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

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

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

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

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

interface IDEXRouter {
    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
        );

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

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;
    address _token;

    address distributorOwner;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;
    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10**36;

    uint256 public minPeriod = 60 minutes;
    uint256 public minDistribution = 1 * (10**15);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token || msg.sender == distributorOwner);
        _;
    }

    constructor(address _distributorOwner) {
        _token = msg.sender;
        distributorOwner = _distributorOwner;
    }

    function setDistributionCriteria(
        uint256 newMinPeriod,
        uint256 newMinDistribution
    ) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit() external payable override onlyToken {
        totalDividends = totalDividends.add(msg.value);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(msg.value).div(totalShares)
        );
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            // RewardToken.transfer(shareholder, amount);
            payable(shareholder).transfer(amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function claimDividend(address shareholder) external onlyToken {
        distributeDividend(shareholder);
    }

    function changeOwner(address newOwner) external onlyToken {
        distributorOwner = newOwner;
    }

    function rescueDividends(uint256 amountPercentage) external onlyToken {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer((amountETH * amountPercentage) / 100);
    }

    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

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

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


abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract HODL is IERC20, Ownable {
    using SafeMath for uint256;

    string constant _name = "HODL";
    string constant _symbol = "HODL";
    uint8 constant _decimals = 18;

    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address public autoLiquidityReceiver;
    address public marketingWallet;

    uint256 _totalSupply = 1_000_000_000 * (10**_decimals);
    uint256 public _maxTxAmount = (_totalSupply * 20) / 1000;
    uint256 public _walletMax = (_totalSupply * 20) / 1000;
    bool public restrictWhales = true;

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

    bool public tradingOpen = false;

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isDividendExempt;

    bool public takeBuyFee = true;
    bool public takeSellFee = true;
    bool public takeTransferFee = true;

    uint256 public liquidityFee = 10;
    uint256 public marketingFee = 30;
    uint256 public rewardsFee = 20;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    IDEXRouter public router;
    address public pair;
    mapping(address => bool) public isPair;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 750000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 public swapThreshold = (_totalSupply * 3) / 2000;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountToken);

    constructor() {
        autoLiquidityReceiver = msg.sender;
        marketingWallet = 0x805f968E7B22BE26acC962dF724074e17ce75F47;

        router = IDEXRouter(routerAddress);
        address pair_weth = IDEXFactory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );
        pair = pair_weth;
        isPair[pair] = true;

        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendDistributor = new DividendDistributor(msg.sender);

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[pair_weth] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[pair_weth] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(0xdead)] = true;
        isDividendExempt[address(0)] = true;

        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee;

        _balances[msg.sender] = _totalSupply;

        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

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

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

    function allowance(address holder, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[holder][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function checkPendingDividends(address account) external view returns (uint256) {
        return dividendDistributor.getUnpaidEarnings(account);
    }

    function claimDividend() external {
        dividendDistributor.claimDividend(msg.sender);
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(
            amount <= _maxTxAmount || isTxLimitExempt[sender],
            "TX Limit Exceeded"
        );
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function setRestrictWhales(bool _status) external onlyOwner {
        restrictWhales = _status;
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (!isFeeExempt[sender]) {
            require(tradingOpen, "Trading not open yet");
        }

        require(
            amount <= _maxTxAmount || isTxLimitExempt[sender] || !restrictWhales,
            "TX Limit Exceeded"
        );

        if (
            !isPair[sender] &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            _balances[address(this)] >= swapThreshold
        ) {
            swapBack();
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );

        if (!isTxLimitExempt[recipient] && restrictWhales) {
            require(_balances[recipient].add(amount) <= _walletMax);
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if (!isDividendExempt[sender]) {
            try
                dividendDistributor.setShare(sender, _balances[sender])
            {} catch {}
        }

        if (!isDividendExempt[recipient]) {
            try
                dividendDistributor.setShare(recipient, _balances[recipient])
            {} catch {}
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);

        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeApplicable = 0;

        if (isPair[recipient] && takeSellFee) {
            feeApplicable = totalFeeIfSelling;
        }
        if (isPair[sender] && takeBuyFee) {
            feeApplicable = totalFee;
        }
        if (!isPair[sender] && !isPair[recipient]) {
            if (takeTransferFee) {
                feeApplicable = totalFeeIfSelling;
            } else {
                feeApplicable = 0;
            }
        }

        uint256 feeAmount = amount.mul(feeApplicable).div(1000);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function swapBack() internal lockTheSwap {
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHReflection = amountETH.mul(rewardsFee).div(
            totalETHFee
        );
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );

        try
            dividendDistributor.deposit{value: amountETHReflection}()
        {} catch {}

        (bool tmpSuccess, ) = payable(marketingWallet).call{
            value: amountETHMarketing,
            gas: 30000
        }("");

        tmpSuccess = false;

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    function changeTakeBuyfee(bool status) public onlyOwner {
        takeBuyFee = status;
    }

    function changeTakeSellfee(bool status) public onlyOwner {
        takeSellFee = status;
    }

    function changeTakeTransferfee(bool status) public onlyOwner {
        takeTransferFee = status;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= 5, "Wallet Limit needs to be at least 0.5%");
        _walletMax = (_totalSupply * newLimit) / 1000;
    }

    function setTxLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= 5, "Wallet Limit needs to be at least 0.5%");
        _maxTxAmount = (_totalSupply * newLimit) / 1000;
    }

    function changeFees(
        uint256 newLiqFeeThou,
        uint256 newRewardFeeThou,
        uint256 newmarketingFee,
        uint256 extraSellFee
    ) external onlyOwner {
        liquidityFee = newLiqFeeThou;
        rewardsFee = newRewardFeeThou;
        marketingFee = newmarketingFee;

        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee + extraSellFee;
        require(
            totalFee + totalFeeIfSelling <= 700,
            "Token: Combined fees must be under %"
        );
    }

    function changeSwapBackSettings(
        bool enableSwapBack,
        uint256 newSwapBackLimit,
        bool swapByLimitOnly
    ) external onlyOwner {
        swapAndLiquifyEnabled = enableSwapBack;
        swapThreshold = _totalSupply * newSwapBackLimit / 10000;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
    }

    function changeDistributionCriteria(
        uint256 newinPeriod,
        uint256 newMinDistribution
    ) external onlyOwner {
        dividendDistributor.setDistributionCriteria(
            newinPeriod,
            newMinDistribution
        );
    }

    function changeDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        distributorGas = gas;
    }

    function processDividends(uint256 gas) external onlyOwner {
        dividendDistributor.process(gas);
    }

    function setRouterAddress(address newRouter) public onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(newRouter);
        // Create a uniswap pair for this new token
        IDEXFactory _uniswapV2Factory = IDEXFactory(_uniswapV2Router.factory());
        address pairAddress = _uniswapV2Factory.getPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        if (pairAddress == address(0)) {
            pairAddress = _uniswapV2Factory.createPair(
                address(this),
                _uniswapV2Router.WETH()
            );
        }
        isPair[pairAddress] = true;
        isDividendExempt[pairAddress] = true;
        isTxLimitExempt[pairAddress] = true;

        router = _uniswapV2Router;
    }

    function changePair(address _address, bool status) public onlyOwner {
        isPair[_address] = status;
    }

    function changeIsFeeExempt(address holder, bool exempt) public onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt)
        public
        onlyOwner
    {
        isTxLimitExempt[holder] = exempt;
    }

    function changeIsDividendExempt(address holder, bool exempt)
        public
        onlyOwner
    {
        if (isPair[holder]) {
            exempt = true;
        }

        isDividendExempt[holder] = exempt;

        if (exempt) {
            dividendDistributor.setShare(holder, 0);
        } else {
            dividendDistributor.setShare(holder, _balances[holder]);
        }
    }

    function addDapp(address target) public onlyOwner {
        changeIsDividendExempt(target, true);
        changeIsTxLimitExempt(target, true);
        changeIsFeeExempt(target, true);
    }

    function changeFeeReceivers(
        address newLiquidityReceiver,
        address newMarketingWallet
    ) external onlyOwner {
        autoLiquidityReceiver = newLiquidityReceiver;
        marketingWallet = newMarketingWallet;
    }

    function removeERC20(address tokenAddress, uint256 tokens)
        public
        onlyOwner
        returns (bool success)
    {
        require(tokenAddress != address(this), "Cant remove the native token");
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }

    function removeEther(uint256 amountPercentage) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer((amountETH * amountPercentage) / 100);
    }

}

Contract Security Audit

Contract ABI

[{"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":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","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":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"addDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFeeThou","type":"uint256"},{"internalType":"uint256","name":"newRewardFeeThou","type":"uint256"},{"internalType":"uint256","name":"newmarketingFee","type":"uint256"},{"internalType":"uint256","name":"extraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"changePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTakeBuyfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTakeSellfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTakeTransferfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkPendingDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"removeERC20","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"removeEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"takeBuyFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeTransferFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620000386012600a62000688565b6200004890633b9aca0062000699565b6004556103e860045460146200005f919062000699565b6200006b9190620006b3565b6005556103e8600454601462000082919062000699565b6200008e9190620006b3565b6006556007805460ff19908116600117909155600a80549091168155600e80546201010162ffffff19909116179055600f55601e601055601460115560006012819055601355620b71b06018556019805462ffff0019166101001790556004546107d090620000ff90600362000699565b6200010b9190620006b3565b601a553480156200011b57600080fd5b50620001273362000500565b600280546001600160a01b0319908116331790915560038054821673805f968e7b22be26acc962df724074e17ce75f47179055600154601480549092166001600160a01b03919091169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015620001b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001db9190620006d6565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002639190620006d6565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d69190620006d6565b601580546001600160a01b0319166001600160a01b038381169182179092556000908152601660209081526040808320805460ff1916600117905530835260098252808320601454909416835292905281902060001990555190915033906200033f9062000567565b6001600160a01b039091168152602001604051809103906000f0801580156200036c573d6000803e3d6000fd5b50601780546001600160a01b0319166001600160a01b03928316179055336000818152600b60209081526040808320805460ff199081166001908117909255308086528386208054831684179055868652600c8552838620805483168417905560158054891687528487208054841685179055898916808852858820805485168617905590549098168652600d909452828520805482168317905595845281842080548716821790559383528083208054861685179055908252812080548416831790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a805484168317905580527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee8054909216179055601154601054600f54620004a692916200049f919062000550565b9062000550565b601281905560135560045433600081815260086020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200071e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006200055e828462000708565b90505b92915050565b610c8e806200308483390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005cc578160001904821115620005b057620005b062000575565b80851615620005be57918102915b93841c939080029062000590565b509250929050565b600082620005e55750600162000561565b81620005f45750600062000561565b81600181146200060d5760028114620006185762000638565b600191505062000561565b60ff8411156200062c576200062c62000575565b50506001821b62000561565b5060208310610133831016604e8410600b84101617156200065d575081810a62000561565b6200066983836200058b565b806000190482111562000680576200068062000575565b029392505050565b60006200055e60ff841683620005d4565b808202811582820484141762000561576200056162000575565b600082620006d157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620006e957600080fd5b81516001600160a01b03811681146200070157600080fd5b9392505050565b8082018082111562000561576200056162000575565b612956806200072e6000396000f3fe6080604052600436106103905760003560e01c8063787a051b116101dc578063a9f7864b11610102578063e5e31b13116100a0578063f2fde38b1161006f578063f2fde38b14610aa3578063f887ea4014610ac3578063fabe628314610ae3578063ffb54a9914610b0357600080fd5b8063e5e31b1314610a24578063f0ef821f14610a54578063f0fc6bca14610a6e578063f1d5f51714610a8357600080fd5b8063ca33e64c116100dc578063ca33e64c14610988578063ca987b0e146109a8578063da00097d146109be578063dd62ed3e146109de57600080fd5b8063a9f7864b14610928578063bad3ea6a14610948578063bb54c40e1461096857600080fd5b8063900d96111161017a578063a3a2e89e11610149578063a3a2e89e146108a8578063a5355989146108c8578063a8aa1b31146108e8578063a9059cbb1461090857600080fd5b8063900d96111461085257806395d89b41146103c557806398118cb4146108725780639fe9f4691461088857600080fd5b80638637b069116101b65780638637b069146107c4578063899420ed146107e45780638b42507f146108045780638da5cb5b1461083457600080fd5b8063787a051b146107785780637d1db4a514610798578063807c2d9c146107ae57600080fd5b806341cb87fc116102c15780636b67c4df1161025f578063715018a61161022e578063715018a6146106eb57806371bb96e71461070057806375f0a87414610720578063773fcb5c1461075857600080fd5b80636b67c4df1461066057806370540933146106765780637070c8981461069557806370a08231146106b557600080fd5b8063479f66d81161029b578063479f66d8146105e15780634a74bb02146106015780635c85974f14610620578063650c42261461064057600080fd5b806341cb87fc146105775780634355855a1461059757806344de2e4c146105c757600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce567146104eb57806334c7088914610507578063399c7976146105275780633f4218e01461054757600080fd5b806323b872dd1461049557806327b7ca5f146104b55780632bb14e1d146104d557600080fd5b80630d2959801161036a5780630d2959801461042857806318160ddd1461044a5780631df4ccfc1461045f5780631f2c80f11461047557600080fd5b80630445b6671461039c57806306fdde03146103c5578063095ea7b3146103f857600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2601a5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b5060408051808201825260048152631213d11360e21b602082015290516103bc91906124fa565b34801561040457600080fd5b5061041861041336600461255d565b610b1d565b60405190151581526020016103bc565b34801561043457600080fd5b50610448610443366004612597565b610b8a565b005b34801561045657600080fd5b506004546103b2565b34801561046b57600080fd5b506103b260125481565b34801561048157600080fd5b506104486104903660046125b4565b610bd0565b3480156104a157600080fd5b506104186104b03660046125ed565b610c28565b3480156104c157600080fd5b506104486104d036600461262e565b610cea565b3480156104e157600080fd5b506103b260115481565b3480156104f757600080fd5b50604051601281526020016103bc565b34801561051357600080fd5b5061044861052236600461264b565b610d38565b34801561053357600080fd5b5061044861054236600461268d565b610db2565b34801561055357600080fd5b5061041861056236600461262e565b600b6020526000908152604090205460ff1681565b34801561058357600080fd5b5061044861059236600461262e565b610e07565b3480156105a357600080fd5b506104186105b236600461262e565b600d6020526000908152604090205460ff1681565b3480156105d357600080fd5b506007546104189060ff1681565b3480156105ed57600080fd5b506104486105fc3660046126bb565b6110dd565b34801561060d57600080fd5b5060195461041890610100900460ff1681565b34801561062c57600080fd5b5061044861063b3660046126bb565b61111b565b34801561064c57600080fd5b5061044861065b3660046126d4565b611187565b34801561066c57600080fd5b506103b260105481565b34801561068257600080fd5b50600e5461041890610100900460ff1681565b3480156106a157600080fd5b506104486106b0366004612597565b611259565b3480156106c157600080fd5b506103b26106d036600461262e565b6001600160a01b031660009081526008602052604090205490565b3480156106f757600080fd5b5061044861129f565b34801561070c57600080fd5b5061044861071b3660046126bb565b6112d5565b34801561072c57600080fd5b50600354610740906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b34801561076457600080fd5b5061044861077336600461268d565b611363565b34801561078457600080fd5b506104486107933660046126bb565b611493565b3480156107a457600080fd5b506103b260055481565b3480156107ba57600080fd5b506103b260065481565b3480156107d057600080fd5b506104186107df36600461255d565b611505565b3480156107f057600080fd5b506104486107ff366004612597565b6115f9565b34801561081057600080fd5b5061041861081f36600461262e565b600c6020526000908152604090205460ff1681565b34801561084057600080fd5b506000546001600160a01b0316610740565b34801561085e57600080fd5b5061044861086d366004612597565b611636565b34801561087e57600080fd5b506103b2600f5481565b34801561089457600080fd5b506103b26108a336600461262e565b61167a565b3480156108b457600080fd5b506104486108c336600461268d565b6116e9565b3480156108d457600080fd5b50600e546104189062010000900460ff1681565b3480156108f457600080fd5b50601554610740906001600160a01b031681565b34801561091457600080fd5b5061041861092336600461255d565b61173e565b34801561093457600080fd5b50610448610943366004612706565b61174b565b34801561095457600080fd5b50601754610740906001600160a01b031681565b34801561097457600080fd5b50610448610983366004612597565b6117ad565b34801561099457600080fd5b50600254610740906001600160a01b031681565b3480156109b457600080fd5b506103b260135481565b3480156109ca57600080fd5b506019546104189062010000900460ff1681565b3480156109ea57600080fd5b506103b26109f93660046125b4565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610a3057600080fd5b50610418610a3f36600461262e565b60166020526000908152604090205460ff1681565b348015610a6057600080fd5b50600e546104189060ff1681565b348015610a7a57600080fd5b506104486117ea565b348015610a8f57600080fd5b50610448610a9e3660046126bb565b611843565b348015610aaf57600080fd5b50610448610abe36600461262e565b6118af565b348015610acf57600080fd5b50601454610740906001600160a01b031681565b348015610aef57600080fd5b50610448610afe36600461268d565b611947565b348015610b0f57600080fd5b50600a546104189060ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b789086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610bb490612728565b60405180910390fd5b600a805460ff1916911515919091179055565b6000546001600160a01b03163314610bfa5760405162461bcd60e51b8152600401610bb490612728565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610cd5576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610cb091849061199c565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610ce08484846119c8565b90505b9392505050565b6000546001600160a01b03163314610d145760405162461bcd60e51b8152600401610bb490612728565b610d1f816001611363565b610d2a816001611947565b610d358160016116e9565b50565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610bb490612728565b6019805461ff0019166101008515150217905560045461271090610d87908490612773565b610d91919061278a565b601a5560198054911515620100000262ff0000199092169190911790555050565b6000546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e315760405162461bcd60e51b8152600401610bb490612728565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9a91906127ac565b90506000816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1091906127ac565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f91906127ac565b90506001600160a01b03811661107557816001600160a01b031663c9c6539630856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100191906127ac565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107291906127ac565b90505b6001600160a01b0390811660009081526016602090815260408083208054600160ff199182168117909255600d84528285208054821683179055600c909352922080549091169091179055601480546001600160a01b03191693909116929092179091555050565b6000546001600160a01b031633146111075760405162461bcd60e51b8152600401610bb490612728565b620b71b0811061111657600080fd5b601855565b6000546001600160a01b031633146111455760405162461bcd60e51b8152600401610bb490612728565b60058110156111665760405162461bcd60e51b8152600401610bb4906127c9565b6103e8816004546111779190612773565b611181919061278a565b60055550565b6000546001600160a01b031633146111b15760405162461bcd60e51b8152600401610bb490612728565b600f849055601183905560108290556111d4836111ce8685611e65565b90611e65565b60128190556111e490829061280f565b60138190556012546102bc916111f99161280f565b11156112535760405162461bcd60e51b8152602060048201526024808201527f546f6b656e3a20436f6d62696e65642066656573206d75737420626520756e646044820152636572202560e01b6064820152608401610bb4565b50505050565b6000546001600160a01b031633146112835760405162461bcd60e51b8152600401610bb490612728565b600e8054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146112c95760405162461bcd60e51b8152600401610bb490612728565b6112d36000611e71565b565b6000546001600160a01b031633146112ff5760405162461bcd60e51b8152600401610bb490612728565b6017546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401600060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b5050505050565b6000546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03821660009081526016602052604090205460ff16156113b2575060015b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915561144a57601754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b15801561142e57600080fd5b505af1158015611442573d6000803e3d6000fd5b505050505050565b6017546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611414565b6000546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610bb490612728565b47336108fc60646114ce8585612773565b6114d8919061278a565b6040518115909202916000818181858888f19350505050158015611500573d6000803e3d6000fd5b505050565b600080546001600160a01b031633146115305760405162461bcd60e51b8152600401610bb490612728565b306001600160a01b038416036115885760405162461bcd60e51b815260206004820152601c60248201527f43616e742072656d6f766520746865206e617469766520746f6b656e000000006044820152606401610bb4565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156115d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce39190612822565b6000546001600160a01b031633146116235760405162461bcd60e51b8152600401610bb490612728565b6007805460ff1916911515919091179055565b6000546001600160a01b031633146116605760405162461bcd60e51b8152600401610bb490612728565b600e80549115156101000261ff0019909216919091179055565b60175460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b84919061283f565b6000546001600160a01b031633146117135760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610ce33384846119c8565b6000546001600160a01b031633146117755760405162461bcd60e51b8152600401610bb490612728565b6017546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401611414565b6000546001600160a01b031633146117d75760405162461bcd60e51b8152600401610bb490612728565b600e805460ff1916911515919091179055565b601754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561182f57600080fd5b505af1158015611253573d6000803e3d6000fd5b6000546001600160a01b0316331461186d5760405162461bcd60e51b8152600401610bb490612728565b600581101561188e5760405162461bcd60e51b8152600401610bb4906127c9565b6103e88160045461189f9190612773565b6118a9919061278a565b60065550565b6000546001600160a01b031633146118d95760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03811661193e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb4565b610d3581611e71565b6000546001600160a01b031633146119715760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b600081848411156119c05760405162461bcd60e51b8152600401610bb491906124fa565b505050900390565b60195460009060ff16156119e8576119e1848484611ec1565b9050610ce3565b6001600160a01b0384166000908152600b602052604090205460ff16611a5157600a5460ff16611a515760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bb4565b60055482111580611a7a57506001600160a01b0384166000908152600c602052604090205460ff165b80611a88575060075460ff16155b611ac85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bb4565b6001600160a01b03841660009081526016602052604090205460ff16158015611af4575060195460ff16155b8015611b075750601954610100900460ff165b8015611b245750601a543060009081526008602052604090205410155b15611b3157611b31611fa7565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611b8391849061199c565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600c909152205460ff16158015611bc1575060075460ff165b15611bf7576006546001600160a01b038416600090815260086020526040902054611bec9084611e65565b1115611bf757600080fd5b6001600160a01b0384166000908152600b602052604081205460ff16158015611c3957506001600160a01b0384166000908152600b602052604090205460ff16155b611c435782611c4e565b611c4e858585612366565b6001600160a01b038516600090815260086020526040902054909150611c749082611e65565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600d909152205460ff16611d18576017546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611d0557600080fd5b505af1925050508015611d16575060015b505b6001600160a01b0384166000908152600d602052604090205460ff16611da9576017546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611d9657600080fd5b505af1925050508015611da7575060015b505b6017546018546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611de19160040190815260200190565b600060405180830381600087803b158015611dfb57600080fd5b505af1925050508015611e0c575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5291815260200190565b60405180910390a3506001949350505050565b6000610ce3828461280f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611f1291849061199c565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611f419083611e65565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f959086815260200190565b60405180910390a35060019392505050565b6019805460ff1916600117905530600090815260086020526040812054601254600f54919291611fe891600291611fe29190829087906124d6565b906124e2565b90506000611ff683836124ee565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061203057612030612858565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad91906127ac565b816001815181106120c0576120c0612858565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac9479061210690859060009086903090429060040161286e565b600060405180830381600087803b15801561212057600080fd5b505af1158015612134573d6000803e3d6000fd5b5050600f54479250600091506121589061214f9060026124e2565b601254906124ee565b9050600061217a6002611fe284611fe2600f54886124d690919063ffffffff16565b9050600061219783611fe2601154876124d690919063ffffffff16565b905060006121b484611fe2601054886124d690919063ffffffff16565b9050601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561220657600080fd5b505af193505050508015612218575060015b506003546040516000916001600160a01b03169061753090849084818181858888f193505050503d806000811461226b576040519150601f19603f3d011682016040523d82523d6000602084013e612270565b606091505b506000925050891590506123505760145460025460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af11580156122ee573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061231391906128df565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506019805460ff191690555050505050505050565b6001600160a01b038216600090815260166020526040812054819060ff1680156123975750600e54610100900460ff165b156123a157506013545b6001600160a01b03851660009081526016602052604090205460ff1680156123cb5750600e5460ff165b156123d557506012545b6001600160a01b03851660009081526016602052604090205460ff1615801561241757506001600160a01b03841660009081526016602052604090205460ff16155b1561243a57600e5462010000900460ff1615612436575060135461243a565b5060005b600061244c6103e8611fe286856124d6565b306000908152600860205260409020549091506124699082611e65565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124ba9085815260200190565b60405180910390a36124cc84826124ee565b9695505050505050565b6000610ce38284612773565b6000610ce3828461278a565b6000610ce3828461290d565b600060208083528351808285015260005b818110156125275785810183015185820160400152820161250b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d3557600080fd5b6000806040838503121561257057600080fd5b823561257b81612548565b946020939093013593505050565b8015158114610d3557600080fd5b6000602082840312156125a957600080fd5b8135610ce381612589565b600080604083850312156125c757600080fd5b82356125d281612548565b915060208301356125e281612548565b809150509250929050565b60008060006060848603121561260257600080fd5b833561260d81612548565b9250602084013561261d81612548565b929592945050506040919091013590565b60006020828403121561264057600080fd5b8135610ce381612548565b60008060006060848603121561266057600080fd5b833561266b81612589565b925060208401359150604084013561268281612589565b809150509250925092565b600080604083850312156126a057600080fd5b82356126ab81612548565b915060208301356125e281612589565b6000602082840312156126cd57600080fd5b5035919050565b600080600080608085870312156126ea57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561271957600080fd5b50508035926020909101359150565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b8457610b8461275d565b6000826127a757634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156127be57600080fd5b8151610ce381612548565b60208082526026908201527f57616c6c6574204c696d6974206e6565647320746f206265206174206c6561736040820152657420302e352560d01b606082015260800190565b80820180821115610b8457610b8461275d565b60006020828403121561283457600080fd5b8151610ce381612589565b60006020828403121561285157600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128be5784516001600160a01b031683529383019391830191600101612899565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128f457600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610b8457610b8461275d56fea2646970667358221220bc40e9d02735c5cb026b0c3916d80f6f88681f3f97e588e8940439b9df1cc1d864736f6c6343000813003360806040526ec097ce7bc90715b34b9f1000000000600a55610e10600b5566038d7ea4c68000600c5534801561003457600080fd5b50604051610c8e380380610c8e83398101604081905261005391610086565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556100b6565b60006020828403121561009857600080fd5b81516001600160a01b03811681146100af57600080fd5b9392505050565b610bc9806100c56000396000f3fe6080604052600436106100f35760003560e01c8063a6f9dae11161008a578063e2d2e21911610059578063e2d2e21914610284578063efca2eed1461029a578063ffb2c479146102b0578063ffd49c84146102d057600080fd5b8063a6f9dae1146101e5578063c9d6567e14610205578063ce7c2ac214610225578063d0e30db01461027c57600080fd5b80632d48e896116100c65780632d48e896146101835780633a98ef39146101a35780634fab0ae8146101b9578063997664d7146101cf57600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806328fd319814610163575b600080fd5b34801561010457600080fd5b5061010e600a5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610a59565b6102e6565b005b34801561014f57600080fd5b5061014161015e366004610a83565b610473565b34801561016f57600080fd5b5061010e61017e366004610a83565b6104ab565b34801561018f57600080fd5b5061014161019e366004610a9e565b610536565b3480156101af57600080fd5b5061010e60065481565b3480156101c557600080fd5b5061010e600c5481565b3480156101db57600080fd5b5061010e60075481565b3480156101f157600080fd5b50610141610200366004610a83565b61056d565b34801561021157600080fd5b50610141610220366004610ac0565b6105bb565b34801561023157600080fd5b50610261610240366004610a83565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b61014161062f565b34801561029057600080fd5b5061010e60095481565b3480156102a657600080fd5b5061010e60085481565b3480156102bc57600080fd5b506101416102cb366004610ac0565b610697565b3480156102dc57600080fd5b5061010e600b5481565b6000546001600160a01b031633148061030957506001546001600160a01b031633145b61031257600080fd5b6001600160a01b0382166000908152600560205260409020541561033957610339826107b0565b60008111801561035f57506001600160a01b038216600090815260056020526040902054155b156103c557600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03191690911790556103f8565b801580156103ea57506001600160a01b03821660009081526005602052604090205415155b156103f8576103f88261088d565b6001600160a01b038216600090815260056020526040902054600654610429918391610423916109a2565b906109b7565b6006556001600160a01b0382166000908152600560205260409020819055610450816109c3565b6001600160a01b0390921660009081526005602052604090206001019190915550565b6000546001600160a01b031633148061049657506001546001600160a01b031633145b61049f57600080fd5b6104a8816107b0565b50565b6001600160a01b03811660009081526005602052604081205481036104d257506000919050565b6001600160a01b0382166000908152600560205260408120546104f4906109c3565b6001600160a01b038416600090815260056020526040902060010154909150808211610524575060009392505050565b61052e82826109a2565b949350505050565b6000546001600160a01b031633148061055957506001546001600160a01b031633145b61056257600080fd5b600b91909155600c55565b6000546001600160a01b031633148061059057506001546001600160a01b031633145b61059957600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806105de57506001546001600160a01b031633145b6105e757600080fd5b47336108fc60646105f88585610aef565b6106029190610b06565b6040518115909202916000818181858888f1935050505015801561062a573d6000803e3d6000fd5b505050565b6000546001600160a01b031633148061065257506001546001600160a01b031633145b61065b57600080fd5b60075461066890346109b7565b600755600654600a54610692916106899161068390346109e0565b906109ec565b600954906109b7565b600955565b6000546001600160a01b03163314806106ba57506001546001600160a01b031633145b6106c357600080fd5b60025460008190036106d3575050565b60008060005a90505b84821080156106ea57508383105b156107a95783600d54106106fe576000600d555b6107306002600d548154811061071657610716610b28565b6000918252602090912001546001600160a01b03166109f8565b15610767576107676002600d548154811061074d5761074d610b28565b6000918252602090912001546001600160a01b03166107b0565b61077c6107755a83906109a2565b83906109b7565b91505a600d8054919250600061079183610b3e565b919050555082806107a190610b3e565b9350506106dc565b5050505050565b6001600160a01b03811660009081526005602052604081205490036107d25750565b60006107dd826104ab565b90508015610889576008546107f290826109b7565b6008556040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561082b573d6000803e3d6000fd5b506001600160a01b0382166000908152600460209081526040808320429055600590915290206002015461085f90826109b7565b6001600160a01b0383166000908152600560205260409020600281019190915554610450906109c3565b5050565b6002805461089d90600190610b57565b815481106108ad576108ad610b28565b60009182526020808320909101546001600160a01b03848116845260039092526040909220546002805492909316929181106108eb576108eb610b28565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003918290526040812054600280549193929161093790600190610b57565b8154811061094757610947610b28565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600280548061097d5761097d610b6a565b600082815260209020810160001990810180546001600160a01b031916905501905550565b60006109ae8284610b57565b90505b92915050565b60006109ae8284610b80565b60006109b1600a54610683600954856109e090919063ffffffff16565b60006109ae8284610aef565b60006109ae8284610b06565b600b546001600160a01b03821660009081526004602052604081205490914291610a229190610b80565b1080156109b15750600c54610a36836104ab565b1192915050565b80356001600160a01b0381168114610a5457600080fd5b919050565b60008060408385031215610a6c57600080fd5b610a7583610a3d565b946020939093013593505050565b600060208284031215610a9557600080fd5b6109ae82610a3d565b60008060408385031215610ab157600080fd5b50508035926020909101359150565b600060208284031215610ad257600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109b1576109b1610ad9565b600082610b2357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201610b5057610b50610ad9565b5060010190565b818103818111156109b1576109b1610ad9565b634e487b7160e01b600052603160045260246000fd5b808201808211156109b1576109b1610ad956fea264697066735822122082ea1c9d4983e456552fa840a11f1af965f6493022c915d30f64e558e1c1dcde64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103905760003560e01c8063787a051b116101dc578063a9f7864b11610102578063e5e31b13116100a0578063f2fde38b1161006f578063f2fde38b14610aa3578063f887ea4014610ac3578063fabe628314610ae3578063ffb54a9914610b0357600080fd5b8063e5e31b1314610a24578063f0ef821f14610a54578063f0fc6bca14610a6e578063f1d5f51714610a8357600080fd5b8063ca33e64c116100dc578063ca33e64c14610988578063ca987b0e146109a8578063da00097d146109be578063dd62ed3e146109de57600080fd5b8063a9f7864b14610928578063bad3ea6a14610948578063bb54c40e1461096857600080fd5b8063900d96111161017a578063a3a2e89e11610149578063a3a2e89e146108a8578063a5355989146108c8578063a8aa1b31146108e8578063a9059cbb1461090857600080fd5b8063900d96111461085257806395d89b41146103c557806398118cb4146108725780639fe9f4691461088857600080fd5b80638637b069116101b65780638637b069146107c4578063899420ed146107e45780638b42507f146108045780638da5cb5b1461083457600080fd5b8063787a051b146107785780637d1db4a514610798578063807c2d9c146107ae57600080fd5b806341cb87fc116102c15780636b67c4df1161025f578063715018a61161022e578063715018a6146106eb57806371bb96e71461070057806375f0a87414610720578063773fcb5c1461075857600080fd5b80636b67c4df1461066057806370540933146106765780637070c8981461069557806370a08231146106b557600080fd5b8063479f66d81161029b578063479f66d8146105e15780634a74bb02146106015780635c85974f14610620578063650c42261461064057600080fd5b806341cb87fc146105775780634355855a1461059757806344de2e4c146105c757600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce567146104eb57806334c7088914610507578063399c7976146105275780633f4218e01461054757600080fd5b806323b872dd1461049557806327b7ca5f146104b55780632bb14e1d146104d557600080fd5b80630d2959801161036a5780630d2959801461042857806318160ddd1461044a5780631df4ccfc1461045f5780631f2c80f11461047557600080fd5b80630445b6671461039c57806306fdde03146103c5578063095ea7b3146103f857600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2601a5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b5060408051808201825260048152631213d11360e21b602082015290516103bc91906124fa565b34801561040457600080fd5b5061041861041336600461255d565b610b1d565b60405190151581526020016103bc565b34801561043457600080fd5b50610448610443366004612597565b610b8a565b005b34801561045657600080fd5b506004546103b2565b34801561046b57600080fd5b506103b260125481565b34801561048157600080fd5b506104486104903660046125b4565b610bd0565b3480156104a157600080fd5b506104186104b03660046125ed565b610c28565b3480156104c157600080fd5b506104486104d036600461262e565b610cea565b3480156104e157600080fd5b506103b260115481565b3480156104f757600080fd5b50604051601281526020016103bc565b34801561051357600080fd5b5061044861052236600461264b565b610d38565b34801561053357600080fd5b5061044861054236600461268d565b610db2565b34801561055357600080fd5b5061041861056236600461262e565b600b6020526000908152604090205460ff1681565b34801561058357600080fd5b5061044861059236600461262e565b610e07565b3480156105a357600080fd5b506104186105b236600461262e565b600d6020526000908152604090205460ff1681565b3480156105d357600080fd5b506007546104189060ff1681565b3480156105ed57600080fd5b506104486105fc3660046126bb565b6110dd565b34801561060d57600080fd5b5060195461041890610100900460ff1681565b34801561062c57600080fd5b5061044861063b3660046126bb565b61111b565b34801561064c57600080fd5b5061044861065b3660046126d4565b611187565b34801561066c57600080fd5b506103b260105481565b34801561068257600080fd5b50600e5461041890610100900460ff1681565b3480156106a157600080fd5b506104486106b0366004612597565b611259565b3480156106c157600080fd5b506103b26106d036600461262e565b6001600160a01b031660009081526008602052604090205490565b3480156106f757600080fd5b5061044861129f565b34801561070c57600080fd5b5061044861071b3660046126bb565b6112d5565b34801561072c57600080fd5b50600354610740906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b34801561076457600080fd5b5061044861077336600461268d565b611363565b34801561078457600080fd5b506104486107933660046126bb565b611493565b3480156107a457600080fd5b506103b260055481565b3480156107ba57600080fd5b506103b260065481565b3480156107d057600080fd5b506104186107df36600461255d565b611505565b3480156107f057600080fd5b506104486107ff366004612597565b6115f9565b34801561081057600080fd5b5061041861081f36600461262e565b600c6020526000908152604090205460ff1681565b34801561084057600080fd5b506000546001600160a01b0316610740565b34801561085e57600080fd5b5061044861086d366004612597565b611636565b34801561087e57600080fd5b506103b2600f5481565b34801561089457600080fd5b506103b26108a336600461262e565b61167a565b3480156108b457600080fd5b506104486108c336600461268d565b6116e9565b3480156108d457600080fd5b50600e546104189062010000900460ff1681565b3480156108f457600080fd5b50601554610740906001600160a01b031681565b34801561091457600080fd5b5061041861092336600461255d565b61173e565b34801561093457600080fd5b50610448610943366004612706565b61174b565b34801561095457600080fd5b50601754610740906001600160a01b031681565b34801561097457600080fd5b50610448610983366004612597565b6117ad565b34801561099457600080fd5b50600254610740906001600160a01b031681565b3480156109b457600080fd5b506103b260135481565b3480156109ca57600080fd5b506019546104189062010000900460ff1681565b3480156109ea57600080fd5b506103b26109f93660046125b4565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610a3057600080fd5b50610418610a3f36600461262e565b60166020526000908152604090205460ff1681565b348015610a6057600080fd5b50600e546104189060ff1681565b348015610a7a57600080fd5b506104486117ea565b348015610a8f57600080fd5b50610448610a9e3660046126bb565b611843565b348015610aaf57600080fd5b50610448610abe36600461262e565b6118af565b348015610acf57600080fd5b50601454610740906001600160a01b031681565b348015610aef57600080fd5b50610448610afe36600461268d565b611947565b348015610b0f57600080fd5b50600a546104189060ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b789086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610bb490612728565b60405180910390fd5b600a805460ff1916911515919091179055565b6000546001600160a01b03163314610bfa5760405162461bcd60e51b8152600401610bb490612728565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610cd5576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610cb091849061199c565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610ce08484846119c8565b90505b9392505050565b6000546001600160a01b03163314610d145760405162461bcd60e51b8152600401610bb490612728565b610d1f816001611363565b610d2a816001611947565b610d358160016116e9565b50565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610bb490612728565b6019805461ff0019166101008515150217905560045461271090610d87908490612773565b610d91919061278a565b601a5560198054911515620100000262ff0000199092169190911790555050565b6000546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e315760405162461bcd60e51b8152600401610bb490612728565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9a91906127ac565b90506000816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1091906127ac565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f91906127ac565b90506001600160a01b03811661107557816001600160a01b031663c9c6539630856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100191906127ac565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107291906127ac565b90505b6001600160a01b0390811660009081526016602090815260408083208054600160ff199182168117909255600d84528285208054821683179055600c909352922080549091169091179055601480546001600160a01b03191693909116929092179091555050565b6000546001600160a01b031633146111075760405162461bcd60e51b8152600401610bb490612728565b620b71b0811061111657600080fd5b601855565b6000546001600160a01b031633146111455760405162461bcd60e51b8152600401610bb490612728565b60058110156111665760405162461bcd60e51b8152600401610bb4906127c9565b6103e8816004546111779190612773565b611181919061278a565b60055550565b6000546001600160a01b031633146111b15760405162461bcd60e51b8152600401610bb490612728565b600f849055601183905560108290556111d4836111ce8685611e65565b90611e65565b60128190556111e490829061280f565b60138190556012546102bc916111f99161280f565b11156112535760405162461bcd60e51b8152602060048201526024808201527f546f6b656e3a20436f6d62696e65642066656573206d75737420626520756e646044820152636572202560e01b6064820152608401610bb4565b50505050565b6000546001600160a01b031633146112835760405162461bcd60e51b8152600401610bb490612728565b600e8054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146112c95760405162461bcd60e51b8152600401610bb490612728565b6112d36000611e71565b565b6000546001600160a01b031633146112ff5760405162461bcd60e51b8152600401610bb490612728565b6017546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401600060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b5050505050565b6000546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03821660009081526016602052604090205460ff16156113b2575060015b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915561144a57601754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b15801561142e57600080fd5b505af1158015611442573d6000803e3d6000fd5b505050505050565b6017546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611414565b6000546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610bb490612728565b47336108fc60646114ce8585612773565b6114d8919061278a565b6040518115909202916000818181858888f19350505050158015611500573d6000803e3d6000fd5b505050565b600080546001600160a01b031633146115305760405162461bcd60e51b8152600401610bb490612728565b306001600160a01b038416036115885760405162461bcd60e51b815260206004820152601c60248201527f43616e742072656d6f766520746865206e617469766520746f6b656e000000006044820152606401610bb4565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156115d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce39190612822565b6000546001600160a01b031633146116235760405162461bcd60e51b8152600401610bb490612728565b6007805460ff1916911515919091179055565b6000546001600160a01b031633146116605760405162461bcd60e51b8152600401610bb490612728565b600e80549115156101000261ff0019909216919091179055565b60175460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b84919061283f565b6000546001600160a01b031633146117135760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610ce33384846119c8565b6000546001600160a01b031633146117755760405162461bcd60e51b8152600401610bb490612728565b6017546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401611414565b6000546001600160a01b031633146117d75760405162461bcd60e51b8152600401610bb490612728565b600e805460ff1916911515919091179055565b601754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561182f57600080fd5b505af1158015611253573d6000803e3d6000fd5b6000546001600160a01b0316331461186d5760405162461bcd60e51b8152600401610bb490612728565b600581101561188e5760405162461bcd60e51b8152600401610bb4906127c9565b6103e88160045461189f9190612773565b6118a9919061278a565b60065550565b6000546001600160a01b031633146118d95760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03811661193e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb4565b610d3581611e71565b6000546001600160a01b031633146119715760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b600081848411156119c05760405162461bcd60e51b8152600401610bb491906124fa565b505050900390565b60195460009060ff16156119e8576119e1848484611ec1565b9050610ce3565b6001600160a01b0384166000908152600b602052604090205460ff16611a5157600a5460ff16611a515760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bb4565b60055482111580611a7a57506001600160a01b0384166000908152600c602052604090205460ff165b80611a88575060075460ff16155b611ac85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bb4565b6001600160a01b03841660009081526016602052604090205460ff16158015611af4575060195460ff16155b8015611b075750601954610100900460ff165b8015611b245750601a543060009081526008602052604090205410155b15611b3157611b31611fa7565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611b8391849061199c565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600c909152205460ff16158015611bc1575060075460ff165b15611bf7576006546001600160a01b038416600090815260086020526040902054611bec9084611e65565b1115611bf757600080fd5b6001600160a01b0384166000908152600b602052604081205460ff16158015611c3957506001600160a01b0384166000908152600b602052604090205460ff16155b611c435782611c4e565b611c4e858585612366565b6001600160a01b038516600090815260086020526040902054909150611c749082611e65565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600d909152205460ff16611d18576017546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611d0557600080fd5b505af1925050508015611d16575060015b505b6001600160a01b0384166000908152600d602052604090205460ff16611da9576017546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611d9657600080fd5b505af1925050508015611da7575060015b505b6017546018546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611de19160040190815260200190565b600060405180830381600087803b158015611dfb57600080fd5b505af1925050508015611e0c575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5291815260200190565b60405180910390a3506001949350505050565b6000610ce3828461280f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611f1291849061199c565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611f419083611e65565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f959086815260200190565b60405180910390a35060019392505050565b6019805460ff1916600117905530600090815260086020526040812054601254600f54919291611fe891600291611fe29190829087906124d6565b906124e2565b90506000611ff683836124ee565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061203057612030612858565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad91906127ac565b816001815181106120c0576120c0612858565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac9479061210690859060009086903090429060040161286e565b600060405180830381600087803b15801561212057600080fd5b505af1158015612134573d6000803e3d6000fd5b5050600f54479250600091506121589061214f9060026124e2565b601254906124ee565b9050600061217a6002611fe284611fe2600f54886124d690919063ffffffff16565b9050600061219783611fe2601154876124d690919063ffffffff16565b905060006121b484611fe2601054886124d690919063ffffffff16565b9050601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561220657600080fd5b505af193505050508015612218575060015b506003546040516000916001600160a01b03169061753090849084818181858888f193505050503d806000811461226b576040519150601f19603f3d011682016040523d82523d6000602084013e612270565b606091505b506000925050891590506123505760145460025460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af11580156122ee573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061231391906128df565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506019805460ff191690555050505050505050565b6001600160a01b038216600090815260166020526040812054819060ff1680156123975750600e54610100900460ff165b156123a157506013545b6001600160a01b03851660009081526016602052604090205460ff1680156123cb5750600e5460ff165b156123d557506012545b6001600160a01b03851660009081526016602052604090205460ff1615801561241757506001600160a01b03841660009081526016602052604090205460ff16155b1561243a57600e5462010000900460ff1615612436575060135461243a565b5060005b600061244c6103e8611fe286856124d6565b306000908152600860205260409020549091506124699082611e65565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124ba9085815260200190565b60405180910390a36124cc84826124ee565b9695505050505050565b6000610ce38284612773565b6000610ce3828461278a565b6000610ce3828461290d565b600060208083528351808285015260005b818110156125275785810183015185820160400152820161250b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d3557600080fd5b6000806040838503121561257057600080fd5b823561257b81612548565b946020939093013593505050565b8015158114610d3557600080fd5b6000602082840312156125a957600080fd5b8135610ce381612589565b600080604083850312156125c757600080fd5b82356125d281612548565b915060208301356125e281612548565b809150509250929050565b60008060006060848603121561260257600080fd5b833561260d81612548565b9250602084013561261d81612548565b929592945050506040919091013590565b60006020828403121561264057600080fd5b8135610ce381612548565b60008060006060848603121561266057600080fd5b833561266b81612589565b925060208401359150604084013561268281612589565b809150509250925092565b600080604083850312156126a057600080fd5b82356126ab81612548565b915060208301356125e281612589565b6000602082840312156126cd57600080fd5b5035919050565b600080600080608085870312156126ea57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561271957600080fd5b50508035926020909101359150565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b8457610b8461275d565b6000826127a757634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156127be57600080fd5b8151610ce381612548565b60208082526026908201527f57616c6c6574204c696d6974206e6565647320746f206265206174206c6561736040820152657420302e352560d01b606082015260800190565b80820180821115610b8457610b8461275d565b60006020828403121561283457600080fd5b8151610ce381612589565b60006020828403121561285157600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128be5784516001600160a01b031683529383019391830191600101612899565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128f457600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610b8457610b8461275d56fea2646970667358221220bc40e9d02735c5cb026b0c3916d80f6f88681f3f97e588e8940439b9df1cc1d864736f6c63430008130033

Deployed Bytecode Sourcemap

13829:14928:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15353:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15353:56:0;;;;;;;;16893:94;;;;;;;;;;-1:-1:-1;16974:5:0;;;;;;;;;;;-1:-1:-1;;;16974:5:0;;;;16893:94;;;;16974:5;16893:94;:::i;17636:248::-;;;;;;;;;;-1:-1:-1;17636:248:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;17636:248:0;1205:187:1;23933:94:0;;;;;;;;;;-1:-1:-1;23933:94:0;;;;;:::i;:::-;;:::i;:::-;;17203:102;;;;;;;;;;-1:-1:-1;17285:12:0;;17203:102;;14948:27;;;;;;;;;;;;;;;;28006:240;;;;;;;;;;-1:-1:-1;28006:240:0;;;;;:::i;:::-;;:::i;18565:422::-;;;;;;;;;;-1:-1:-1;18565:422:0;;;;;:::i;:::-;;:::i;27805:193::-;;;;;;;;;;-1:-1:-1;27805:193:0;;;;;:::i;:::-;;:::i;14909:30::-;;;;;;;;;;;;;;;;17101:94;;;;;;;;;;-1:-1:-1;17101:94:0;;14007:2;3014:36:1;;3002:2;2987:18;17101:94:0;2872:184:1;25337:331:0;;;;;;;;;;-1:-1:-1;25337:331:0;;;;;:::i;:::-;;:::i;26987:112::-;;;;;;;;;;-1:-1:-1;26987:112:0;;;;;:::i;:::-;;:::i;14554:43::-;;;;;;;;;;-1:-1:-1;14554:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26208:771;;;;;;;;;;-1:-1:-1;26208:771:0;;;;;:::i;:::-;;:::i;14658:48::-;;;;;;;;;;-1:-1:-1;14658:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14360:33;;;;;;;;;;-1:-1:-1;14360:33:0;;;;;;;;25945:138;;;;;;;;;;-1:-1:-1;25945:138:0;;;;;:::i;:::-;;:::i;15252:40::-;;;;;;;;;;-1:-1:-1;15252:40:0;;;;;;;;;;;24561:198;;;;;;;;;;-1:-1:-1;24561:198:0;;;;;:::i;:::-;;:::i;24767:562::-;;;;;;;;;;-1:-1:-1;24767:562:0;;;;;:::i;:::-;;:::i;14870:32::-;;;;;;;;;;;;;;;;14751:30;;;;;;;;;;-1:-1:-1;14751:30:0;;;;;;;;;;;24241:104;;;;;;;;;;-1:-1:-1;24241:104:0;;;;;:::i;:::-;;:::i;17313:119::-;;;;;;;;;;-1:-1:-1;17313:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;17406:18:0;17379:7;17406:18;;;:9;:18;;;;;;;17313:119;12975:103;;;;;;;;;;;;;:::i;26091:109::-;;;;;;;;;;-1:-1:-1;26091:109:0;;;;;:::i;:::-;;:::i;14136:30::-;;;;;;;;;;-1:-1:-1;14136:30:0;;;;-1:-1:-1;;;;;14136:30:0;;;;;;-1:-1:-1;;;;;4636:32:1;;;4618:51;;4606:2;4591:18;14136:30:0;4472:203:1;27394:403:0;;;;;;;;;;-1:-1:-1;27394:403:0;;;;;:::i;:::-;;:::i;28549:203::-;;;;;;;;;;-1:-1:-1;28549:203:0;;;;;:::i;:::-;;:::i;14236:56::-;;;;;;;;;;;;;;;;14299:54;;;;;;;;;;;;;;;;28254:287;;;;;;;;;;-1:-1:-1;28254:287:0;;;;;:::i;:::-;;:::i;18995:103::-;;;;;;;;;;-1:-1:-1;18995:103:0;;;;;:::i;:::-;;:::i;14604:47::-;;;;;;;;;;-1:-1:-1;14604:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12324:87;;;;;;;;;;-1:-1:-1;12370:7:0;12397:6;-1:-1:-1;;;;;12397:6:0;12324:87;;24137:96;;;;;;;;;;-1:-1:-1;24137:96:0;;;;;:::i;:::-;;:::i;14831:32::-;;;;;;;;;;;;;;;;17892:152;;;;;;;;;;-1:-1:-1;17892:152:0;;;;;:::i;:::-;;:::i;27107:120::-;;;;;;;;;;-1:-1:-1;27107:120:0;;;;;:::i;:::-;;:::i;14788:34::-;;;;;;;;;;-1:-1:-1;14788:34:0;;;;;;;;;;;15058:19;;;;;;;;;;-1:-1:-1;15058:19:0;;;;-1:-1:-1;;;;;15058:19:0;;;18369:188;;;;;;;;;;-1:-1:-1;18369:188:0;;;;;:::i;:::-;;:::i;25676:261::-;;;;;;;;;;-1:-1:-1;25676:261:0;;;;;:::i;:::-;;:::i;15131:46::-;;;;;;;;;;-1:-1:-1;15131:46:0;;;;-1:-1:-1;;;;;15131:46:0;;;24035:94;;;;;;;;;;-1:-1:-1;24035:94:0;;;;;:::i;:::-;;:::i;14093:36::-;;;;;;;;;;-1:-1:-1;14093:36:0;;;;-1:-1:-1;;;;;14093:36:0;;;14982;;;;;;;;;;;;;;;;15299:45;;;;;;;;;;-1:-1:-1;15299:45:0;;;;;;;;;;;17440:188;;;;;;;;;;-1:-1:-1;17440:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;17592:19:0;;;17560:7;17592:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17440:188;15084:38;;;;;;;;;;-1:-1:-1;15084:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14715:29;;;;;;;;;;-1:-1:-1;14715:29:0;;;;;;;;18052:98;;;;;;;;;;;;;:::i;24353:200::-;;;;;;;;;;-1:-1:-1;24353:200:0;;;;;:::i;:::-;;:::i;13233:238::-;;;;;;;;;;-1:-1:-1;13233:238:0;;;;;:::i;:::-;;:::i;15027:24::-;;;;;;;;;;-1:-1:-1;15027:24:0;;;;-1:-1:-1;;;;;15027:24:0;;;27235:151;;;;;;;;;;-1:-1:-1;27235:151:0;;;;;:::i;:::-;;:::i;14514:31::-;;;;;;;;;;-1:-1:-1;14514:31:0;;;;;;;;17636:248;17772:10;17738:4;17760:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17760:32:0;;;;;;;;;;:41;;;17817:37;17738:4;;17760:32;;17817:37;;;;17795:6;160:25:1;;148:2;133:18;;14:177;17817:37:0;;;;;;;;-1:-1:-1;17872:4:0;17636:248;;;;;:::o;23933:94::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;;;;;;;;;23998:11:::1;:21:::0;;-1:-1:-1;;23998:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23933:94::o;28006:240::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;28147:21:::1;:44:::0;;-1:-1:-1;;;;;28147:44:0;;::::1;-1:-1:-1::0;;;;;;28147:44:0;;::::1;;::::0;;;28202:15:::1;:36:::0;;;;;::::1;::::0;::::1;;::::0;;28006:240::o;18565:422::-;-1:-1:-1;;;;;18720:19:0;;18699:4;18720:19;;;:11;:19;;;;;;;;18740:10;18720:31;;;;;;;;-1:-1:-1;;18720:52:0;18716:206;;18823:87;;;;;;;;;;;-1:-1:-1;;;18823:87:0;;;;;;;;-1:-1:-1;;;;;18823:19:0;;-1:-1:-1;18823:19:0;;;:11;:19;;;;;18843:10;18823:31;;;;;;;;;;:87;;18877:6;;18823:53;:87::i;:::-;-1:-1:-1;;;;;18789:19:0;;;;;;:11;:19;;;;;;;;18809:10;18789:31;;;;;;;:121;18716:206;18939:40;18953:6;18961:9;18972:6;18939:13;:40::i;:::-;18932:47;;18565:422;;;;;;:::o;27805:193::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;27866:36:::1;27889:6;27897:4;27866:22;:36::i;:::-;27913:35;27935:6;27943:4;27913:21;:35::i;:::-;27959:31;27977:6;27985:4;27959:17;:31::i;:::-;27805:193:::0;:::o;25337:331::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;25502:21:::1;:38:::0;;-1:-1:-1;;25502:38:0::1;;::::0;::::1;;;;::::0;;25567:12:::1;::::0;25601:5:::1;::::0;25567:31:::1;::::0;25582:16;;25567:31:::1;:::i;:::-;:39;;;;:::i;:::-;25551:13;:55:::0;25617:25:::1;:43:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;25617:43:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;25337:331:0:o;26987:112::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27066:16:0;;;::::1;;::::0;;;:6:::1;:16;::::0;;;;:25;;-1:-1:-1;;27066:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26987:112::o;26208:771::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;26281:27:::1;26322:9;26281:51;;26396:29;26440:16;-1:-1:-1::0;;;;;26440:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26396:71;;26478:19;26500:17;-1:-1:-1::0;;;;;26500:25:0::1;;26548:4;26568:16;-1:-1:-1::0;;;;;26568:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26500:102;::::0;-1:-1:-1;;;;;;26500:102:0::1;::::0;;;;;;-1:-1:-1;;;;;6769:15:1;;;26500:102:0::1;::::0;::::1;6751:34:1::0;6821:15;;6801:18;;;6794:43;6686:18;;26500:102:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26478:124:::0;-1:-1:-1;;;;;;26619:25:0;::::1;26615:189;;26675:17;-1:-1:-1::0;;;;;26675:28:0::1;;26730:4;26754:16;-1:-1:-1::0;;;;;26754:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26675:117;::::0;-1:-1:-1;;;;;;26675:117:0::1;::::0;;;;;;-1:-1:-1;;;;;6769:15:1;;;26675:117:0::1;::::0;::::1;6751:34:1::0;6821:15;;6801:18;;;6794:43;6686:18;;26675:117:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26661:131;;26615:189;-1:-1:-1::0;;;;;26814:19:0;;::::1;;::::0;;;:6:::1;:19;::::0;;;;;;;:26;;26836:4:::1;-1:-1:-1::0;;26814:26:0;;::::1;::::0;::::1;::::0;;;26851:16:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;26898:15:::1;:28:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;26946:6:::1;:25:::0;;-1:-1:-1;;;;;;26946:25:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;26208:771:0:o;25945:138::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;26037:6:::1;26031:3;:12;26023:21;;;::::0;::::1;;26055:14;:20:::0;25945:138::o;24561:198::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24649:1:::1;24637:8;:13;;24629:64;;;;-1:-1:-1::0;;;24629:64:0::1;;;;;;;:::i;:::-;24747:4;24735:8;24720:12;;:23;;;;:::i;:::-;24719:32;;;;:::i;:::-;24704:12;:47:::0;-1:-1:-1;24561:198:0:o;24767:562::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24956:12:::1;:28:::0;;;24995:10:::1;:29:::0;;;25035:12:::1;:30:::0;;;25089:46:::1;25008:16:::0;25089:30:::1;24971:13:::0;25050:15;25089:16:::1;:30::i;:::-;:34:::0;::::1;:46::i;:::-;25078:8;:57:::0;;;25166:23:::1;::::0;25177:12;;25166:23:::1;:::i;:::-;25146:17;:43:::0;;;25222:8:::1;::::0;25254:3:::1;::::0;25222:28:::1;::::0;::::1;:::i;:::-;:35;;25200:121;;;::::0;-1:-1:-1;;;25200:121:0;;7587:2:1;25200:121:0::1;::::0;::::1;7569:21:1::0;7626:2;7606:18;;;7599:30;7665:34;7645:18;;;7638:62;-1:-1:-1;;;7716:18:1;;;7709:34;7760:19;;25200:121:0::1;7385:400:1::0;25200:121:0::1;24767:562:::0;;;;:::o;24241:104::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24313:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;24313:24:0;;::::1;::::0;;;::::1;::::0;;24241:104::o;12975:103::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;13040:30:::1;13067:1;13040:18;:30::i;:::-;12975:103::o:0;26091:109::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;26160:19:::1;::::0;:32:::1;::::0;-1:-1:-1;;;;;;26160:32:0;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;26160:19:0;;::::1;::::0;:27:::1;::::0;133:18:1;;26160:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26091:109:::0;:::o;27394:403::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27510:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;;::::1;;27506:60;;;-1:-1:-1::0;27550:4:0::1;27506:60;-1:-1:-1::0;;;;;27578:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;27578:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;27624:166:::1;;27651:19;::::0;:39:::1;::::0;-1:-1:-1;;;27651:39:0;;-1:-1:-1;;;;;7990:32:1;;;27651:39:0::1;::::0;::::1;7972:51:1::0;27651:19:0::1;8039:18:1::0;;;8032:34;27651:19:0;;::::1;::::0;:28:::1;::::0;7945:18:1;;27651:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27394:403:::0;;:::o;27624:166::-:1;27723:19;::::0;-1:-1:-1;;;;;27760:17:0;;::::1;27723:19;27760:17:::0;;;:9:::1;:17;::::0;;;;;;;27723:55;;-1:-1:-1;;;27723:55:0;;::::1;::::0;::::1;7972:51:1::0;;;;8039:18;;;8032:34;27723:19:0;::::1;::::0;:28:::1;::::0;7945:18:1;;27723:55:0::1;7790:282:1::0;28549:203:0;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;28646:21:::1;28686:10;28678:66;28740:3;28708:28;28720:16:::0;28646:21;28708:28:::1;:::i;:::-;28707:36;;;;:::i;:::-;28678:66;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28615:137;28549:203:::0;:::o;28254:287::-;28366:12;12397:6;;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;28428:4:::1;-1:-1:-1::0;;;;;28404:29:0;::::1;::::0;28396:70:::1;;;::::0;-1:-1:-1;;;28396:70:0;;8558:2:1;28396:70:0::1;::::0;::::1;8540:21:1::0;8597:2;8577:18;;;8570:30;8636;8616:18;;;8609:58;8684:18;;28396:70:0::1;8356:352:1::0;28396:70:0::1;28484:49;::::0;-1:-1:-1;;;28484:49:0;;28514:10:::1;28484:49;::::0;::::1;7972:51:1::0;8039:18;;;8032:34;;;-1:-1:-1;;;;;28484:29:0;::::1;::::0;::::1;::::0;7945:18:1;;28484:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18995:103::-:0;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;19066:14:::1;:24:::0;;-1:-1:-1;;19066:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18995:103::o;24137:96::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24205:11:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;24205:20:0;;::::1;::::0;;;::::1;::::0;;24137:96::o;17892:152::-;17990:19;;:46;;-1:-1:-1;;;17990:46:0;;-1:-1:-1;;;;;4636:32:1;;;17990:46:0;;;4618:51:1;17963:7:0;;17990:19;;:37;;4591:18:1;;17990:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27107:120::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27191:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;27191:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27107:120::o;18369:188::-;18476:4;18505:44;18519:10;18531:9;18542:6;18505:13;:44::i;25676:261::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;25816:19:::1;::::0;:113:::1;::::0;-1:-1:-1;;;25816:113:0;;::::1;::::0;::::1;9326:25:1::0;;;9367:18;;;9360:34;;;-1:-1:-1;;;;;25816:19:0;;::::1;::::0;:43:::1;::::0;9299:18:1;;25816:113:0::1;9152:248:1::0;24035:94:0;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24102:10:::1;:19:::0;;-1:-1:-1;;24102:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24035:94::o;18052:98::-;18097:19;;:45;;-1:-1:-1;;;18097:45:0;;18131:10;18097:45;;;4618:51:1;-1:-1:-1;;;;;18097:19:0;;;;:33;;4591:18:1;;18097:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24353:200;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24445:1:::1;24433:8;:13;;24425:64;;;;-1:-1:-1::0;;;24425:64:0::1;;;;;;;:::i;:::-;24541:4;24529:8;24514:12;;:23;;;;:::i;:::-;24513:32;;;;:::i;:::-;24500:10;:45:::0;-1:-1:-1;24353:200:0:o;13233:238::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13336:22:0;::::1;13314:110;;;::::0;-1:-1:-1;;;13314:110:0;;9607:2:1;13314:110:0::1;::::0;::::1;9589:21:1::0;9646:2;9626:18;;;9619:30;9685:34;9665:18;;;9658:62;-1:-1:-1;;;9736:18:1;;;9729:36;9782:19;;13314:110:0::1;9405:402:1::0;13314:110:0::1;13435:28;13454:8;13435:18;:28::i;27235:151::-:0;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27346:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;27346:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27235:151::o;2588:240::-;2708:7;2769:12;2761:6;;;;2753:29;;;;-1:-1:-1;;;2753:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2804:5:0;;;2588:240::o;19106:1779::-;19253:16;;19232:4;;19253:16;;19249:97;;;19293:41;19308:6;19316:9;19327:6;19293:14;:41::i;:::-;19286:48;;;;19249:97;-1:-1:-1;;;;;19363:19:0;;;;;;:11;:19;;;;;;;;19358:97;;19407:11;;;;19399:44;;;;-1:-1:-1;;;19399:44:0;;10014:2:1;19399:44:0;;;9996:21:1;10053:2;10033:18;;;10026:30;-1:-1:-1;;;10072:18:1;;;10065:50;10132:18;;19399:44:0;9812:344:1;19399:44:0;19499:12;;19489:6;:22;;:49;;;-1:-1:-1;;;;;;19515:23:0;;;;;;:15;:23;;;;;;;;19489:49;:68;;;-1:-1:-1;19543:14:0;;;;19542:15;19489:68;19467:135;;;;-1:-1:-1;;;19467:135:0;;10363:2:1;19467:135:0;;;10345:21:1;10402:2;10382:18;;;10375:30;-1:-1:-1;;;10421:18:1;;;10414:47;10478:18;;19467:135:0;10161:341:1;19467:135:0;-1:-1:-1;;;;;19634:14:0;;;;;;:6;:14;;;;;;;;19633:15;:49;;;;-1:-1:-1;19666:16:0;;;;19665:17;19633:49;:87;;;;-1:-1:-1;19699:21:0;;;;;;;19633:87;:145;;;;-1:-1:-1;19765:13:0;;19755:4;19737:24;;;;:9;:24;;;;;;:41;;19633:145;19615:212;;;19805:10;:8;:10::i;:::-;19886:90;;;;;;;;;;;-1:-1:-1;;;19886:90:0;;;;;;;;-1:-1:-1;;;;;19886:17:0;;-1:-1:-1;19886:17:0;;;:9;:17;;;;;;;;:90;;19922:6;;19886:21;:90::i;:::-;-1:-1:-1;;;;;19866:17:0;;;;;;;:9;:17;;;;;;;;:110;;;;19994:26;;;;;:15;:26;;;;;;;19993:27;:45;;;;-1:-1:-1;20024:14:0;;;;19993:45;19989:133;;;20099:10;;-1:-1:-1;;;;;20063:20:0;;;;;;:9;:20;;;;;;:32;;20088:6;20063:24;:32::i;:::-;:46;;20055:55;;;;;;-1:-1:-1;;;;;20157:19:0;;20134;20157;;;:11;:19;;;;;;;;20156:20;:47;;;;-1:-1:-1;;;;;;20181:22:0;;;;;;:11;:22;;;;;;;;20180:23;20156:47;:119;;20269:6;20156:119;;;20219:34;20227:6;20235:9;20246:6;20219:7;:34::i;:::-;-1:-1:-1;;;;;20309:20:0;;;;;;:9;:20;;;;;;20134:141;;-1:-1:-1;20309:37:0;;20134:141;20309:24;:37::i;:::-;-1:-1:-1;;;;;20286:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;20393:24;;;;;:16;:24;;;;;;;20388:158;;20455:19;;-1:-1:-1;;;;;20492:17:0;;;20455:19;20492:17;;;:9;:17;;;;;;;;20455:55;;-1:-1:-1;;;20455:55:0;;;;;7972:51:1;;;;8039:18;;;8032:34;20455:19:0;;;:28;;7945:18:1;;20455:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20434:101;;-1:-1:-1;;;;;20563:27:0;;;;;;:16;:27;;;;;;;;20558:167;;20628:19;;-1:-1:-1;;;;;20668:20:0;;;20628:19;20668:20;;;:9;:20;;;;;;;;20628:61;;-1:-1:-1;;;20628:61:0;;;;;7972:51:1;;;;8039:18;;;8032:34;20628:19:0;;;:28;;7945:18:1;;20628:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20607:107;;20741:19;;20769:14;;20741:43;;-1:-1:-1;;;;;;20741:43:0;;-1:-1:-1;;;;;20741:19:0;;;;:27;;:43;;;;160:25:1;;;148:2;133:18;;14:177;20741:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20737:59;20830:9;-1:-1:-1;;;;;20813:40:0;20822:6;-1:-1:-1;;;;;20813:40:0;;20841:11;20813:40;;;;160:25:1;;148:2;133:18;;14:177;20813:40:0;;;;;;;;-1:-1:-1;20873:4:0;;19106:1779;-1:-1:-1;;;;19106:1779:0:o;2058:98::-;2116:7;2143:5;2147:1;2143;:5;:::i;13631:191::-;13705:16;13724:6;;-1:-1:-1;;;;;13741:17:0;;;-1:-1:-1;;;;;;13741:17:0;;;;;;13774:40;;13724:6;;;;;;;13774:40;;13705:16;13774:40;13694:128;13631:191;:::o;20893:401::-;21057:90;;;;;;;;;;;-1:-1:-1;;;21057:90:0;;;;;;;;-1:-1:-1;;;;;21057:17:0;;21020:4;21057:17;;;:9;:17;;;;;;;:90;;21093:6;;21057:21;:90::i;:::-;-1:-1:-1;;;;;21037:17:0;;;;;;;:9;:17;;;;;;:110;;;;21181:20;;;;;;;:32;;21206:6;21181:24;:32::i;:::-;-1:-1:-1;;;;;21158:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21229:35;;;;;;;;;;21257:6;160:25:1;;148:2;133:18;;14:177;21229:35:0;;;;;;;;-1:-1:-1;21282:4:0;20893:401;;;;;:::o;22160:1765::-;15452:16;:23;;-1:-1:-1;;15452:23:0;15471:4;15452:23;;;22256:4:::1;15452:16:::0;22238:24;;;:9:::1;:24;::::0;;;;;22365:8:::1;::::0;22333:12:::1;::::0;22238:24;;15452:16;22299:96:::1;::::0;22393:1:::1;::::0;22299:75:::1;::::0;22365:8;22299:75;;22238:24;;22299:33:::1;:47::i;:::-;:65:::0;::::1;:75::i;:96::-;22273:122:::0;-1:-1:-1;22406:20:0::1;22429:36;:15:::0;22273:122;22429:19:::1;:36::i;:::-;22502:16;::::0;;22516:1:::1;22502:16:::0;;;;;::::1;::::0;;22406:59;;-1:-1:-1;22478:21:0::1;::::0;22502:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22502:16:0::1;22478:40;;22547:4;22529;22534:1;22529:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22529:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22573:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;22573:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;22529:7;;22573:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22563:4;22568:1;22563:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22563:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22599:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;22599:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22671:12;;22599:6:::1;::::0;22714:4;;22741::::1;::::0;22761:15:::1;::::0;22599:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22889:12:0::1;::::0;22820:21:::1;::::0;-1:-1:-1;22800:17:0::1;::::0;-1:-1:-1;22876:33:0::1;::::0;22889:19:::1;::::0;22906:1:::1;22889:16;:19::i;:::-;22876:8;::::0;;:12:::1;:33::i;:::-;22854:55;;22922:26;22951:93;23042:1;22951:72;23011:11;22951:41;22979:12;;22951:9;:27;;:41;;;;:::i;:93::-;22922:122;;23055:27;23085:66;23129:11;23085:25;23099:10;;23085:9;:13;;:25;;;;:::i;:66::-;23055:96;;23162:26;23191:68;23237:11;23191:27;23205:12;;23191:9;:13;;:27;;;;:::i;:68::-;23162:97;;23289:19;;;;;;;;;-1:-1:-1::0;;;;;23289:19:0::1;-1:-1:-1::0;;;;;23289:27:0::1;;23324:19;23289:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;23409:15:0::1;::::0;23401:109:::1;::::0;23380:15:::1;::::0;-1:-1:-1;;;;;23409:15:0::1;::::0;23490:5:::1;::::0;23452:18;;23380:15;23401:109;23380:15;23401:109;23452:18;23409:15;23490:5;23401:109:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23536:5:0::1;::::0;-1:-1:-1;;23558:19:0;;;-1:-1:-1;23554:364:0::1;;23594:6;::::0;23768:21:::1;::::0;23594:244:::1;::::0;-1:-1:-1;;;23594:244:0;;23670:4:::1;23594:244;::::0;::::1;12307:34:1::0;12357:18;;;12350:34;;;23594:6:0::1;12400:18:1::0;;;12393:34;;;12443:18;;;12436:34;-1:-1:-1;;;;;23768:21:0;;::::1;12486:19:1::0;;;12479:44;23808:15:0::1;12539:19:1::0;;;12532:35;23594:6:0;::::1;::::0;:22:::1;::::0;23624:18;;12241:19:1;;23594:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23858:48:0::1;::::0;;9326:25:1;;;9382:2;9367:18;;9360:34;;;23858:48:0::1;::::0;-1:-1:-1;9299:18:1;23858:48:0::1;;;;;;;23554:364;-1:-1:-1::0;;15498:16:0;:24;;-1:-1:-1;;15498:24:0;;;-1:-1:-1;;;;;;;;22160:1765:0:o;21302:850::-;-1:-1:-1;;;;;21484:17:0;;21422:7;21484:17;;;:6;:17;;;;;;21422:7;;21484:17;;:32;;;;-1:-1:-1;21505:11:0;;;;;;;21484:32;21480:98;;;-1:-1:-1;21549:17:0;;21480:98;-1:-1:-1;;;;;21592:14:0;;;;;;:6;:14;;;;;;;;:28;;;;-1:-1:-1;21610:10:0;;;;21592:28;21588:85;;;-1:-1:-1;21653:8:0;;21588:85;-1:-1:-1;;;;;21688:14:0;;;;;;:6;:14;;;;;;;;21687:15;:37;;;;-1:-1:-1;;;;;;21707:17:0;;;;;;:6;:17;;;;;;;;21706:18;21687:37;21683:216;;;21745:15;;;;;;;21741:147;;;-1:-1:-1;21797:17:0;;21741:147;;;-1:-1:-1;21871:1:0;21741:147;21911:17;21931:35;21961:4;21931:25;:6;21942:13;21931:10;:25::i;:35::-;22024:4;22006:24;;;;:9;:24;;;;;;21911:55;;-1:-1:-1;22006:39:0;;21911:55;22006:28;:39::i;:::-;21997:4;21979:24;;;;:9;:24;;;;;;;:66;;;;22061:42;;-1:-1:-1;;;;;22061:42:0;;;;;;;22093:9;160:25:1;;148:2;133:18;;14:177;22061:42:0;;;;;;;;22123:21;:6;22134:9;22123:10;:21::i;:::-;22116:28;21302:850;-1:-1:-1;;;;;;21302:850:0:o;2270:98::-;2328:7;2355:5;2359:1;2355;:5;:::i;2376:98::-;2434:7;2461:5;2465:1;2461;:5;:::i;2164:98::-;2222:7;2249:5;2253:1;2249;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:118::-;1483:5;1476:13;1469:21;1462:5;1459:32;1449:60;;1505:1;1502;1495:12;1520:241;1576:6;1629:2;1617:9;1608:7;1604:23;1600:32;1597:52;;;1645:1;1642;1635:12;1597:52;1684:9;1671:23;1703:28;1725:5;1703:28;:::i;1766:388::-;1834:6;1842;1895:2;1883:9;1874:7;1870:23;1866:32;1863:52;;;1911:1;1908;1901:12;1863:52;1950:9;1937:23;1969:31;1994:5;1969:31;:::i;:::-;2019:5;-1:-1:-1;2076:2:1;2061:18;;2048:32;2089:33;2048:32;2089:33;:::i;:::-;2141:7;2131:17;;;1766:388;;;;;:::o;2159:456::-;2236:6;2244;2252;2305:2;2293:9;2284:7;2280:23;2276:32;2273:52;;;2321:1;2318;2311:12;2273:52;2360:9;2347:23;2379:31;2404:5;2379:31;:::i;:::-;2429:5;-1:-1:-1;2486:2:1;2471:18;;2458:32;2499:33;2458:32;2499:33;:::i;:::-;2159:456;;2551:7;;-1:-1:-1;;;2605:2:1;2590:18;;;;2577:32;;2159:456::o;2620:247::-;2679:6;2732:2;2720:9;2711:7;2707:23;2703:32;2700:52;;;2748:1;2745;2738:12;2700:52;2787:9;2774:23;2806:31;2831:5;2806:31;:::i;3061:444::-;3132:6;3140;3148;3201:2;3189:9;3180:7;3176:23;3172:32;3169:52;;;3217:1;3214;3207:12;3169:52;3256:9;3243:23;3275:28;3297:5;3275:28;:::i;:::-;3322:5;-1:-1:-1;3374:2:1;3359:18;;3346:32;;-1:-1:-1;3430:2:1;3415:18;;3402:32;3443:30;3402:32;3443:30;:::i;:::-;3492:7;3482:17;;;3061:444;;;;;:::o;3510:382::-;3575:6;3583;3636:2;3624:9;3615:7;3611:23;3607:32;3604:52;;;3652:1;3649;3642:12;3604:52;3691:9;3678:23;3710:31;3735:5;3710:31;:::i;:::-;3760:5;-1:-1:-1;3817:2:1;3802:18;;3789:32;3830:30;3789:32;3830:30;:::i;3897:180::-;3956:6;4009:2;3997:9;3988:7;3984:23;3980:32;3977:52;;;4025:1;4022;4015:12;3977:52;-1:-1:-1;4048:23:1;;3897:180;-1:-1:-1;3897:180:1:o;4082:385::-;4168:6;4176;4184;4192;4245:3;4233:9;4224:7;4220:23;4216:33;4213:53;;;4262:1;4259;4252:12;4213:53;-1:-1:-1;;4285:23:1;;;4355:2;4340:18;;4327:32;;-1:-1:-1;4406:2:1;4391:18;;4378:32;;4457:2;4442:18;4429:32;;-1:-1:-1;4082:385:1;-1:-1:-1;4082:385:1:o;4680:248::-;4748:6;4756;4809:2;4797:9;4788:7;4784:23;4780:32;4777:52;;;4825:1;4822;4815:12;4777:52;-1:-1:-1;;4848:23:1;;;4918:2;4903:18;;;4890:32;;-1:-1:-1;4680:248:1:o;5395:356::-;5597:2;5579:21;;;5616:18;;;5609:30;5675:34;5670:2;5655:18;;5648:62;5742:2;5727:18;;5395:356::o;5756:127::-;5817:10;5812:3;5808:20;5805:1;5798:31;5848:4;5845:1;5838:15;5872:4;5869:1;5862:15;5888:168;5961:9;;;5992;;6009:15;;;6003:22;;5989:37;5979:71;;6030:18;;:::i;6061:217::-;6101:1;6127;6117:132;;6171:10;6166:3;6162:20;6159:1;6152:31;6206:4;6203:1;6196:15;6234:4;6231:1;6224:15;6117:132;-1:-1:-1;6263:9:1;;6061:217::o;6283:251::-;6353:6;6406:2;6394:9;6385:7;6381:23;6377:32;6374:52;;;6422:1;6419;6412:12;6374:52;6454:9;6448:16;6473:31;6498:5;6473:31;:::i;6848:402::-;7050:2;7032:21;;;7089:2;7069:18;;;7062:30;7128:34;7123:2;7108:18;;7101:62;-1:-1:-1;;;7194:2:1;7179:18;;7172:36;7240:3;7225:19;;6848:402::o;7255:125::-;7320:9;;;7341:10;;;7338:36;;;7354:18;;:::i;8713:245::-;8780:6;8833:2;8821:9;8812:7;8808:23;8804:32;8801:52;;;8849:1;8846;8839:12;8801:52;8881:9;8875:16;8900:28;8922:5;8900:28;:::i;8963:184::-;9033:6;9086:2;9074:9;9065:7;9061:23;9057:32;9054:52;;;9102:1;9099;9092:12;9054:52;-1:-1:-1;9125:16:1;;8963:184;-1:-1:-1;8963:184:1:o;10639:127::-;10700:10;10695:3;10691:20;10688:1;10681:31;10731:4;10728:1;10721:15;10755:4;10752:1;10745:15;10771:980;11033:4;11081:3;11070:9;11066:19;11112:6;11101:9;11094:25;11138:2;11176:6;11171:2;11160:9;11156:18;11149:34;11219:3;11214:2;11203:9;11199:18;11192:31;11243:6;11278;11272:13;11309:6;11301;11294:22;11347:3;11336:9;11332:19;11325:26;;11386:2;11378:6;11374:15;11360:29;;11407:1;11417:195;11431:6;11428:1;11425:13;11417:195;;;11496:13;;-1:-1:-1;;;;;11492:39:1;11480:52;;11587:15;;;;11552:12;;;;11528:1;11446:9;11417:195;;;-1:-1:-1;;;;;;;11668:32:1;;;;11663:2;11648:18;;11641:60;-1:-1:-1;;;11732:3:1;11717:19;11710:35;11629:3;10771:980;-1:-1:-1;;;10771:980:1:o;12578:306::-;12666:6;12674;12682;12735:2;12723:9;12714:7;12710:23;12706:32;12703:52;;;12751:1;12748;12741:12;12703:52;12780:9;12774:16;12764:26;;12830:2;12819:9;12815:18;12809:25;12799:35;;12874:2;12863:9;12859:18;12853:25;12843:35;;12578:306;;;;;:::o;12889:128::-;12956:9;;;12977:11;;;12974:37;;;12991:18;;:::i

Swarm Source

ipfs://82ea1c9d4983e456552fa840a11f1af965f6493022c915d30f64e558e1c1dcde

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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