ETH Price: $3,323.32 (+1.60%)
 

Overview

ETH Balance

0.000041678255512874 ETH

Eth Value

$0.14 (@ $3,323.32/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve192531912024-02-18 7:25:11348 days ago1708241111IN
0x51749Fcd...5BfCCf860
0 ETH0.0005572722.9377619
Approve181662182023-09-18 23:52:47501 days ago1695081167IN
0x51749Fcd...5BfCCf860
0 ETH0.00041598.98932311
Rescue Eth180488112023-09-02 12:24:35517 days ago1693657475IN
0x51749Fcd...5BfCCf860
0 ETH0.0004092313.31003005
Transfer179442462023-08-18 21:06:47532 days ago1692392807IN
0x51749Fcd...5BfCCf860
0 ETH0.006994719.84244629
Choose Reward178608232023-08-07 4:57:59543 days ago1691384279IN
0x51749Fcd...5BfCCf860
0 ETH0.0002940312.15917411
Rescue Eth178607802023-08-07 4:49:23543 days ago1691383763IN
0x51749Fcd...5BfCCf860
0 ETH0.0003756712.19472964
Rescue Eth178607732023-08-07 4:47:59543 days ago1691383679IN
0x51749Fcd...5BfCCf860
0 ETH0.0003656511.8789927
Approve178552922023-08-06 10:22:35544 days ago1691317355IN
0x51749Fcd...5BfCCf860
0 ETH0.0006428913.82005349
Approve178515692023-08-05 21:51:23545 days ago1691272283IN
0x51749Fcd...5BfCCf860
0 ETH0.0006025112.95207045
Approve178514512023-08-05 21:27:47545 days ago1691270867IN
0x51749Fcd...5BfCCf860
0 ETH0.0003900913.26002508
Approve178514462023-08-05 21:26:47545 days ago1691270807IN
0x51749Fcd...5BfCCf860
0 ETH0.0006500914.05828831
Approve178479672023-08-05 9:46:47545 days ago1691228807IN
0x51749Fcd...5BfCCf860
0 ETH0.0006249613.43459667
Approve178444122023-08-04 21:51:23546 days ago1691185883IN
0x51749Fcd...5BfCCf860
0 ETH0.0007148715.34760983
Transfer178334532023-08-03 9:03:11547 days ago1691053391IN
0x51749Fcd...5BfCCf860
0 ETH0.0049347417.63057891
Approve178318512023-08-03 3:40:47547 days ago1691034047IN
0x51749Fcd...5BfCCf860
0 ETH0.0004513115.48633305
Approve178244952023-08-02 3:01:35548 days ago1690945295IN
0x51749Fcd...5BfCCf860
0 ETH0.0009018319.38642299
Claim Custom178179522023-08-01 5:06:23549 days ago1690866383IN
0x51749Fcd...5BfCCf860
0 ETH0.0041059513.48983909
Approve178177502023-08-01 4:25:11549 days ago1690863911IN
0x51749Fcd...5BfCCf860
0 ETH0.0007773216.7097339
Claim Half ETH178166482023-08-01 0:43:11550 days ago1690850591IN
0x51749Fcd...5BfCCf860
0 ETH0.0041680221.57385484
Approve178159362023-07-31 22:20:11550 days ago1690842011IN
0x51749Fcd...5BfCCf860
0 ETH0.0012396326.64786893
Approve177903992023-07-28 8:35:35553 days ago1690533335IN
0x51749Fcd...5BfCCf860
0 ETH0.0013729929.68306975
Transfer177816582023-07-27 3:14:11554 days ago1690427651IN
0x51749Fcd...5BfCCf860
0 ETH0.0021453522.50471995
Transfer177816442023-07-27 3:11:23554 days ago1690427483IN
0x51749Fcd...5BfCCf860
0 ETH0.0080852721.90080952
Approve177812242023-07-27 1:47:11554 days ago1690422431IN
0x51749Fcd...5BfCCf860
0 ETH0.000903219.39584101
Claim Half ETH177810992023-07-27 1:21:59555 days ago1690420919IN
0x51749Fcd...5BfCCf860
0 ETH0.0008263526.44508123
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
180488112023-09-02 12:24:35517 days ago1693657475
0x51749Fcd...5BfCCf860
0.23 ETH
179442462023-08-18 21:06:47532 days ago1692392807
0x51749Fcd...5BfCCf860
0.00162221 ETH
179442462023-08-18 21:06:47532 days ago1692392807
0x51749Fcd...5BfCCf860
0.00162221 ETH
178595582023-08-07 0:43:35544 days ago1691369015
0x51749Fcd...5BfCCf860
0.00030578 ETH
178595582023-08-07 0:43:35544 days ago1691369015
0x51749Fcd...5BfCCf860
0.00091735 ETH
178584852023-08-06 21:06:11544 days ago1691355971
0x51749Fcd...5BfCCf860
0.00063154 ETH
178584852023-08-06 21:06:11544 days ago1691355971
0x51749Fcd...5BfCCf860
0.00189463 ETH
178560212023-08-06 12:48:59544 days ago1691326139
0x51749Fcd...5BfCCf860
0.00117038 ETH
178560212023-08-06 12:48:59544 days ago1691326139
0x51749Fcd...5BfCCf860
0.00351114 ETH
178552982023-08-06 10:23:59544 days ago1691317439
0x51749Fcd...5BfCCf860
0.00082714 ETH
178552982023-08-06 10:23:59544 days ago1691317439
0x51749Fcd...5BfCCf860
0.00082714 ETH
178552982023-08-06 10:23:59544 days ago1691317439
0x51749Fcd...5BfCCf860
0.00044336 ETH
178552982023-08-06 10:23:59544 days ago1691317439
0x51749Fcd...5BfCCf860
0.00133009 ETH
178552922023-08-06 10:22:35544 days ago1691317355
0x51749Fcd...5BfCCf860
0.00082714 ETH
178552922023-08-06 10:22:35544 days ago1691317355
0x51749Fcd...5BfCCf860
0.00082714 ETH
178552922023-08-06 10:22:35544 days ago1691317355
0x51749Fcd...5BfCCf860
0.00044336 ETH
178552922023-08-06 10:22:35544 days ago1691317355
0x51749Fcd...5BfCCf860
0.00133009 ETH
178514652023-08-05 21:30:35545 days ago1691271035
0x51749Fcd...5BfCCf860
0.00117098 ETH
178514652023-08-05 21:30:35545 days ago1691271035
0x51749Fcd...5BfCCf860
0.00117098 ETH
178514652023-08-05 21:30:35545 days ago1691271035
0x51749Fcd...5BfCCf860
0.00055942 ETH
178514652023-08-05 21:30:35545 days ago1691271035
0x51749Fcd...5BfCCf860
0.00167828 ETH
178490042023-08-05 13:15:59545 days ago1691241359
0x51749Fcd...5BfCCf860
0.00038261 ETH
178490042023-08-05 13:15:59545 days ago1691241359
0x51749Fcd...5BfCCf860
0.00114785 ETH
178489402023-08-05 13:03:11545 days ago1691240591
0x51749Fcd...5BfCCf860
0.00039281 ETH
178489402023-08-05 13:03:11545 days ago1691240591
0x51749Fcd...5BfCCf860
0.00117845 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AutoDoubleRewards

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-06
*/

/*
 * Https://t.me/ethyleneerc
 *
 * 
 * SPDX-License-Identifier: None
 */

pragma solidity 0.8.19;

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 IDEXPair {function sync() external;}

interface IDEXRouter {
    function factory() external pure returns (address);    
    function WETH() external pure returns (address);
    function addLiquidityETH(address token,uint amountTokenDesired,uint amountTokenMin,uint amountETHMin,address to,uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
    
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn,uint amountOutMin,address[] calldata path,address to,uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable;
}

contract AutoDoubleRewards is IERC20 {
    string private _name;
    string private _symbol;
    uint8 constant _decimals = 18;
    uint256 _totalSupply;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public limitless;
    mapping(address => bool) public ai;
    mapping(address => bool) public isExludedFromMaxWallet;
    mapping(address => address) public chosenReward;

    bool public renounced = false;

    uint256 public tax;
    uint256 public rewards = 1;
    uint256 public liq = 10;
    uint256 public marketing = 4;
    uint256 private swapAt = _totalSupply / 10_000;
    uint256 public maxWalletInPermille = 25;
    uint256 private maxTx = 100;
    uint256 public maxRewardsPerTx = 5;

    uint256 public sellMultiplier = 200;
    uint256 public sellDivisor = 100;

    address public ceo;
    address public router;
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public immutable WETH;
    address public mainReward;
    address public marketingWallet;

    address public immutable pair;
    address[] public pairs;

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

    mapping (address => uint256) public shareholderIndexes;
    mapping (address => uint256) public lastClaim;
    mapping (address => Share) public shares;
    mapping (address => bool) public addressNotGettingRewards;

    uint256 public totalShares;
    uint256 public totalDistributed;
    uint256 public rewardsPerShare;
    uint256 private veryLargeNumber = 10 ** 36;
    uint256 private rewardTokenBalanceBefore;
    uint256 private currentHolder;

    address[] private shareholders;

    modifier onlyCEO(){
        require (msg.sender == ceo, "Only the ceo can do that");
        _;
    }

    constructor(string memory name_, string memory symbol_, uint256 totalSupply_, address marketing_, address rewardsAddress, address router_, address weth_, uint256 maxWalletInPermille_) payable {
        require(msg.value >= 0.005 ether, "Need 0.005 ETH to test the new reward");
        ceo = msg.sender;
        _name = name_;
        _symbol = symbol_;
        _totalSupply = totalSupply_ * (10**_decimals);
        marketingWallet = marketing_;
        router = router_;
        maxWalletInPermille = maxWalletInPermille_;
        WETH = weth_;

        pair = IDEXFactory(IDEXRouter(router).factory()).createPair(WETH, address(this));
        _allowances[address(this)][router] = type(uint256).max;
        _allowances[ceo][router] = type(uint256).max;
        isExludedFromMaxWallet[pair] = true;
        isExludedFromMaxWallet[address(this)] = true;
        pairs.push(pair);

        addressNotGettingRewards[pair] = true;
        addressNotGettingRewards[address(this)] = true;

        limitless[ceo] = true;
        limitless[address(this)] = true;
        tax = rewards + liq + marketing;

        _balances[ceo] = _totalSupply;
        emit Transfer(address(0), ceo, _totalSupply);        

        mainReward = rewardsAddress;
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = mainReward;

        IDEXRouter(router).swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            ceo,
            block.timestamp
        );
    }

    receive() external payable {}
    function name() public view override returns (string memory) {return _name;}
    function totalSupply() public view override returns (uint256) {return _totalSupply - _balances[DEAD];}
    function decimals() public pure override returns (uint8) {return _decimals;}
    function symbol() public view override returns (string memory) {return _symbol;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function rescueEth(uint256 amount) external onlyCEO {(bool success,) = address(ceo).call{value: amount}("");success = true;}
    function rescueToken(address token, uint256 amount) external onlyCEO {IERC20(token).transfer(ceo, amount);}
    function allowance(address holder, address spender) public view override returns (uint256) {return _allowances[holder][spender];}
    function transfer(address recipient, uint256 amount) external override returns (bool) {return _transferFrom(msg.sender, recipient, amount);}
    function approveMax(address spender) external returns (bool) {return approve(spender, type(uint256).max);}
    
    function approve(address spender, uint256 amount) public override returns (bool) {
        require(spender != address(0), "Can't use zero address here");
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        require(spender != address(0), "Can't use zero address here");
        _allowances[msg.sender][spender]  = allowance(msg.sender, spender) + addedValue;
        emit Approval(msg.sender, spender, _allowances[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        require(spender != address(0), "Can't use zero address here");
        require(allowance(msg.sender, spender) >= subtractedValue, "Can't subtract more than current allowance");
        _allowances[msg.sender][spender]  = allowance(msg.sender, spender) - subtractedValue;
        emit Approval(msg.sender, spender, _allowances[msg.sender][spender]);
        return true;
    }

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

    function setTaxes(uint256 rewardsTax, uint256 liqTax, uint256 marketingTax, uint256 newSellMultiplier, uint256 newSellDivisor) external onlyCEO {
        if(renounced) require(rewardsTax + liqTax + marketingTax <= tax , "Once renounced, taxes can only be lowered");
        rewards = rewardsTax;
        liq = liqTax;
        marketing = marketingTax;
        tax = rewards + liq + marketing;
        sellMultiplier = newSellMultiplier;
        sellDivisor = newSellDivisor;
        require(tax * sellMultiplier / sellDivisor < 100, "Tax safety limit");     
    }
    
    function setMaxWalletInPermille(uint256 permille) external onlyCEO {
        if(renounced) {
            maxWalletInPermille = 1000;
            return;
        }
        maxWalletInPermille = permille;
        require(maxWalletInPermille >= 10, "MaxWallet safety limit");
    }

    function setMaxTxInPercentOfMaxWallet(uint256 percent) external onlyCEO {
        if(renounced) {maxTx = 100; return;}
        maxTx = percent;
        require(maxTx >= 75, "MaxTx safety limit");
    }
    
    function setNameAndSymbol(string memory newName, string memory newSymbol) external onlyCEO {
        _name = newName;
        _symbol = newSymbol;
    }

    function setMaxRewardsPerTx(uint256 howMany) external onlyCEO {
        maxRewardsPerTx = howMany;
    }    
    
    function setLimitlessWallet(address limitlessWallet, bool status) external onlyCEO {
        if(renounced) return;
        isExludedFromMaxWallet[limitlessWallet] = status;
        addressNotGettingRewards[limitlessWallet] = status;
        limitless[limitlessWallet] = status;
    }

    function excludeFromRewards(address excludedWallet, bool status) external onlyCEO {
        addressNotGettingRewards[excludedWallet] = status;
    }
    
    function changeMarketingWallet(address newMarketingWallet) external onlyCEO {
        marketingWallet = newMarketingWallet;
    }    
    
    function changeMainRewards(address newRewards) external payable onlyCEO {
        require(msg.value >= 0.005 ether, "Need 0.005 ETH to test the new reward");
        mainReward = newRewards;
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = mainReward;

        IDEXRouter(router).swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            ceo,
            block.timestamp
        );
    }

    function excludeFromMax(address excludedWallet, bool status) external onlyCEO {
        isExludedFromMaxWallet[excludedWallet] = status;
    }    

    function setAi(address aiWallet, bool status) external onlyCEO {
        ai[aiWallet] = status;
    }    

    function renounceOnwrship() external onlyCEO {
        if(renounced) return;
        renounced = true;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if (limitless[sender] || limitless[recipient])  _lowGasTransfer(sender, recipient, amount);
        else {
            amount = takeTax(sender, recipient, amount);
            _lowGasTransfer(sender, recipient, amount);
            if(maxRewardsPerTx > 0) payRewards(maxRewardsPerTx);
        }
        if(!addressNotGettingRewards[sender]) setShare(sender);
        if(!addressNotGettingRewards[recipient]) setShare(recipient);
        return true;
    }

    function takeTax(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(maxWalletInPermille <= 1000) {    
            if(!isExludedFromMaxWallet[recipient]) require(_balances[recipient] + amount <= _totalSupply * maxWalletInPermille / 1000, "MaxWallet");
            if(!isExludedFromMaxWallet[sender]) require(amount <= _totalSupply * maxWalletInPermille * maxTx / 1000 / 100, "MaxTx");
        }

        if(ai[sender] || ai[recipient]) {
            require(amount <= _totalSupply / 200, "MaxTxAi");
            uint256 aiTax = amount * 75 / 100;
            if(isPair(recipient)) _lowGasTransfer(sender, recipient, aiTax);
            else if(isPair(sender)) _lowGasTransfer(sender, sender, aiTax);
            else _lowGasTransfer(sender, pair, aiTax);
            return amount * 75 / 100;           
        } else if(!isPair(sender) && !isPair(recipient)) return amount;

        if(tax == 0) return amount;
        uint256 taxToSwap = isPair(recipient) ? amount * (rewards + marketing) * sellMultiplier / sellDivisor / 100 : amount * (rewards + marketing) / 100;
        if(taxToSwap > 0) _lowGasTransfer(sender, address(this), taxToSwap);
        
        if(liq > 0) {
            uint256 liqTax = amount * liq / 100;
            if(isPair(recipient)) _lowGasTransfer(sender, recipient, liqTax * sellMultiplier / sellDivisor);
            else _lowGasTransfer(sender, pair, liqTax);
        }

        if(!isPair(sender)) {
            swapForRewards();
            IDEXPair(pair).sync();
        }
        return isPair(recipient) ? amount - (amount * tax * sellMultiplier / sellDivisor / 100) : amount - (amount * tax / 100);
    }

    function _lowGasTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "Can't use zero addresses here");
        require(amount <= _balances[sender], "Can't transfer more than you own");
        if(amount == 0) return true;
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapForRewards() internal {
        if(_balances[address(this)] < swapAt || rewards + marketing == 0) return;
        rewardTokenBalanceBefore = address(this).balance;

        address[] memory pathForSelling = new address[](2);
        pathForSelling[0] = address(this);
        pathForSelling[1] = WETH;

        IDEXRouter(router).swapExactTokensForETHSupportingFeeOnTransferTokens(
            _balances[address(this)],
            0,
            pathForSelling,
            address(this),
            block.timestamp
        );

        uint256 newRewardTokenBalance = address(this).balance;
        if(newRewardTokenBalance <= rewardTokenBalanceBefore) return;
        uint256 amount = newRewardTokenBalance - rewardTokenBalanceBefore;
        if(totalShares > 0){
            if(rewards + marketing > 0){
                uint256 marketingShare = amount * marketing / (rewards + marketing);
                (bool success,) = address(marketingWallet).call{value: marketingShare}("");
                rewardsPerShare += success ? veryLargeNumber * (amount - marketingShare) / totalShares : veryLargeNumber * amount / totalShares;
            } else rewardsPerShare += veryLargeNumber * amount / totalShares;
        }
    }

    function setShare(address shareholder) internal {
        if(shares[shareholder].amount > 0) sendRewards(shareholder);
        if(shares[shareholder].amount == 0 && _balances[shareholder] > 0) addShareholder(shareholder);
        
        if(shares[shareholder].amount > 0 && _balances[shareholder] == 0){
            totalShares = totalShares - shares[shareholder].amount;
            shares[shareholder].amount = 0;
            removeShareholder(shareholder);
            return;
        }

        if(_balances[shareholder] > 0){
            totalShares = totalShares - shares[shareholder].amount + _balances[shareholder];
            shares[shareholder].amount = _balances[shareholder];
            shares[shareholder].totalExcluded = getTotalRewardsOf(shares[shareholder].amount);
        }
    }

    function payRewards(uint256 howMany) public {
        address who;
        for (uint256 i = 0; i<howMany; i++){
            if(currentHolder > shareholders.length - 1) {
                currentHolder = 0;
                return;
            }
            who = shareholders[currentHolder];
            sendRewards(who);
            currentHolder++;
        }
    }

    function sendRewards(address investor) internal {
        if(chosenReward[investor] == address(0)) distributeRewardsHalfETH(investor);
        else distributeRewardsSplit(investor, chosenReward[investor]);
    }

    function claimHalfETH() external {if(getUnpaidEarnings(msg.sender) > 0) distributeRewardsHalfETH(msg.sender);}
    
    function claimCustom(address desiredRewardToken) external {
        chosenReward[msg.sender] = desiredRewardToken;
        if(getUnpaidEarnings(msg.sender) > 0) distributeRewardsSplit(msg.sender, desiredRewardToken);
    }

    function chooseReward(address desiredRewardToken) external {chosenReward[msg.sender] = desiredRewardToken;}

    function distributeRewardsHalfETH(address shareholder) internal {
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount < 0.001 ether) return;
        payable(shareholder).transfer(amount/2);
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = mainReward;

        IDEXRouter(router).swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount / 2}(
            0,
            path,
            shareholder,
            block.timestamp
        );

        totalDistributed = totalDistributed + amount;
        shares[shareholder].totalRealised = shares[shareholder].totalRealised + amount;
        shares[shareholder].totalExcluded = getTotalRewardsOf(shares[shareholder].amount);
    }

    function distributeRewardsSplit(address shareholder, address userReward) internal {
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount < 0.001 ether) return;

        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = mainReward;

        IDEXRouter(router).swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount / 2}(
            0,
            path,
            shareholder,
            block.timestamp
        );

        path[1] = userReward;
        
        try IDEXRouter(router).swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount / 2}(
                0,
                path,
                shareholder,
                block.timestamp
            )
        {} catch {
            (bool success,) = address(ceo).call{value: amount}("");
            if(success) chosenReward[shareholder] = address(0);
        }

        totalDistributed = totalDistributed + amount;
        shares[shareholder].totalRealised = shares[shareholder].totalRealised + amount;
        shares[shareholder].totalExcluded = getTotalRewardsOf(shares[shareholder].amount);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        uint256 shareholderTotalRewards = getTotalRewardsOf(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalRewards <= shareholderTotalExcluded) return 0;
        return shareholderTotalRewards - shareholderTotalExcluded;
    }

    function getTotalRewardsOf(uint256 share) internal view returns (uint256) {
        return share * rewardsPerShare / veryLargeNumber;
    }
   
    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();
    }

    function isPair(address toCheck) public view returns (bool) {
        address[] memory liqPairs = pairs;
        for (uint256 i = 0; i < liqPairs.length; i++) if (toCheck == liqPairs[i]) return true;
        return false;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"address","name":"marketing_","type":"address"},{"internalType":"address","name":"rewardsAddress","type":"address"},{"internalType":"address","name":"router_","type":"address"},{"internalType":"address","name":"weth_","type":"address"},{"internalType":"uint256","name":"maxWalletInPermille_","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressNotGettingRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ai","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ceo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRewards","type":"address"}],"name":"changeMainRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"desiredRewardToken","type":"address"}],"name":"chooseReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"chosenReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"desiredRewardToken","type":"address"}],"name":"claimCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimHalfETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"excludedWallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFromMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"excludedWallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"limitless","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","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":"maxRewardsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletInPermille","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"howMany","type":"uint256"}],"name":"payRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOnwrship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aiWallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"limitlessWallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setLimitlessWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"howMany","type":"uint256"}],"name":"setMaxRewardsPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxTxInPercentOfMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"permille","type":"uint256"}],"name":"setMaxWalletInPermille","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"},{"internalType":"string","name":"newSymbol","type":"string"}],"name":"setNameAndSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardsTax","type":"uint256"},{"internalType":"uint256","name":"liqTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"newSellMultiplier","type":"uint256"},{"internalType":"uint256","name":"newSellDivisor","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shareholderIndexes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"stateMutability":"payable","type":"receive"}]

60c06040526009805460ff191690556001600b55600a600c556004600d556002546200002f9061271090620004f7565b600e556019600f556064601055600560115560c860125560646013556ec097ce7bc90715b34b9f100000000060205560405162003c6e38038062003c6e8339810160408190526200008091620005fc565b6611c37937e08000341015620000ea5760405162461bcd60e51b815260206004820152602560248201527f4e65656420302e3030352045544820746f207465737420746865206e65772072604482015264195dd85c9960da1b606482015260840160405180910390fd5b601480546001600160a01b0319163317905560006200010a898262000753565b50600162000119888262000753565b50620001286012600a6200091e565b62000134908762000936565b600255601780546001600160a01b038088166001600160a01b03199283161790925560158054868416921682179055600f8390559083166080526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d0919062000950565b6080516040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000222573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000248919062000950565b6001600160a01b0390811660a0819052306000818152600460208181526040808420601580548916865290835281852060001990819055601480548a16875294845282862091548916865290835281852055858452600782528084208054600160ff1991821681179092558686528286208054821683179055601880548084019091557fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b03191689179055968552601c835281852080548816821790558585528185208054881682179055925490961683526005905284822080548516821790559181529290922080549091169091179055600d54600c54600b546200035991906200096e565b6200036591906200096e565b600a55600254601480546001600160a01b03908116600090815260036020908152604080832086905593549351948552929091169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601680546001600160a01b0319166001600160a01b038616179055604080516002808252606082018352600092602083019080368337019050509050608051816000815181106200041c576200041c62000984565b6001600160a01b03928316602091820292909201015260165482519116908290600190811062000450576200045062000984565b6001600160a01b03928316602091820292909201015260155460145460405163b6f9de9560e01b81529183169263b6f9de959234926200049e9260009288929091169042906004016200099a565b6000604051808303818588803b158015620004b857600080fd5b505af1158015620004cd573d6000803e3d6000fd5b505050505050505050505050505062000a06565b634e487b7160e01b600052601160045260246000fd5b6000826200051557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200054257600080fd5b81516001600160401b03808211156200055f576200055f6200051a565b604051601f8301601f19908116603f011681019082821181831017156200058a576200058a6200051a565b81604052838152602092508683858801011115620005a757600080fd5b600091505b83821015620005cb5785820183015181830184015290820190620005ac565b600093810190920192909252949350505050565b80516001600160a01b0381168114620005f757600080fd5b919050565b600080600080600080600080610100898b0312156200061a57600080fd5b88516001600160401b03808211156200063257600080fd5b620006408c838d0162000530565b995060208b01519150808211156200065757600080fd5b50620006668b828c0162000530565b975050604089015195506200067e60608a01620005df565b94506200068e60808a01620005df565b93506200069e60a08a01620005df565b9250620006ae60c08a01620005df565b915060e089015190509295985092959890939650565b600181811c90821680620006d957607f821691505b602082108103620006fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200074e57600081815260208120601f850160051c81016020861015620007295750805b601f850160051c820191505b818110156200074a5782815560010162000735565b5050505b505050565b81516001600160401b038111156200076f576200076f6200051a565b6200078781620007808454620006c4565b8462000700565b602080601f831160018114620007bf5760008415620007a65750858301515b600019600386901b1c1916600185901b1785556200074a565b600085815260208120601f198616915b82811015620007f057888601518255948401946001909101908401620007cf565b50858210156200080f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b8085111562000860578160001904821115620008445762000844620004e1565b808516156200085257918102915b93841c939080029062000824565b509250929050565b600082620008795750600162000918565b81620008885750600062000918565b8160018114620008a15760028114620008ac57620008cc565b600191505062000918565b60ff841115620008c057620008c0620004e1565b50506001821b62000918565b5060208310610133831016604e8410600b8410161715620008f1575081810a62000918565b620008fd83836200081f565b8060001904821115620009145762000914620004e1565b0290505b92915050565b60006200092f60ff84168362000868565b9392505050565b8082028115828204841417620009185762000918620004e1565b6000602082840312156200096357600080fd5b6200092f82620005df565b80820180821115620009185762000918620004e1565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015620009e65784516001600160a01b031683529383019391830191600101620009bf565b50506001600160a01b039690961660408501525050506060015292915050565b60805160a05161321162000a5d6000396000818161089901528181612375015281816124e801526125280152600081816108ed015281816117c801528181611a2301528181611e6f01526128a401526132116000f3fe60806040526004361061039b5760003560e01c806395d89b41116101dc578063c380901711610102578063d83062b4116100a0578063efca2eed1161006f578063efca2eed14610b58578063f887ea4014610b6e578063faba8c3b14610b8e578063fed0d2a114610ba457600080fd5b8063d83062b414610ae2578063dd62ed3e14610b02578063e5e31b1314610b22578063e70d9a6f14610b4257600080fd5b8063ce7c2ac2116100dc578063ce7c2ac214610a2f578063d232c22014610a86578063d4fda1f214610aa0578063d826a9e514610acd57600080fd5b8063c3809017146109f0578063c7e1d0b114610a06578063c886f71614610a1c57600080fd5b8063ad5c46481161017a578063b91ac78811610149578063b91ac7881461097a578063bb2aec771461099a578063bb85c6d1146109ba578063c0c0de93146109da57600080fd5b8063ad5c4648146108db578063ae4d00601461090f578063b243051514610924578063b5bfbaa01461095a57600080fd5b80639ec5a894116101b65780639ec5a89414610851578063a457c2d714610867578063a8aa1b3114610887578063a9059cbb146108bb57600080fd5b806395d89b411461080657806399c8d5561461081b57806399dde4591461083157600080fd5b80633a98ef39116102c157806369ec9df31161025f578063769eaa681161022e578063769eaa68146107765780638673208714610796578063908921fc146107c657806394e04ba9146107e657600080fd5b806369ec9df3146106d057806370a0823114610700578063739f08c81461073657806375f0a8741461075657600080fd5b80635a4462151161029b5780635a446215146106435780635c16e15e146106635780635fcefa421461069057806360e3a0ac146106b057600080fd5b80633a98ef39146105dd5780633bda28b5146105f3578063571ac8b01461062357600080fd5b806328fd319811610339578063313ce56711610308578063313ce5671461055157806333f3d6281461056d57806334d635d21461058d57806339509351146105bd57600080fd5b806328fd3198146104b15780632ad4cab7146104d15780632d3e474a146104f15780632f5caeb61461050757600080fd5b806318160ddd1161037557806318160ddd1461042c5780631ed6760b1461044f57806323b872dd14610471578063249ec2bb1461049157600080fd5b806303fd2a45146103a757806306fdde03146103da578063095ea7b3146103fc57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103ef610bba565b6040516103d19190612bdb565b34801561040857600080fd5b5061041c610417366004612c45565b610c4c565b60405190151581526020016103d1565b34801561043857600080fd5b50610441610ce3565b6040519081526020016103d1565b34801561045b57600080fd5b5061046f61046a366004612c6f565b610d24565b005b34801561047d57600080fd5b5061041c61048c366004612c8a565b610d69565b34801561049d57600080fd5b5061046f6104ac366004612cd4565b610ea9565b3480156104bd57600080fd5b506104416104cc366004612c6f565b610efe565b3480156104dd57600080fd5b5061046f6104ec366004612cd4565b610f64565b3480156104fd57600080fd5b50610441600d5481565b34801561051357600080fd5b5061046f610522366004612c6f565b33600090815260086020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b34801561055d57600080fd5b50604051601281526020016103d1565b34801561057957600080fd5b5061046f610588366004612c45565b610fb9565b34801561059957600080fd5b5061041c6105a8366004612c6f565b60056020526000908152604090205460ff1681565b3480156105c957600080fd5b5061041c6105d8366004612c45565b61105f565b3480156105e957600080fd5b50610441601d5481565b3480156105ff57600080fd5b5061041c61060e366004612c6f565b601c6020526000908152604090205460ff1681565b34801561062f57600080fd5b5061041c61063e366004612c6f565b6110f3565b34801561064f57600080fd5b5061046f61065e366004612dae565b611101565b34801561066f57600080fd5b5061044161067e366004612c6f565b601a6020526000908152604090205481565b34801561069c57600080fd5b5061046f6106ab366004612e12565b611144565b3480156106bc57600080fd5b5061046f6106cb366004612e4d565b611285565b3480156106dc57600080fd5b5061041c6106eb366004612c6f565b60066020526000908152604090205460ff1681565b34801561070c57600080fd5b5061044161071b366004612c6f565b6001600160a01b031660009081526003602052604090205490565b34801561074257600080fd5b5061046f610751366004612e4d565b611310565b34801561076257600080fd5b506017546103bd906001600160a01b031681565b34801561078257600080fd5b5061046f610791366004612e4d565b611387565b3480156107a257600080fd5b5061041c6107b1366004612c6f565b60076020526000908152604090205460ff1681565b3480156107d257600080fd5b506014546103bd906001600160a01b031681565b3480156107f257600080fd5b5061046f610801366004612cd4565b611414565b34801561081257600080fd5b506103ef611469565b34801561082757600080fd5b50610441600a5481565b34801561083d57600080fd5b5061046f61084c366004612cd4565b611478565b34801561085d57600080fd5b50610441600b5481565b34801561087357600080fd5b5061041c610882366004612c45565b6114fc565b34801561089357600080fd5b506103bd7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108c757600080fd5b5061041c6108d6366004612c45565b6115a5565b3480156108e757600080fd5b506103bd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561091b57600080fd5b5061046f6115b2565b34801561093057600080fd5b506103bd61093f366004612c6f565b6008602052600090815260409020546001600160a01b031681565b34801561096657600080fd5b5061046f610975366004612e4d565b6115ce565b34801561098657600080fd5b506103bd610995366004612e4d565b6115fd565b3480156109a657600080fd5b5061046f6109b5366004612e4d565b611627565b3480156109c657600080fd5b5061046f6109d5366004612c6f565b6116af565b3480156109e657600080fd5b5061044160135481565b3480156109fc57600080fd5b5061044160115481565b348015610a1257600080fd5b50610441601f5481565b61046f610a2a366004612c6f565b6116fb565b348015610a3b57600080fd5b50610a6b610a4a366004612c6f565b601b6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103d1565b348015610a9257600080fd5b5060095461041c9060ff1681565b348015610aac57600080fd5b50610441610abb366004612c6f565b60196020526000908152604090205481565b348015610ad957600080fd5b5061046f6118ad565b348015610aee57600080fd5b506016546103bd906001600160a01b031681565b348015610b0e57600080fd5b50610441610b1d366004612e66565b6118f0565b348015610b2e57600080fd5b5061041c610b3d366004612c6f565b61191b565b348015610b4e57600080fd5b50610441600f5481565b348015610b6457600080fd5b50610441601e5481565b348015610b7a57600080fd5b506015546103bd906001600160a01b031681565b348015610b9a57600080fd5b50610441600c5481565b348015610bb057600080fd5b5061044160125481565b606060008054610bc990612e99565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf590612e99565b8015610c425780601f10610c1757610100808354040283529160200191610c42565b820191906000526020600020905b815481529060010190602001808311610c2557829003601f168201915b5050505050905090565b60006001600160a01b038316610c7d5760405162461bcd60e51b8152600401610c7490612ed3565b60405180910390fd5b3360008181526004602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b61dead600090815260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54600254610d1f9190612f20565b905090565b33600081815260086020526040812080546001600160a01b0319166001600160a01b03851617905590610d5690610efe565b1115610d6657610d6633826119df565b50565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e94576001600160a01b0384166000908152600460209081526040808320338452909152902054821115610e015760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610c74565b6001600160a01b038416600090815260046020908152604080832033845290915281208054849290610e34908490612f20565b90915550506001600160a01b038416600081815260046020908152604080832033808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b610e9f848484611ca3565b90505b9392505050565b6014546001600160a01b03163314610ed35760405162461bcd60e51b8152600401610c7490612f33565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152601b60205260408120548190610f2290611d80565b6001600160a01b0384166000908152601b6020526040902060010154909150808211610f52575060009392505050565b610f5c8183612f20565b949350505050565b6014546001600160a01b03163314610f8e5760405162461bcd60e51b8152600401610c7490612f33565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6014546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610c7490612f33565b60145460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015611036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105a9190612f6a565b505050565b60006001600160a01b0383166110875760405162461bcd60e51b8152600401610c7490612ed3565b8161109233856118f0565b61109c9190612f87565b3360008181526004602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610cd1565b6000610cdd82600019610c4c565b6014546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610c7490612f33565b60006111378382612fe8565b50600161105a8282612fe8565b6014546001600160a01b0316331461116e5760405162461bcd60e51b8152600401610c7490612f33565b60095460ff16156111f157600a54836111878688612f87565b6111919190612f87565b11156111f15760405162461bcd60e51b815260206004820152602960248201527f4f6e63652072656e6f756e6365642c2074617865732063616e206f6e6c79206260448201526819481b1bddd95c995960ba1b6064820152608401610c74565b600b859055600c849055600d8390558261120b8587612f87565b6112159190612f87565b600a8190556012839055601382905560649082906112349085906130a8565b61123e91906130bf565b1061127e5760405162461bcd60e51b815260206004820152601060248201526f15185e081cd859995d1e481b1a5b5a5d60821b6044820152606401610c74565b5050505050565b6000805b8281101561105a576023546112a090600190612f20565b60225411156112b3575050600060225550565b6023602254815481106112c8576112c86130e1565b6000918252602090912001546001600160a01b031691506112e882611d9d565b602280549060006112f8836130f7565b91905055508080611308906130f7565b915050611289565b6014546001600160a01b0316331461133a5760405162461bcd60e51b8152600401610c7490612f33565b6014546040516000916001600160a01b03169083908381818185875af1925050503d806000811461127e576040519150601f19603f3d011682016040523d82523d6000602084013e61127e565b6014546001600160a01b031633146113b15760405162461bcd60e51b8152600401610c7490612f33565b60095460ff16156113c5576103e8600f5550565b600f819055600a811015610d665760405162461bcd60e51b815260206004820152601660248201527513585e15d85b1b195d081cd859995d1e481b1a5b5a5d60521b6044820152606401610c74565b6014546001600160a01b0316331461143e5760405162461bcd60e51b8152600401610c7490612f33565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b606060018054610bc990612e99565b6014546001600160a01b031633146114a25760405162461bcd60e51b8152600401610c7490612f33565b60095460ff166114f8576001600160a01b0382166000908152600760209081526040808320805485151560ff199182168117909255601c8452828520805482168317905560059093529220805490911690911790555b5050565b60006001600160a01b0383166115245760405162461bcd60e51b8152600401610c7490612ed3565b8161152f33856118f0565b10156115905760405162461bcd60e51b815260206004820152602a60248201527f43616e2774207375627472616374206d6f7265207468616e2063757272656e7460448201526920616c6c6f77616e636560b01b6064820152608401610c74565b8161159b33856118f0565b61109c9190612f20565b6000610ea2338484611ca3565b60006115bd33610efe565b11156115cc576115cc33611deb565b565b6014546001600160a01b031633146115f85760405162461bcd60e51b8152600401610c7490612f33565b601155565b6018818154811061160d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6014546001600160a01b031633146116515760405162461bcd60e51b8152600401610c7490612f33565b60095460ff161561166457606460105550565b6010819055604b811015610d665760405162461bcd60e51b815260206004820152601260248201527113585e151e081cd859995d1e481b1a5b5a5d60721b6044820152606401610c74565b6014546001600160a01b031633146116d95760405162461bcd60e51b8152600401610c7490612f33565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031633146117255760405162461bcd60e51b8152600401610c7490612f33565b6611c37937e0800034101561178a5760405162461bcd60e51b815260206004820152602560248201527f4e65656420302e3030352045544820746f207465737420746865206e65772072604482015264195dd85c9960da1b6064820152608401610c74565b601680546001600160a01b0319166001600160a01b0383161790556040805160028082526060820183526000926020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106117fa576117fa6130e1565b6001600160a01b03928316602091820292909201015260165482519116908290600190811061182b5761182b6130e1565b6001600160a01b03928316602091820292909201015260155460145460405163b6f9de9560e01b81529183169263b6f9de95923492611877926000928892909116904290600401613154565b6000604051808303818588803b15801561189057600080fd5b505af11580156118a4573d6000803e3d6000fd5b50505050505050565b6014546001600160a01b031633146118d75760405162461bcd60e51b8152600401610c7490612f33565b60095460ff166115cc576009805460ff19166001179055565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b600080601880548060200260200160405190810160405280929190818152602001828054801561197457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611956575b5050505050905060005b81518110156119d557818181518110611999576119996130e1565b60200260200101516001600160a01b0316846001600160a01b0316036119c3575060019392505050565b806119cd816130f7565b91505061197e565b5060009392505050565b60006119ea83610efe565b905066038d7ea4c68000811015611a0057505050565b6040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110611a5557611a556130e1565b6001600160a01b039283166020918202929092010152601654825191169082906001908110611a8657611a866130e1565b6001600160a01b0392831660209182029290920101526015541663b6f9de95611ab06002856130bf565b60008488426040518663ffffffff1660e01b8152600401611ad49493929190613154565b6000604051808303818588803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50505050508281600181518110611b1a57611b1a6130e1565b6001600160a01b0392831660209182029290920101526015541663b6f9de95611b446002856130bf565b60008488426040518663ffffffff1660e01b8152600401611b689493929190613154565b6000604051808303818588803b158015611b8157600080fd5b505af193505050508015611b93575060015b611c1c576014546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611be4576040519150601f19603f3d011682016040523d82523d6000602084013e611be9565b606091505b505090508015611c1a576001600160a01b038516600090815260086020526040902080546001600160a01b03191690555b505b81601e54611c2a9190612f87565b601e556001600160a01b0384166000908152601b6020526040902060020154611c54908390612f87565b6001600160a01b0385166000908152601b60205260409020600281019190915554611c7e90611d80565b6001600160a01b039094166000908152601b6020526040902060010193909355505050565b6001600160a01b03831660009081526005602052604081205460ff1680611ce257506001600160a01b03831660009081526005602052604090205460ff165b15611cf857611cf2848484611fd8565b50611d24565b611d0384848461215b565b9150611d10848484611fd8565b5060115415611d2457611d24601154611285565b6001600160a01b0384166000908152601c602052604090205460ff16611d4d57611d4d84612617565b6001600160a01b0383166000908152601c602052604090205460ff16611d7657611d7683612617565b5060019392505050565b6000602054601f5483611d9391906130a8565b610cdd91906130bf565b6001600160a01b0381811660009081526008602052604090205416611dc557610d6681611deb565b6001600160a01b03808216600090815260086020526040902054610d66918391166119df565b6000611df682610efe565b905066038d7ea4c68000811015611e0b575050565b6001600160a01b0382166108fc611e236002846130bf565b6040518115909202916000818181858888f19350505050158015611e4b573d6000803e3d6000fd5b506040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110611ea157611ea16130e1565b6001600160a01b039283166020918202929092010152601654825191169082906001908110611ed257611ed26130e1565b6001600160a01b0392831660209182029290920101526015541663b6f9de95611efc6002856130bf565b60008487426040518663ffffffff1660e01b8152600401611f209493929190613154565b6000604051808303818588803b158015611f3957600080fd5b505af1158015611f4d573d6000803e3d6000fd5b505050505081601e54611f609190612f87565b601e556001600160a01b0383166000908152601b6020526040902060020154611f8a908390612f87565b6001600160a01b0384166000908152601b60205260409020600281019190915554611fb490611d80565b6001600160a01b039093166000908152601b60205260409020600101929092555050565b60006001600160a01b0384166120305760405162461bcd60e51b815260206004820152601d60248201527f43616e277420757365207a65726f2061646472657373657320686572650000006044820152606401610c74565b6001600160a01b0384166000908152600360205260409020548211156120985760405162461bcd60e51b815260206004820181905260248201527f43616e2774207472616e73666572206d6f7265207468616e20796f75206f776e6044820152606401610c74565b816000036120a857506001610ea2565b6001600160a01b038416600090815260036020526040812080548492906120d0908490612f20565b90915550506001600160a01b038316600090815260036020526040812080548492906120fd908490612f87565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161214991815260200190565b60405180910390a35060019392505050565b60006103e8600f5411612290576001600160a01b03831660009081526007602052604090205460ff16612203576103e8600f5460025461219b91906130a8565b6121a591906130bf565b6001600160a01b0384166000908152600360205260409020546121c9908490612f87565b11156122035760405162461bcd60e51b815260206004820152600960248201526813585e15d85b1b195d60ba1b6044820152606401610c74565b6001600160a01b03841660009081526007602052604090205460ff166122905760646103e8601054600f5460025461223b91906130a8565b61224591906130a8565b61224f91906130bf565b61225991906130bf565b8211156122905760405162461bcd60e51b815260206004820152600560248201526409ac2f0a8f60db1b6044820152606401610c74565b6001600160a01b03841660009081526006602052604090205460ff16806122cf57506001600160a01b03831660009081526006602052604090205460ff165b156123bb5760c86002546122e391906130bf565b82111561231c5760405162461bcd60e51b81526020600482015260076024820152664d61785478416960c81b6044820152606401610c74565b6000606461232b84604b6130a8565b61233591906130bf565b90506123408461191b565b1561235657612350858583611fd8565b5061239c565b61235f8561191b565b1561236f57612350858683611fd8565b61239a857f000000000000000000000000000000000000000000000000000000000000000083611fd8565b505b60646123a984604b6130a8565b6123b391906130bf565b915050610ea2565b6123c48461191b565b1580156123d757506123d58361191b565b155b156123e3575080610ea2565b600a546000036123f4575080610ea2565b60006123ff8461191b565b61242e576064600d54600b546124159190612f87565b61241f90856130a8565b61242991906130bf565b61246e565b6064601354601254600d54600b546124469190612f87565b61245090876130a8565b61245a91906130a8565b61246491906130bf565b61246e91906130bf565b9050801561248357612481853083611fd8565b505b600c54156125115760006064600c548561249d91906130a8565b6124a791906130bf565b90506124b28561191b565b156124e2576124dc8686601354601254856124cd91906130a8565b6124d791906130bf565b611fd8565b5061250f565b61250d867f000000000000000000000000000000000000000000000000000000000000000083611fd8565b505b505b61251a8561191b565b61259a57612526612816565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561258157600080fd5b505af1158015612595573d6000803e3d6000fd5b505050505b6125a38461191b565b6125d0576064600a54846125b791906130a8565b6125c191906130bf565b6125cb9084612f20565b61260e565b6064601354601254600a54866125e691906130a8565b6125f091906130a8565b6125fa91906130bf565b61260491906130bf565b61260e9084612f20565b95945050505050565b6001600160a01b0381166000908152601b60205260409020541561263e5761263e81611d9d565b6001600160a01b0381166000908152601b602052604090205415801561267b57506001600160a01b03811660009081526003602052604090205415155b156126dd57602380546001600160a01b0383166000818152601960205260408120839055600183018455929092527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180546001600160a01b03191690911790555b6001600160a01b0381166000908152601b60205260409020541580159061271a57506001600160a01b038116600090815260036020526040902054155b1561276a576001600160a01b0381166000908152601b6020526040902054601d546127459190612f20565b601d556001600160a01b0381166000908152601b6020526040812055610d6681612ac6565b6001600160a01b03811660009081526003602052604090205415610d66576001600160a01b038116600090815260036020908152604080832054601b90925290912054601d546127ba9190612f20565b6127c49190612f87565b601d556001600160a01b038116600090815260036020908152604080832054601b9092529091208190556127f790611d80565b6001600160a01b0382166000908152601b602052604090206001015550565b600e543060009081526003602052604090205410806128425750600d54600b546128409190612f87565b155b1561284957565b476021556040805160028082526060820183526000926020830190803683370190505090503081600081518110612882576128826130e1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106128d6576128d66130e1565b6001600160a01b039283166020918202929092018101919091526015543060008181526003909352604080842054905163791ac94760e01b8152929094169363791ac9479361293093919290918791904290600401613189565b600060405180830381600087803b15801561294a57600080fd5b505af115801561295e573d6000803e3d6000fd5b505060215447925082119050612972575050565b6000602154826129829190612f20565b601d549091501561105a576000600d54600b5461299f9190612f87565b1115612a90576000600d54600b546129b79190612f87565b600d546129c490846130a8565b6129ce91906130bf565b6017546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612a20576040519150601f19603f3d011682016040523d82523d6000602084013e612a25565b606091505b5050905080612a4e57601d5483602054612a3f91906130a8565b612a4991906130bf565b612a72565b601d54612a5b8385612f20565b602054612a6891906130a8565b612a7291906130bf565b601f6000828254612a839190612f87565b9091555061105a92505050565b601d5481602054612aa191906130a8565b612aab91906130bf565b601f6000828254612abc9190612f87565b9091555050505050565b60238054612ad690600190612f20565b81548110612ae657612ae66130e1565b60009182526020808320909101546001600160a01b0384811684526019909252604090922054602380549290931692918110612b2457612b246130e1565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260199182905260408120546023805491939291612b7090600190612f20565b81548110612b8057612b806130e1565b60009182526020808320909101546001600160a01b031683528201929092526040019020556023805480612bb657612bb66131c5565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600060208083528351808285015260005b81811015612c0857858101830151858201604001528201612bec565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114612c4057600080fd5b919050565b60008060408385031215612c5857600080fd5b612c6183612c29565b946020939093013593505050565b600060208284031215612c8157600080fd5b610ea282612c29565b600080600060608486031215612c9f57600080fd5b612ca884612c29565b9250612cb660208501612c29565b9150604084013590509250925092565b8015158114610d6657600080fd5b60008060408385031215612ce757600080fd5b612cf083612c29565b91506020830135612d0081612cc6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d3257600080fd5b813567ffffffffffffffff80821115612d4d57612d4d612d0b565b604051601f8301601f19908116603f01168101908282118183101715612d7557612d75612d0b565b81604052838152866020858801011115612d8e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612dc157600080fd5b823567ffffffffffffffff80821115612dd957600080fd5b612de586838701612d21565b93506020850135915080821115612dfb57600080fd5b50612e0885828601612d21565b9150509250929050565b600080600080600060a08688031215612e2a57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208284031215612e5f57600080fd5b5035919050565b60008060408385031215612e7957600080fd5b612e8283612c29565b9150612e9060208401612c29565b90509250929050565b600181811c90821680612ead57607f821691505b602082108103612ecd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601b908201527f43616e277420757365207a65726f206164647265737320686572650000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610cdd57610cdd612f0a565b60208082526018908201527f4f6e6c79207468652063656f2063616e20646f20746861740000000000000000604082015260600190565b600060208284031215612f7c57600080fd5b8151610ea281612cc6565b80820180821115610cdd57610cdd612f0a565b601f82111561105a57600081815260208120601f850160051c81016020861015612fc15750805b601f850160051c820191505b81811015612fe057828155600101612fcd565b505050505050565b815167ffffffffffffffff81111561300257613002612d0b565b613016816130108454612e99565b84612f9a565b602080601f83116001811461304b57600084156130335750858301515b600019600386901b1c1916600185901b178555612fe0565b600085815260208120601f198616915b8281101561307a5788860151825594840194600190910190840161305b565b50858210156130985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610cdd57610cdd612f0a565b6000826130dc57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161310957613109612f0a565b5060010190565b600081518084526020808501945080840160005b838110156131495781516001600160a01b031687529582019590820190600101613124565b509495945050505050565b84815260806020820152600061316d6080830186613110565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a0604082015260006131a860a0830186613110565b6001600160a01b0394909416606083015250608001529392505050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202d5baa25d4a2327100d45097782afa03770193d773ead19e77cbb6bb006834b464736f6c63430008130033000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000989680000000000000000000000000cb3850451feb8d50518ad2b491906fbaf44dd56a0000000000000000000000006ad9a31f02f1e790ff85584ea3c3d0001e45cd640000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000c457468796c656e6520322e30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044332483400000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806395d89b41116101dc578063c380901711610102578063d83062b4116100a0578063efca2eed1161006f578063efca2eed14610b58578063f887ea4014610b6e578063faba8c3b14610b8e578063fed0d2a114610ba457600080fd5b8063d83062b414610ae2578063dd62ed3e14610b02578063e5e31b1314610b22578063e70d9a6f14610b4257600080fd5b8063ce7c2ac2116100dc578063ce7c2ac214610a2f578063d232c22014610a86578063d4fda1f214610aa0578063d826a9e514610acd57600080fd5b8063c3809017146109f0578063c7e1d0b114610a06578063c886f71614610a1c57600080fd5b8063ad5c46481161017a578063b91ac78811610149578063b91ac7881461097a578063bb2aec771461099a578063bb85c6d1146109ba578063c0c0de93146109da57600080fd5b8063ad5c4648146108db578063ae4d00601461090f578063b243051514610924578063b5bfbaa01461095a57600080fd5b80639ec5a894116101b65780639ec5a89414610851578063a457c2d714610867578063a8aa1b3114610887578063a9059cbb146108bb57600080fd5b806395d89b411461080657806399c8d5561461081b57806399dde4591461083157600080fd5b80633a98ef39116102c157806369ec9df31161025f578063769eaa681161022e578063769eaa68146107765780638673208714610796578063908921fc146107c657806394e04ba9146107e657600080fd5b806369ec9df3146106d057806370a0823114610700578063739f08c81461073657806375f0a8741461075657600080fd5b80635a4462151161029b5780635a446215146106435780635c16e15e146106635780635fcefa421461069057806360e3a0ac146106b057600080fd5b80633a98ef39146105dd5780633bda28b5146105f3578063571ac8b01461062357600080fd5b806328fd319811610339578063313ce56711610308578063313ce5671461055157806333f3d6281461056d57806334d635d21461058d57806339509351146105bd57600080fd5b806328fd3198146104b15780632ad4cab7146104d15780632d3e474a146104f15780632f5caeb61461050757600080fd5b806318160ddd1161037557806318160ddd1461042c5780631ed6760b1461044f57806323b872dd14610471578063249ec2bb1461049157600080fd5b806303fd2a45146103a757806306fdde03146103da578063095ea7b3146103fc57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103ef610bba565b6040516103d19190612bdb565b34801561040857600080fd5b5061041c610417366004612c45565b610c4c565b60405190151581526020016103d1565b34801561043857600080fd5b50610441610ce3565b6040519081526020016103d1565b34801561045b57600080fd5b5061046f61046a366004612c6f565b610d24565b005b34801561047d57600080fd5b5061041c61048c366004612c8a565b610d69565b34801561049d57600080fd5b5061046f6104ac366004612cd4565b610ea9565b3480156104bd57600080fd5b506104416104cc366004612c6f565b610efe565b3480156104dd57600080fd5b5061046f6104ec366004612cd4565b610f64565b3480156104fd57600080fd5b50610441600d5481565b34801561051357600080fd5b5061046f610522366004612c6f565b33600090815260086020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b34801561055d57600080fd5b50604051601281526020016103d1565b34801561057957600080fd5b5061046f610588366004612c45565b610fb9565b34801561059957600080fd5b5061041c6105a8366004612c6f565b60056020526000908152604090205460ff1681565b3480156105c957600080fd5b5061041c6105d8366004612c45565b61105f565b3480156105e957600080fd5b50610441601d5481565b3480156105ff57600080fd5b5061041c61060e366004612c6f565b601c6020526000908152604090205460ff1681565b34801561062f57600080fd5b5061041c61063e366004612c6f565b6110f3565b34801561064f57600080fd5b5061046f61065e366004612dae565b611101565b34801561066f57600080fd5b5061044161067e366004612c6f565b601a6020526000908152604090205481565b34801561069c57600080fd5b5061046f6106ab366004612e12565b611144565b3480156106bc57600080fd5b5061046f6106cb366004612e4d565b611285565b3480156106dc57600080fd5b5061041c6106eb366004612c6f565b60066020526000908152604090205460ff1681565b34801561070c57600080fd5b5061044161071b366004612c6f565b6001600160a01b031660009081526003602052604090205490565b34801561074257600080fd5b5061046f610751366004612e4d565b611310565b34801561076257600080fd5b506017546103bd906001600160a01b031681565b34801561078257600080fd5b5061046f610791366004612e4d565b611387565b3480156107a257600080fd5b5061041c6107b1366004612c6f565b60076020526000908152604090205460ff1681565b3480156107d257600080fd5b506014546103bd906001600160a01b031681565b3480156107f257600080fd5b5061046f610801366004612cd4565b611414565b34801561081257600080fd5b506103ef611469565b34801561082757600080fd5b50610441600a5481565b34801561083d57600080fd5b5061046f61084c366004612cd4565b611478565b34801561085d57600080fd5b50610441600b5481565b34801561087357600080fd5b5061041c610882366004612c45565b6114fc565b34801561089357600080fd5b506103bd7f000000000000000000000000609b35253c593db2825de23a7a1d7709fdf5a05881565b3480156108c757600080fd5b5061041c6108d6366004612c45565b6115a5565b3480156108e757600080fd5b506103bd7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561091b57600080fd5b5061046f6115b2565b34801561093057600080fd5b506103bd61093f366004612c6f565b6008602052600090815260409020546001600160a01b031681565b34801561096657600080fd5b5061046f610975366004612e4d565b6115ce565b34801561098657600080fd5b506103bd610995366004612e4d565b6115fd565b3480156109a657600080fd5b5061046f6109b5366004612e4d565b611627565b3480156109c657600080fd5b5061046f6109d5366004612c6f565b6116af565b3480156109e657600080fd5b5061044160135481565b3480156109fc57600080fd5b5061044160115481565b348015610a1257600080fd5b50610441601f5481565b61046f610a2a366004612c6f565b6116fb565b348015610a3b57600080fd5b50610a6b610a4a366004612c6f565b601b6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103d1565b348015610a9257600080fd5b5060095461041c9060ff1681565b348015610aac57600080fd5b50610441610abb366004612c6f565b60196020526000908152604090205481565b348015610ad957600080fd5b5061046f6118ad565b348015610aee57600080fd5b506016546103bd906001600160a01b031681565b348015610b0e57600080fd5b50610441610b1d366004612e66565b6118f0565b348015610b2e57600080fd5b5061041c610b3d366004612c6f565b61191b565b348015610b4e57600080fd5b50610441600f5481565b348015610b6457600080fd5b50610441601e5481565b348015610b7a57600080fd5b506015546103bd906001600160a01b031681565b348015610b9a57600080fd5b50610441600c5481565b348015610bb057600080fd5b5061044160125481565b606060008054610bc990612e99565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf590612e99565b8015610c425780601f10610c1757610100808354040283529160200191610c42565b820191906000526020600020905b815481529060010190602001808311610c2557829003601f168201915b5050505050905090565b60006001600160a01b038316610c7d5760405162461bcd60e51b8152600401610c7490612ed3565b60405180910390fd5b3360008181526004602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b61dead600090815260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54600254610d1f9190612f20565b905090565b33600081815260086020526040812080546001600160a01b0319166001600160a01b03851617905590610d5690610efe565b1115610d6657610d6633826119df565b50565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e94576001600160a01b0384166000908152600460209081526040808320338452909152902054821115610e015760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610c74565b6001600160a01b038416600090815260046020908152604080832033845290915281208054849290610e34908490612f20565b90915550506001600160a01b038416600081815260046020908152604080832033808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b610e9f848484611ca3565b90505b9392505050565b6014546001600160a01b03163314610ed35760405162461bcd60e51b8152600401610c7490612f33565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152601b60205260408120548190610f2290611d80565b6001600160a01b0384166000908152601b6020526040902060010154909150808211610f52575060009392505050565b610f5c8183612f20565b949350505050565b6014546001600160a01b03163314610f8e5760405162461bcd60e51b8152600401610c7490612f33565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6014546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610c7490612f33565b60145460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015611036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105a9190612f6a565b505050565b60006001600160a01b0383166110875760405162461bcd60e51b8152600401610c7490612ed3565b8161109233856118f0565b61109c9190612f87565b3360008181526004602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610cd1565b6000610cdd82600019610c4c565b6014546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610c7490612f33565b60006111378382612fe8565b50600161105a8282612fe8565b6014546001600160a01b0316331461116e5760405162461bcd60e51b8152600401610c7490612f33565b60095460ff16156111f157600a54836111878688612f87565b6111919190612f87565b11156111f15760405162461bcd60e51b815260206004820152602960248201527f4f6e63652072656e6f756e6365642c2074617865732063616e206f6e6c79206260448201526819481b1bddd95c995960ba1b6064820152608401610c74565b600b859055600c849055600d8390558261120b8587612f87565b6112159190612f87565b600a8190556012839055601382905560649082906112349085906130a8565b61123e91906130bf565b1061127e5760405162461bcd60e51b815260206004820152601060248201526f15185e081cd859995d1e481b1a5b5a5d60821b6044820152606401610c74565b5050505050565b6000805b8281101561105a576023546112a090600190612f20565b60225411156112b3575050600060225550565b6023602254815481106112c8576112c86130e1565b6000918252602090912001546001600160a01b031691506112e882611d9d565b602280549060006112f8836130f7565b91905055508080611308906130f7565b915050611289565b6014546001600160a01b0316331461133a5760405162461bcd60e51b8152600401610c7490612f33565b6014546040516000916001600160a01b03169083908381818185875af1925050503d806000811461127e576040519150601f19603f3d011682016040523d82523d6000602084013e61127e565b6014546001600160a01b031633146113b15760405162461bcd60e51b8152600401610c7490612f33565b60095460ff16156113c5576103e8600f5550565b600f819055600a811015610d665760405162461bcd60e51b815260206004820152601660248201527513585e15d85b1b195d081cd859995d1e481b1a5b5a5d60521b6044820152606401610c74565b6014546001600160a01b0316331461143e5760405162461bcd60e51b8152600401610c7490612f33565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b606060018054610bc990612e99565b6014546001600160a01b031633146114a25760405162461bcd60e51b8152600401610c7490612f33565b60095460ff166114f8576001600160a01b0382166000908152600760209081526040808320805485151560ff199182168117909255601c8452828520805482168317905560059093529220805490911690911790555b5050565b60006001600160a01b0383166115245760405162461bcd60e51b8152600401610c7490612ed3565b8161152f33856118f0565b10156115905760405162461bcd60e51b815260206004820152602a60248201527f43616e2774207375627472616374206d6f7265207468616e2063757272656e7460448201526920616c6c6f77616e636560b01b6064820152608401610c74565b8161159b33856118f0565b61109c9190612f20565b6000610ea2338484611ca3565b60006115bd33610efe565b11156115cc576115cc33611deb565b565b6014546001600160a01b031633146115f85760405162461bcd60e51b8152600401610c7490612f33565b601155565b6018818154811061160d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6014546001600160a01b031633146116515760405162461bcd60e51b8152600401610c7490612f33565b60095460ff161561166457606460105550565b6010819055604b811015610d665760405162461bcd60e51b815260206004820152601260248201527113585e151e081cd859995d1e481b1a5b5a5d60721b6044820152606401610c74565b6014546001600160a01b031633146116d95760405162461bcd60e51b8152600401610c7490612f33565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031633146117255760405162461bcd60e51b8152600401610c7490612f33565b6611c37937e0800034101561178a5760405162461bcd60e51b815260206004820152602560248201527f4e65656420302e3030352045544820746f207465737420746865206e65772072604482015264195dd85c9960da1b6064820152608401610c74565b601680546001600160a01b0319166001600160a01b0383161790556040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816000815181106117fa576117fa6130e1565b6001600160a01b03928316602091820292909201015260165482519116908290600190811061182b5761182b6130e1565b6001600160a01b03928316602091820292909201015260155460145460405163b6f9de9560e01b81529183169263b6f9de95923492611877926000928892909116904290600401613154565b6000604051808303818588803b15801561189057600080fd5b505af11580156118a4573d6000803e3d6000fd5b50505050505050565b6014546001600160a01b031633146118d75760405162461bcd60e51b8152600401610c7490612f33565b60095460ff166115cc576009805460ff19166001179055565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b600080601880548060200260200160405190810160405280929190818152602001828054801561197457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611956575b5050505050905060005b81518110156119d557818181518110611999576119996130e1565b60200260200101516001600160a01b0316846001600160a01b0316036119c3575060019392505050565b806119cd816130f7565b91505061197e565b5060009392505050565b60006119ea83610efe565b905066038d7ea4c68000811015611a0057505050565b6040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110611a5557611a556130e1565b6001600160a01b039283166020918202929092010152601654825191169082906001908110611a8657611a866130e1565b6001600160a01b0392831660209182029290920101526015541663b6f9de95611ab06002856130bf565b60008488426040518663ffffffff1660e01b8152600401611ad49493929190613154565b6000604051808303818588803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50505050508281600181518110611b1a57611b1a6130e1565b6001600160a01b0392831660209182029290920101526015541663b6f9de95611b446002856130bf565b60008488426040518663ffffffff1660e01b8152600401611b689493929190613154565b6000604051808303818588803b158015611b8157600080fd5b505af193505050508015611b93575060015b611c1c576014546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611be4576040519150601f19603f3d011682016040523d82523d6000602084013e611be9565b606091505b505090508015611c1a576001600160a01b038516600090815260086020526040902080546001600160a01b03191690555b505b81601e54611c2a9190612f87565b601e556001600160a01b0384166000908152601b6020526040902060020154611c54908390612f87565b6001600160a01b0385166000908152601b60205260409020600281019190915554611c7e90611d80565b6001600160a01b039094166000908152601b6020526040902060010193909355505050565b6001600160a01b03831660009081526005602052604081205460ff1680611ce257506001600160a01b03831660009081526005602052604090205460ff165b15611cf857611cf2848484611fd8565b50611d24565b611d0384848461215b565b9150611d10848484611fd8565b5060115415611d2457611d24601154611285565b6001600160a01b0384166000908152601c602052604090205460ff16611d4d57611d4d84612617565b6001600160a01b0383166000908152601c602052604090205460ff16611d7657611d7683612617565b5060019392505050565b6000602054601f5483611d9391906130a8565b610cdd91906130bf565b6001600160a01b0381811660009081526008602052604090205416611dc557610d6681611deb565b6001600160a01b03808216600090815260086020526040902054610d66918391166119df565b6000611df682610efe565b905066038d7ea4c68000811015611e0b575050565b6001600160a01b0382166108fc611e236002846130bf565b6040518115909202916000818181858888f19350505050158015611e4b573d6000803e3d6000fd5b506040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110611ea157611ea16130e1565b6001600160a01b039283166020918202929092010152601654825191169082906001908110611ed257611ed26130e1565b6001600160a01b0392831660209182029290920101526015541663b6f9de95611efc6002856130bf565b60008487426040518663ffffffff1660e01b8152600401611f209493929190613154565b6000604051808303818588803b158015611f3957600080fd5b505af1158015611f4d573d6000803e3d6000fd5b505050505081601e54611f609190612f87565b601e556001600160a01b0383166000908152601b6020526040902060020154611f8a908390612f87565b6001600160a01b0384166000908152601b60205260409020600281019190915554611fb490611d80565b6001600160a01b039093166000908152601b60205260409020600101929092555050565b60006001600160a01b0384166120305760405162461bcd60e51b815260206004820152601d60248201527f43616e277420757365207a65726f2061646472657373657320686572650000006044820152606401610c74565b6001600160a01b0384166000908152600360205260409020548211156120985760405162461bcd60e51b815260206004820181905260248201527f43616e2774207472616e73666572206d6f7265207468616e20796f75206f776e6044820152606401610c74565b816000036120a857506001610ea2565b6001600160a01b038416600090815260036020526040812080548492906120d0908490612f20565b90915550506001600160a01b038316600090815260036020526040812080548492906120fd908490612f87565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161214991815260200190565b60405180910390a35060019392505050565b60006103e8600f5411612290576001600160a01b03831660009081526007602052604090205460ff16612203576103e8600f5460025461219b91906130a8565b6121a591906130bf565b6001600160a01b0384166000908152600360205260409020546121c9908490612f87565b11156122035760405162461bcd60e51b815260206004820152600960248201526813585e15d85b1b195d60ba1b6044820152606401610c74565b6001600160a01b03841660009081526007602052604090205460ff166122905760646103e8601054600f5460025461223b91906130a8565b61224591906130a8565b61224f91906130bf565b61225991906130bf565b8211156122905760405162461bcd60e51b815260206004820152600560248201526409ac2f0a8f60db1b6044820152606401610c74565b6001600160a01b03841660009081526006602052604090205460ff16806122cf57506001600160a01b03831660009081526006602052604090205460ff165b156123bb5760c86002546122e391906130bf565b82111561231c5760405162461bcd60e51b81526020600482015260076024820152664d61785478416960c81b6044820152606401610c74565b6000606461232b84604b6130a8565b61233591906130bf565b90506123408461191b565b1561235657612350858583611fd8565b5061239c565b61235f8561191b565b1561236f57612350858683611fd8565b61239a857f000000000000000000000000609b35253c593db2825de23a7a1d7709fdf5a05883611fd8565b505b60646123a984604b6130a8565b6123b391906130bf565b915050610ea2565b6123c48461191b565b1580156123d757506123d58361191b565b155b156123e3575080610ea2565b600a546000036123f4575080610ea2565b60006123ff8461191b565b61242e576064600d54600b546124159190612f87565b61241f90856130a8565b61242991906130bf565b61246e565b6064601354601254600d54600b546124469190612f87565b61245090876130a8565b61245a91906130a8565b61246491906130bf565b61246e91906130bf565b9050801561248357612481853083611fd8565b505b600c54156125115760006064600c548561249d91906130a8565b6124a791906130bf565b90506124b28561191b565b156124e2576124dc8686601354601254856124cd91906130a8565b6124d791906130bf565b611fd8565b5061250f565b61250d867f000000000000000000000000609b35253c593db2825de23a7a1d7709fdf5a05883611fd8565b505b505b61251a8561191b565b61259a57612526612816565b7f000000000000000000000000609b35253c593db2825de23a7a1d7709fdf5a0586001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561258157600080fd5b505af1158015612595573d6000803e3d6000fd5b505050505b6125a38461191b565b6125d0576064600a54846125b791906130a8565b6125c191906130bf565b6125cb9084612f20565b61260e565b6064601354601254600a54866125e691906130a8565b6125f091906130a8565b6125fa91906130bf565b61260491906130bf565b61260e9084612f20565b95945050505050565b6001600160a01b0381166000908152601b60205260409020541561263e5761263e81611d9d565b6001600160a01b0381166000908152601b602052604090205415801561267b57506001600160a01b03811660009081526003602052604090205415155b156126dd57602380546001600160a01b0383166000818152601960205260408120839055600183018455929092527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180546001600160a01b03191690911790555b6001600160a01b0381166000908152601b60205260409020541580159061271a57506001600160a01b038116600090815260036020526040902054155b1561276a576001600160a01b0381166000908152601b6020526040902054601d546127459190612f20565b601d556001600160a01b0381166000908152601b6020526040812055610d6681612ac6565b6001600160a01b03811660009081526003602052604090205415610d66576001600160a01b038116600090815260036020908152604080832054601b90925290912054601d546127ba9190612f20565b6127c49190612f87565b601d556001600160a01b038116600090815260036020908152604080832054601b9092529091208190556127f790611d80565b6001600160a01b0382166000908152601b602052604090206001015550565b600e543060009081526003602052604090205410806128425750600d54600b546128409190612f87565b155b1561284957565b476021556040805160028082526060820183526000926020830190803683370190505090503081600081518110612882576128826130e1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106128d6576128d66130e1565b6001600160a01b039283166020918202929092018101919091526015543060008181526003909352604080842054905163791ac94760e01b8152929094169363791ac9479361293093919290918791904290600401613189565b600060405180830381600087803b15801561294a57600080fd5b505af115801561295e573d6000803e3d6000fd5b505060215447925082119050612972575050565b6000602154826129829190612f20565b601d549091501561105a576000600d54600b5461299f9190612f87565b1115612a90576000600d54600b546129b79190612f87565b600d546129c490846130a8565b6129ce91906130bf565b6017546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612a20576040519150601f19603f3d011682016040523d82523d6000602084013e612a25565b606091505b5050905080612a4e57601d5483602054612a3f91906130a8565b612a4991906130bf565b612a72565b601d54612a5b8385612f20565b602054612a6891906130a8565b612a7291906130bf565b601f6000828254612a839190612f87565b9091555061105a92505050565b601d5481602054612aa191906130a8565b612aab91906130bf565b601f6000828254612abc9190612f87565b9091555050505050565b60238054612ad690600190612f20565b81548110612ae657612ae66130e1565b60009182526020808320909101546001600160a01b0384811684526019909252604090922054602380549290931692918110612b2457612b246130e1565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260199182905260408120546023805491939291612b7090600190612f20565b81548110612b8057612b806130e1565b60009182526020808320909101546001600160a01b031683528201929092526040019020556023805480612bb657612bb66131c5565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600060208083528351808285015260005b81811015612c0857858101830151858201604001528201612bec565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114612c4057600080fd5b919050565b60008060408385031215612c5857600080fd5b612c6183612c29565b946020939093013593505050565b600060208284031215612c8157600080fd5b610ea282612c29565b600080600060608486031215612c9f57600080fd5b612ca884612c29565b9250612cb660208501612c29565b9150604084013590509250925092565b8015158114610d6657600080fd5b60008060408385031215612ce757600080fd5b612cf083612c29565b91506020830135612d0081612cc6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d3257600080fd5b813567ffffffffffffffff80821115612d4d57612d4d612d0b565b604051601f8301601f19908116603f01168101908282118183101715612d7557612d75612d0b565b81604052838152866020858801011115612d8e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612dc157600080fd5b823567ffffffffffffffff80821115612dd957600080fd5b612de586838701612d21565b93506020850135915080821115612dfb57600080fd5b50612e0885828601612d21565b9150509250929050565b600080600080600060a08688031215612e2a57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208284031215612e5f57600080fd5b5035919050565b60008060408385031215612e7957600080fd5b612e8283612c29565b9150612e9060208401612c29565b90509250929050565b600181811c90821680612ead57607f821691505b602082108103612ecd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601b908201527f43616e277420757365207a65726f206164647265737320686572650000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610cdd57610cdd612f0a565b60208082526018908201527f4f6e6c79207468652063656f2063616e20646f20746861740000000000000000604082015260600190565b600060208284031215612f7c57600080fd5b8151610ea281612cc6565b80820180821115610cdd57610cdd612f0a565b601f82111561105a57600081815260208120601f850160051c81016020861015612fc15750805b601f850160051c820191505b81811015612fe057828155600101612fcd565b505050505050565b815167ffffffffffffffff81111561300257613002612d0b565b613016816130108454612e99565b84612f9a565b602080601f83116001811461304b57600084156130335750858301515b600019600386901b1c1916600185901b178555612fe0565b600085815260208120601f198616915b8281101561307a5788860151825594840194600190910190840161305b565b50858210156130985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610cdd57610cdd612f0a565b6000826130dc57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161310957613109612f0a565b5060010190565b600081518084526020808501945080840160005b838110156131495781516001600160a01b031687529582019590820190600101613124565b509495945050505050565b84815260806020820152600061316d6080830186613110565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a0604082015260006131a860a0830186613110565b6001600160a01b0394909416606083015250608001529392505050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202d5baa25d4a2327100d45097782afa03770193d773ead19e77cbb6bb006834b464736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000989680000000000000000000000000cb3850451feb8d50518ad2b491906fbaf44dd56a0000000000000000000000006ad9a31f02f1e790ff85584ea3c3d0001e45cd640000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000c457468796c656e6520322e30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044332483400000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Ethylene 2.0
Arg [1] : symbol_ (string): C2H4
Arg [2] : totalSupply_ (uint256): 10000000
Arg [3] : marketing_ (address): 0xcb3850451feb8D50518ad2b491906FBaF44DD56a
Arg [4] : rewardsAddress (address): 0x6aD9a31f02F1E790fF85584EA3c3D0001E45cd64
Arg [5] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [6] : weth_ (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [7] : maxWalletInPermille_ (uint256): 25

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000989680
Arg [3] : 000000000000000000000000cb3850451feb8d50518ad2b491906fbaf44dd56a
Arg [4] : 0000000000000000000000006ad9a31f02f1e790ff85584ea3c3d0001e45cd64
Arg [5] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [6] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [9] : 457468796c656e6520322e300000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [11] : 4332483400000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

2635:18366:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3605:73;;;;;;;;;;;;3636:42;3605:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;3605:73:0;;;;;;;;6214:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7323:288::-;;;;;;;;;;-1:-1:-1;7323:288:0;;;;;:::i;:::-;;:::i;:::-;;;1377:14:1;;1370:22;1352:41;;1340:2;1325:18;7323:288:0;1212:187:1;6296:102:0;;;;;;;;;;;;;:::i;:::-;;;1550:25:1;;;1538:2;1523:18;6296:102:0;1404:177:1;17430:225:0;;;;;;;;;;-1:-1:-1;17430:225:0;;;;;:::i;:::-;;:::i;:::-;;8474:481;;;;;;;;;;-1:-1:-1;8474:481:0;;;;;:::i;:::-;;:::i;11456:144::-;;;;;;;;;;-1:-1:-1;11456:144:0;;;;;:::i;:::-;;:::i;19736:398::-;;;;;;;;;;-1:-1:-1;19736:398:0;;;;;:::i;:::-;;:::i;10639:150::-;;;;;;;;;;-1:-1:-1;10639:150:0;;;;;:::i;:::-;;:::i;3258:28::-;;;;;;;;;;;;;;;;17663:107;;;;;;;;;;-1:-1:-1;17663:107:0;;;;;:::i;:::-;17736:10;17723:24;;;;:12;:24;;;;;:45;;-1:-1:-1;;;;;;17723:45:0;-1:-1:-1;;;;;17723:45:0;;;;;;;;;;17663:107;6404:76;;;;;;;;;;-1:-1:-1;6404:76:0;;2762:2;2695:36:1;;2683:2;2668:18;6404:76:0;2553:184:1;6811:107:0;;;;;;;;;;-1:-1:-1;6811:107:0;;;;;:::i;:::-;;:::i;2926:41::-;;;;;;;;;;-1:-1:-1;2926:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7619:357;;;;;;;;;;-1:-1:-1;7619:357:0;;;;;:::i;:::-;;:::i;4204:26::-;;;;;;;;;;;;;;;;4138:57;;;;;;;;;;-1:-1:-1;4138:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7205:106;;;;;;;;;;-1:-1:-1;7205:106:0;;;;;:::i;:::-;;:::i;10058:155::-;;;;;;;;;;-1:-1:-1;10058:155:0;;;;;:::i;:::-;;:::i;4039:45::-;;;;;;;;;;-1:-1:-1;4039:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;8963:573;;;;;;;;;;-1:-1:-1;8963:573:0;;;;;:::i;:::-;;:::i;16703:375::-;;;;;;;;;;-1:-1:-1;16703:375:0;;;;;:::i;:::-;;:::i;2974:34::-;;;;;;;;;;-1:-1:-1;2974:34:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6572:103;;;;;;;;;;-1:-1:-1;6572:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;6655:18:0;6638:7;6655:18;;;:9;:18;;;;;;;6572:103;6681:124;;;;;;;;;;-1:-1:-1;6681:124:0;;;;;:::i;:::-;;:::i;3753:30::-;;;;;;;;;;-1:-1:-1;3753:30:0;;;;-1:-1:-1;;;;;3753:30:0;;;9548:285;;;;;;;;;;-1:-1:-1;9548:285:0;;;;;:::i;:::-;;:::i;3015:54::-;;;;;;;;;;-1:-1:-1;3015:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3552:18;;;;;;;;;;-1:-1:-1;3552:18:0;;;;-1:-1:-1;;;;;3552:18:0;;;11612:103;;;;;;;;;;-1:-1:-1;11612:103:0;;;;;:::i;:::-;;:::i;6486:80::-;;;;;;;;;;;;;:::i;3170:18::-;;;;;;;;;;;;;;;;10343:288;;;;;;;;;;-1:-1:-1;10343:288:0;;;;;:::i;:::-;;:::i;3195:26::-;;;;;;;;;;;;;;;;7984:482;;;;;;;;;;-1:-1:-1;7984:482:0;;;;;:::i;:::-;;:::i;3792:29::-;;;;;;;;;;;;;;;7059:140;;;;;;;;;;-1:-1:-1;7059:140:0;;;;;:::i;:::-;;:::i;3685:29::-;;;;;;;;;;;;;;;17308:110;;;;;;;;;;;;;:::i;3076:47::-;;;;;;;;;;-1:-1:-1;3076:47:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3076:47:0;;;10221:106;;;;;;;;;;-1:-1:-1;10221:106:0;;;;;:::i;:::-;;:::i;3828:22::-;;;;;;;;;;-1:-1:-1;3828:22:0;;;;;:::i;:::-;;:::i;9841:205::-;;;;;;;;;;-1:-1:-1;9841:205:0;;;;;:::i;:::-;;:::i;10801:131::-;;;;;;;;;;-1:-1:-1;10801:131:0;;;;;:::i;:::-;;:::i;3511:32::-;;;;;;;;;;;;;;;;3426:34;;;;;;;;;;;;;;;;4275:30;;;;;;;;;;;;;;;;10948:500;;;;;;:::i;:::-;;:::i;4091:40::-;;;;;;;;;;-1:-1:-1;4091:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4992:25:1;;;5048:2;5033:18;;5026:34;;;;5076:18;;;5069:34;4980:2;4965:18;4091:40:0;4790:319:1;3132:29:0;;;;;;;;;;-1:-1:-1;3132:29:0;;;;;;;;3978:54;;;;;;;;;;-1:-1:-1;3978:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;11727:111;;;;;;;;;;;;;:::i;3721:25::-;;;;;;;;;;-1:-1:-1;3721:25:0;;;;-1:-1:-1;;;;;3721:25:0;;;6924:129;;;;;;;;;;-1:-1:-1;6924:129:0;;;;;:::i;:::-;;:::i;20765:231::-;;;;;;;;;;-1:-1:-1;20765:231:0;;;;;:::i;:::-;;:::i;3346:39::-;;;;;;;;;;;;;;;;4237:31;;;;;;;;;;;;;;;;3577:21;;;;;;;;;;-1:-1:-1;3577:21:0;;;;-1:-1:-1;;;;;3577:21:0;;;3228:23;;;;;;;;;;;;;;;;3469:35;;;;;;;;;;;;;;;;6214:76;6260:13;6283:5;6276:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6214:76;:::o;7323:288::-;7398:4;-1:-1:-1;;;;;7423:21:0;;7415:61;;;;-1:-1:-1;;;7415:61:0;;;;;;;:::i;:::-;;;;;;;;;7499:10;7487:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;7487:32:0;;;;;;;;;;;;:41;;;7544:37;1550:25:1;;;7487:32:0;;7499:10;7544:37;;1523:18:1;7544:37:0;;;;;;;;-1:-1:-1;7599:4:0;7323:288;;;;;:::o;6296:102::-;3636:42;6349:7;6381:15;;;:9;:15;;;;6366:12;;:30;;6381:15;6366:30;:::i;:::-;6359:37;;6296:102;:::o;17430:225::-;17512:10;17499:24;;;;:12;:24;;;;;:45;;-1:-1:-1;;;;;;17499:45:0;-1:-1:-1;;;;;17499:45:0;;;;;:24;17558:29;;:17;:29::i;:::-;:33;17555:92;;;17593:54;17616:10;17628:18;17593:22;:54::i;:::-;17430:225;:::o;8474:481::-;-1:-1:-1;;;;;8596:19:0;;8575:4;8596:19;;;:11;:19;;;;;;;;8616:10;8596:31;;;;;;;;-1:-1:-1;;8596:52:0;8592:298;;-1:-1:-1;;;;;8673:19:0;;;;;;:11;:19;;;;;;;;8693:10;8673:31;;;;;;;;:41;-1:-1:-1;8673:41:0;8665:76;;;;-1:-1:-1;;;8665:76:0;;6587:2:1;8665:76:0;;;6569:21:1;6626:2;6606:18;;;6599:30;-1:-1:-1;;;6645:18:1;;;6638:52;6707:18;;8665:76:0;6385:346:1;8665:76:0;-1:-1:-1;;;;;8756:19:0;;;;;;:11;:19;;;;;;;;8776:10;8756:31;;;;;;;:41;;8791:6;;8756:19;:41;;8791:6;;8756:41;:::i;:::-;;;;-1:-1:-1;;;;;;;8817:61:0;;8846:19;;;;:11;:19;;;;;;;;8834:10;8846:31;;;;;;;;;;;8817:61;;1550:25:1;;;8834:10:0;;8817:61;;;1523:18:1;8817:61:0;;;;;;;8592:298;8907:40;8921:6;8929:9;8940:6;8907:13;:40::i;:::-;8900:47;;8474:481;;;;;;:::o;11456:144::-;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11545:38:0;;;::::1;;::::0;;;:22:::1;:38;::::0;;;;:47;;-1:-1:-1;;11545:47:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11456:144::o;19736:398::-;-1:-1:-1;;;;;19877:19:0;;19805:7;19877:19;;;:6;:19;;;;;:26;19805:7;;19859:45;;:17;:45::i;:::-;-1:-1:-1;;;;;19950:19:0;;19915:32;19950:19;;;:6;:19;;;;;:33;;;19825:79;;-1:-1:-1;19997:51:0;;;19994:64;;-1:-1:-1;20057:1:0;;19736:398;-1:-1:-1;;;19736:398:0:o;19994:64::-;20076:50;20102:24;20076:23;:50;:::i;:::-;20069:57;19736:398;-1:-1:-1;;;;19736:398:0:o;10639:150::-;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10732:40:0;;;::::1;;::::0;;;:24:::1;:40;::::0;;;;:49;;-1:-1:-1;;10732:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10639:150::o;6811:107::-;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;6904:3:::1;::::0;6881:35:::1;::::0;-1:-1:-1;;;6881:35:0;;-1:-1:-1;;;;;6904:3:0;;::::1;6881:35;::::0;::::1;7263:51:1::0;7330:18;;;7323:34;;;6881:22:0;;::::1;::::0;::::1;::::0;7236:18:1;;6881:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6811:107:::0;;:::o;7619:357::-;7699:4;-1:-1:-1;;;;;7724:21:0;;7716:61;;;;-1:-1:-1;;;7716:61:0;;;;;;;:::i;:::-;7857:10;7824:30;7834:10;7846:7;7824:9;:30::i;:::-;:43;;;;:::i;:::-;7800:10;7788:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;7788:32:0;;;;;;;;;;;;:79;;;7883:63;1550:25:1;;;7788:32:0;;7883:63;;1523:18:1;7883:63:0;1404:177:1;7205:106:0;7260:4;7274:35;7282:7;-1:-1:-1;;7274:7:0;:35::i;10058:155::-;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;10160:5:::1;:15;10168:7:::0;10160:5;:15:::1;:::i;:::-;-1:-1:-1::0;10186:7:0::1;:19;10196:9:::0;10186:7;:19:::1;:::i;8963:573::-:0;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;9121:9:::1;::::0;::::1;;9118:110;;;9178:3;::::0;9162:12;9140:19:::1;9153:6:::0;9140:10;:19:::1;:::i;:::-;:34;;;;:::i;:::-;:41;;9132:96;;;::::0;-1:-1:-1;;;9132:96:0;;10154:2:1;9132:96:0::1;::::0;::::1;10136:21:1::0;10193:2;10173:18;;;10166:30;10232:34;10212:18;;;10205:62;-1:-1:-1;;;10283:18:1;;;10276:39;10332:19;;9132:96:0::1;9952:405:1::0;9132:96:0::1;9239:7;:20:::0;;;9270:3:::1;:12:::0;;;9293:9:::1;:24:::0;;;9305:12;9334:13:::1;9276:6:::0;9249:10;9334:13:::1;:::i;:::-;:25;;;;:::i;:::-;9328:3;:31:::0;;;9370:14:::1;:34:::0;;;9415:11:::1;:28:::0;;;9499:3:::1;::::0;9429:14;;9462:20:::1;::::0;9387:17;;9462:20:::1;:::i;:::-;:34;;;;:::i;:::-;:40;9454:69;;;::::0;-1:-1:-1;;;9454:69:0;;10959:2:1;9454:69:0::1;::::0;::::1;10941:21:1::0;10998:2;10978:18;;;10971:30;-1:-1:-1;;;11017:18:1;;;11010:46;11073:18;;9454:69:0::1;10757:340:1::0;9454:69:0::1;8963:573:::0;;;;;:::o;16703:375::-;16758:11;;16780:291;16802:7;16800:1;:9;16780:291;;;16849:12;:19;:23;;16871:1;;16849:23;:::i;:::-;16833:13;;:39;16830:121;;;-1:-1:-1;;16909:1:0;16893:13;:17;-1:-1:-1;16703:375:0:o;16830:121::-;16971:12;16984:13;;16971:27;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;16971:27:0;;-1:-1:-1;17013:16:0;16971:27;17013:11;:16::i;:::-;17044:13;:15;;;:13;:15;;;:::i;:::-;;;;;;16811:3;;;;;:::i;:::-;;;;16780:291;;6681:124;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;6760:3:::1;::::0;6752:36:::1;::::0;6735:12:::1;::::0;-1:-1:-1;;;;;6760:3:0::1;::::0;6777:6;;6735:12;6752:36;6735:12;6752:36;6777:6;6760:3;6752:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9548:285:::0;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;9629:9:::1;::::0;::::1;;9626:88;;;9677:4;9655:19;:26:::0;17430:225;:::o;9626:88::-:1;9724:19;:30:::0;;;9796:2:::1;9773:25:::0;::::1;;9765:60;;;::::0;-1:-1:-1;;;9765:60:0;;11786:2:1;9765:60:0::1;::::0;::::1;11768:21:1::0;11825:2;11805:18;;;11798:30;-1:-1:-1;;;11844:18:1;;;11837:52;11906:18;;9765:60:0::1;11584:346:1::0;11612:103:0;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11686:12:0;;;::::1;;::::0;;;:2:::1;:12;::::0;;;;:21;;-1:-1:-1;;11686:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11612:103::o;6486:80::-;6534:13;6557:7;6550:14;;;;;:::i;10343:288::-;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;10440:9:::1;::::0;::::1;;10451:7;10437:21;-1:-1:-1::0;;;;;10468:39:0;::::1;;::::0;;;:22:::1;:39;::::0;;;;;;;:48;;;::::1;;-1:-1:-1::0;;10468:48:0;;::::1;::::0;::::1;::::0;;;10527:24:::1;:41:::0;;;;;:50;;;::::1;::::0;::::1;::::0;;10588:9:::1;:26:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;4580:1:::1;10343:288:::0;;:::o;7984:482::-;8069:4;-1:-1:-1;;;;;8094:21:0;;8086:61;;;;-1:-1:-1;;;8086:61:0;;;;;;;:::i;:::-;8200:15;8166:30;8176:10;8188:7;8166:9;:30::i;:::-;:49;;8158:104;;;;-1:-1:-1;;;8158:104:0;;12137:2:1;8158:104:0;;;12119:21:1;12176:2;12156:18;;;12149:30;12215:34;12195:18;;;12188:62;-1:-1:-1;;;12266:18:1;;;12259:40;12316:19;;8158:104:0;11935:406:1;8158:104:0;8342:15;8309:30;8319:10;8331:7;8309:9;:30::i;:::-;:48;;;;:::i;7059:140::-;7139:4;7153:44;7167:10;7179:9;7190:6;7153:13;:44::i;17308:110::-;17377:1;17345:29;17363:10;17345:17;:29::i;:::-;:33;17342:74;;;17380:36;17405:10;17380:24;:36::i;:::-;17308:110::o;10221:106::-;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;10294:15:::1;:25:::0;10221:106::o;3828:22::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3828:22:0;;-1:-1:-1;3828:22:0;:::o;9841:205::-;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;9927:9:::1;::::0;::::1;;9924:36;;;9947:3;9939:5;:11:::0;17430:225;:::o;9924:36::-:1;9970:5;:15:::0;;;10013:2:::1;10004:11:::0;::::1;;9996:42;;;::::0;-1:-1:-1;;;9996:42:0;;12548:2:1;9996:42:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:48;12664:18;;9996:42:0::1;12346:342:1::0;10801:131:0;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;10888:15:::1;:36:::0;;-1:-1:-1;;;;;;10888:36:0::1;-1:-1:-1::0;;;;;10888:36:0;;;::::1;::::0;;;::::1;::::0;;10801:131::o;10948:500::-;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;11052:11:::1;11039:9;:24;;11031:74;;;::::0;-1:-1:-1;;;11031:74:0;;12895:2:1;11031:74:0::1;::::0;::::1;12877:21:1::0;12934:2;12914:18;;;12907:30;12973:34;12953:18;;;12946:62;-1:-1:-1;;;13024:18:1;;;13017:35;13069:19;;11031:74:0::1;12693:401:1::0;11031:74:0::1;11116:10;:23:::0;;-1:-1:-1;;;;;;11116:23:0::1;-1:-1:-1::0;;;;;11116:23:0;::::1;;::::0;;11174:16:::1;::::0;;11188:1:::1;11174:16:::0;;;;;::::1;::::0;;-1:-1:-1;;11174:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;11174:16:0::1;11150:40;;11211:4;11201;11206:1;11201:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11201:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;11236:10:::1;::::0;11226:7;;11236:10;::::1;::::0;11226:4;;11236:10;;11226:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;11226:20:0;;::::1;:7;::::0;;::::1;::::0;;;;;:20;11270:6:::1;::::0;11396:3:::1;::::0;11259:181:::1;::::0;-1:-1:-1;;;11259:181:0;;11270:6;;::::1;::::0;11259:69:::1;::::0;11336:9:::1;::::0;11259:181:::1;::::0;11270:6:::1;::::0;11377:4;;11396:3;;::::1;::::0;11414:15:::1;::::0;11259:181:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;11020:428;10948:500:::0;:::o;11727:111::-;4537:3;;-1:-1:-1;;;;;4537:3:0;4523:10;:17;4514:55;;;;-1:-1:-1;;;4514:55:0;;;;;;;:::i;:::-;11786:9:::1;::::0;::::1;;11797:7;11783:21;11814:9;:16:::0;;-1:-1:-1;;11814:16:0::1;11826:4;11814:16;::::0;;11727:111::o;6924:129::-;-1:-1:-1;;;;;7023:19:0;;;7006:7;7023:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;6924:129::o;20765:231::-;20819:4;20836:25;20864:5;20836:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20836:33:0;;;;;;;;;;;;;;;;;;;;;;;20885:9;20880:85;20904:8;:15;20900:1;:19;20880:85;;;20941:8;20950:1;20941:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20930:22:0;:7;-1:-1:-1;;;;;20930:22:0;;20926:39;;-1:-1:-1;20961:4:0;;20765:231;-1:-1:-1;;;20765:231:0:o;20926:39::-;20921:3;;;;:::i;:::-;;;;20880:85;;;-1:-1:-1;20983:5:0;;20765:231;-1:-1:-1;;;20765:231:0:o;18556:1172::-;18649:14;18666:30;18684:11;18666:17;:30::i;:::-;18649:47;;18719:11;18710:6;:20;18707:32;;;18732:7;18556:1172;;:::o;18707:32::-;18775:16;;;18789:1;18775:16;;;;;;;;18751:21;;18775:16;;;;;;;;;;-1:-1:-1;18775:16:0;18751:40;;18812:4;18802;18807:1;18802:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18802:14:0;;;:7;;;;;;;;;:14;18837:10;;18827:7;;18837:10;;;18827:4;;18837:10;;18827:7;;;;;;:::i;:::-;-1:-1:-1;;;;;18827:20:0;;;:7;;;;;;;;;:20;18871:6;;;18860:69;18937:10;18946:1;18937:6;:10;:::i;:::-;18963:1;18979:4;18998:11;19024:15;18860:190;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19073:10;19063:4;19068:1;19063:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19063:20:0;;;:7;;;;;;;;;:20;19119:6;;;19108:69;19185:10;19194:1;19185:6;:10;:::i;:::-;19215:1;19235:4;19258:11;19288:15;19108:210;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19104:379;;19378:3;;19370:36;;19353:12;;-1:-1:-1;;;;;19378:3:0;;19395:6;;19353:12;19370:36;19353:12;19370:36;19395:6;19378:3;19370:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19352:54;;;19424:7;19421:50;;;-1:-1:-1;;;;;19433:25:0;;19469:1;19433:25;;;:12;:25;;;;;:38;;-1:-1:-1;;;;;;19433:38:0;;;19421:50;19337:146;19104:379;19533:6;19514:16;;:25;;;;:::i;:::-;19495:16;:44;-1:-1:-1;;;;;19586:19:0;;;;;;:6;:19;;;;;:33;;;:42;;19622:6;;19586:42;:::i;:::-;-1:-1:-1;;;;;19550:19:0;;;;;;:6;:19;;;;;:33;;;:78;;;;19693:26;19675:45;;:17;:45::i;:::-;-1:-1:-1;;;;;19639:19:0;;;;;;;:6;:19;;;;;:33;;:81;;;;-1:-1:-1;;;18556:1172:0:o;11846:573::-;-1:-1:-1;;;;;11959:17:0;;11938:4;11959:17;;;:9;:17;;;;;;;;;:41;;-1:-1:-1;;;;;;11980:20:0;;;;;;:9;:20;;;;;;;;11959:41;11955:299;;;12003:42;12019:6;12027:9;12038:6;12003:15;:42::i;:::-;;11955:299;;;12085:34;12093:6;12101:9;12112:6;12085:7;:34::i;:::-;12076:43;;12134:42;12150:6;12158:9;12169:6;12134:15;:42::i;:::-;-1:-1:-1;12194:15:0;;:19;12191:51;;12215:27;12226:15;;12215:10;:27::i;:::-;-1:-1:-1;;;;;12268:32:0;;;;;;:24;:32;;;;;;;;12264:54;;12302:16;12311:6;12302:8;:16::i;:::-;-1:-1:-1;;;;;12333:35:0;;;;;;:24;:35;;;;;;;;12329:60;;12370:19;12379:9;12370:8;:19::i;:::-;-1:-1:-1;12407:4:0;11846:573;;;;;:::o;20142:141::-;20207:7;20260:15;;20242;;20234:5;:23;;;;:::i;:::-;:41;;;;:::i;17086:214::-;-1:-1:-1;;;;;17148:22:0;;;17182:1;17148:22;;;:12;:22;;;;;;;17145:147;;17186:34;17211:8;17186:24;:34::i;17145:147::-;-1:-1:-1;;;;;17269:22:0;;;;;;;:12;:22;;;;;;17236:56;;17259:8;;17269:22;17236;:56::i;17778:770::-;17853:14;17870:30;17888:11;17870:17;:30::i;:::-;17853:47;;17923:11;17914:6;:20;17911:32;;;17936:7;17778:770;:::o;17911:32::-;-1:-1:-1;;;;;17953:29:0;;:39;17983:8;17990:1;17983:6;:8;:::i;:::-;17953:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18027:16:0;;;18041:1;18027:16;;;;;;;;18003:21;;18027:16;;;;;;;;;;-1:-1:-1;18027:16:0;18003:40;;18064:4;18054;18059:1;18054:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18054:14:0;;;:7;;;;;;;;;:14;18089:10;;18079:7;;18089:10;;;18079:4;;18089:10;;18079:7;;;;;;:::i;:::-;-1:-1:-1;;;;;18079:20:0;;;:7;;;;;;;;;:20;18123:6;;;18112:69;18189:10;18198:1;18189:6;:10;:::i;:::-;18215:1;18231:4;18250:11;18276:15;18112:190;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18353:6;18334:16;;:25;;;;:::i;:::-;18315:16;:44;-1:-1:-1;;;;;18406:19:0;;;;;;:6;:19;;;;;:33;;;:42;;18442:6;;18406:42;:::i;:::-;-1:-1:-1;;;;;18370:19:0;;;;;;:6;:19;;;;;:33;;;:78;;;;18513:26;18495:45;;:17;:45::i;:::-;-1:-1:-1;;;;;18459:19:0;;;;;;;:6;:19;;;;;:33;;:81;;;;-1:-1:-1;;17778:770:0:o;14146:454::-;14240:4;-1:-1:-1;;;;;14265:20:0;;14257:62;;;;-1:-1:-1;;;14257:62:0;;14282:2:1;14257:62:0;;;14264:21:1;14321:2;14301:18;;;14294:30;14360:31;14340:18;;;14333:59;14409:18;;14257:62:0;14080:353:1;14257:62:0;-1:-1:-1;;;;;14348:17:0;;;;;;:9;:17;;;;;;14338:27;;;14330:72;;;;-1:-1:-1;;;14330:72:0;;14640:2:1;14330:72:0;;;14622:21:1;;;14659:18;;;14652:30;14718:34;14698:18;;;14691:62;14770:18;;14330:72:0;14438:356:1;14330:72:0;14416:6;14426:1;14416:11;14413:27;;-1:-1:-1;14436:4:0;14429:11;;14413:27;-1:-1:-1;;;;;14451:17:0;;;;;;:9;:17;;;;;:27;;14472:6;;14451:17;:27;;14472:6;;14451:27;:::i;:::-;;;;-1:-1:-1;;;;;;;14489:20:0;;;;;;:9;:20;;;;;:30;;14513:6;;14489:20;:30;;14513:6;;14489:30;:::i;:::-;;;;;;;;14552:9;-1:-1:-1;;;;;14535:35:0;14544:6;-1:-1:-1;;;;;14535:35:0;;14563:6;14535:35;;;;1550:25:1;;1538:2;1523:18;;1404:177;14535:35:0;;;;;;;;-1:-1:-1;14588:4:0;14146:454;;;;;:::o;12427:1711::-;12513:7;12559:4;12536:19;;:27;12533:332;;-1:-1:-1;;;;;12588:33:0;;;;;;:22;:33;;;;;;;;12584:135;;12701:4;12679:19;;12664:12;;:34;;;;:::i;:::-;:41;;;;:::i;:::-;-1:-1:-1;;;;;12631:20:0;;;;;;:9;:20;;;;;;:29;;12654:6;;12631:29;:::i;:::-;:74;;12623:96;;;;-1:-1:-1;;;12623:96:0;;15001:2:1;12623:96:0;;;14983:21:1;15040:1;15020:18;;;15013:29;-1:-1:-1;;;15058:18:1;;;15051:39;15107:18;;12623:96:0;14799:332:1;12623:96:0;-1:-1:-1;;;;;12738:30:0;;;;;;:22;:30;;;;;;;;12734:119;;12840:3;12833:4;12825:5;;12803:19;;12788:12;;:34;;;;:::i;:::-;:42;;;;:::i;:::-;:49;;;;:::i;:::-;:55;;;;:::i;:::-;12778:6;:65;;12770:83;;;;-1:-1:-1;;;12770:83:0;;15338:2:1;12770:83:0;;;15320:21:1;15377:1;15357:18;;;15350:29;-1:-1:-1;;;15395:18:1;;;15388:35;15440:18;;12770:83:0;15136:328:1;12770:83:0;-1:-1:-1;;;;;12880:10:0;;;;;;:2;:10;;;;;;;;;:27;;-1:-1:-1;;;;;;12894:13:0;;;;;;:2;:13;;;;;;;;12880:27;12877:477;;;12957:3;12942:12;;:18;;;;:::i;:::-;12932:6;:28;;12924:48;;;;-1:-1:-1;;;12924:48:0;;15671:2:1;12924:48:0;;;15653:21:1;15710:1;15690:18;;;15683:29;-1:-1:-1;;;15728:18:1;;;15721:37;15775:18;;12924:48:0;15469:330:1;12924:48:0;12987:13;13017:3;13003:11;:6;13012:2;13003:11;:::i;:::-;:17;;;;:::i;:::-;12987:33;;13038:17;13045:9;13038:6;:17::i;:::-;13035:196;;;13057:41;13073:6;13081:9;13092:5;13057:15;:41::i;:::-;;13035:196;;;13121:14;13128:6;13121;:14::i;:::-;13118:113;;;13137:38;13153:6;13161;13169:5;13137:15;:38::i;13118:113::-;13195:36;13211:6;13219:4;13225:5;13195:15;:36::i;:::-;;13118:113;13267:3;13253:11;:6;13262:2;13253:11;:::i;:::-;:17;;;;:::i;:::-;13246:24;;;;;12877:477;13303:14;13310:6;13303;:14::i;:::-;13302:15;:37;;;;;13322:17;13329:9;13322:6;:17::i;:::-;13321:18;13302:37;13299:55;;;-1:-1:-1;13348:6:0;13341:13;;13299:55;13370:3;;13377:1;13370:8;13367:26;;-1:-1:-1;13387:6:0;13380:13;;13367:26;13404:17;13424;13431:9;13424:6;:17::i;:::-;:126;;13547:3;13534:9;;13524:7;;:19;;;;:::i;:::-;13514:30;;:6;:30;:::i;:::-;:36;;;;:::i;:::-;13424:126;;;13508:3;13494:11;;13477:14;;13464:9;;13454:7;;:19;;;;:::i;:::-;13444:30;;:6;:30;:::i;:::-;:47;;;;:::i;:::-;:61;;;;:::i;:::-;:67;;;;:::i;:::-;13404:146;-1:-1:-1;13564:13:0;;13561:67;;13579:49;13595:6;13611:4;13618:9;13579:15;:49::i;:::-;;13561:67;13652:3;;:7;13649:241;;13676:14;13708:3;13702;;13693:6;:12;;;;:::i;:::-;:18;;;;:::i;:::-;13676:35;;13729:17;13736:9;13729:6;:17::i;:::-;13726:152;;;13748:73;13764:6;13772:9;13809:11;;13792:14;;13783:6;:23;;;;:::i;:::-;:37;;;;:::i;:::-;13748:15;:73::i;:::-;;13726:152;;;13841:37;13857:6;13865:4;13871:6;13841:15;:37::i;:::-;;13726:152;13661:229;13649:241;13906:14;13913:6;13906;:14::i;:::-;13902:99;;13937:16;:14;:16::i;:::-;13977:4;-1:-1:-1;;;;;13968:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13902:99;14018:17;14025:9;14018:6;:17::i;:::-;:112;;14126:3;14120;;14111:6;:12;;;;:::i;:::-;:18;;;;:::i;:::-;14101:29;;:6;:29;:::i;:::-;14018:112;;;14094:3;14080:11;;14063:14;;14057:3;;14048:6;:12;;;;:::i;:::-;:29;;;;:::i;:::-;:43;;;;:::i;:::-;:49;;;;:::i;:::-;14038:60;;:6;:60;:::i;:::-;14011:119;12427:1711;-1:-1:-1;;;;;12427:1711:0:o;15878:817::-;-1:-1:-1;;;;;15940:19:0;;15969:1;15940:19;;;:6;:19;;;;;:26;:30;15937:59;;15972:24;15984:11;15972;:24::i;:::-;-1:-1:-1;;;;;16010:19:0;;;;;;:6;:19;;;;;:26;:31;:61;;;;-1:-1:-1;;;;;;16045:22:0;;16070:1;16045:22;;;:9;:22;;;;;;:26;;16010:61;16007:93;;;20393:12;:19;;-1:-1:-1;;;;;20359:31:0;;;;;;:18;:31;;;;;:53;;;20423:30;;;;;;;;;;;;;-1:-1:-1;;;;;;20423:30:0;;;;;;16073:27;-1:-1:-1;;;;;16124:19:0;;16153:1;16124:19;;;:6;:19;;;;;:26;:30;;;;:61;;-1:-1:-1;;;;;;16158:22:0;;;;;;:9;:22;;;;;;:27;16124:61;16121:257;;;-1:-1:-1;;;;;16229:19:0;;;;;;:6;:19;;;;;:26;16215:11;;:40;;16229:26;16215:40;:::i;:::-;16201:11;:54;-1:-1:-1;;;;;16270:19:0;;16299:1;16270:19;;;:6;:19;;;;;:30;16315;16277:11;16315:17;:30::i;16121:257::-;-1:-1:-1;;;;;16393:22:0;;16418:1;16393:22;;;:9;:22;;;;;;:26;16390:298;;-1:-1:-1;;;;;16492:22:0;;;;;;:9;:22;;;;;;;;;16463:6;:19;;;;;;:26;16449:11;;:40;;16463:26;16449:40;:::i;:::-;:65;;;;:::i;:::-;16435:11;:79;-1:-1:-1;;;;;16558:22:0;;;;;;:9;:22;;;;;;;;;16529:6;:19;;;;;;:51;;;16631:45;;:17;:45::i;:::-;-1:-1:-1;;;;;16595:19:0;;;;;;:6;:19;;;;;:33;;:81;15878:817;:::o;14608:1262::-;14684:6;;14675:4;14657:24;;;;:9;:24;;;;;;:33;;:61;;;14704:9;;14694:7;;:19;;;;:::i;:::-;:24;14657:61;14654:73;;;14608:1262::o;14654:73::-;14764:21;14737:24;:48;14832:16;;;14846:1;14832:16;;;;;;;;14798:31;;14832:16;;;;;;;;;;-1:-1:-1;14832:16:0;14798:50;;14887:4;14859:14;14874:1;14859:17;;;;;;;;:::i;:::-;;;;;;:33;-1:-1:-1;;;;;14859:33:0;;;-1:-1:-1;;;;;14859:33:0;;;;;14923:4;14903:14;14918:1;14903:17;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14903:24:0;;;:17;;;;;;;;;;:24;;;;14951:6;;15042:4;14951:6;15024:24;;;:9;:24;;;;;;;;14940:222;;-1:-1:-1;;;14940:222:0;;14951:6;;;;;14940:69;;:222;;15024:24;;14951:6;;15079:14;;15042:4;15136:15;;14940:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15267:24:0;;15207:21;;-1:-1:-1;15242:49:0;;;-1:-1:-1;15239:61:0;;15293:7;;14608:1262::o;15239:61::-;15310:14;15351:24;;15327:21;:48;;;;:::i;:::-;15389:11;;15310:65;;-1:-1:-1;15389:15:0;15386:477;;15445:1;15433:9;;15423:7;;:19;;;;:::i;:::-;:23;15420:431;;;15466:22;15523:9;;15513:7;;:19;;;;:::i;:::-;15500:9;;15491:18;;:6;:18;:::i;:::-;:42;;;;:::i;:::-;15578:15;;15570:56;;15466:67;;-1:-1:-1;15553:12:0;;-1:-1:-1;;;;;15578:15:0;;;;15466:67;;15553:12;15570:56;15553:12;15570:56;15466:67;15578:15;15570:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15552:74;;;15664:7;:108;;15761:11;;15752:6;15734:15;;:24;;;;:::i;:::-;:38;;;;:::i;:::-;15664:108;;;15720:11;;15693:23;15702:14;15693:6;:23;:::i;:::-;15674:15;;:43;;;;:::i;:::-;:57;;;;:::i;:::-;15645:15;;:127;;;;;;;:::i;:::-;;;;-1:-1:-1;15420:431:0;;-1:-1:-1;;;15420:431:0;;15840:11;;15831:6;15813:15;;:24;;;;:::i;:::-;:38;;;;:::i;:::-;15794:15;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;14643:1227:0;;;14608:1262::o;20469:288::-;20585:12;20598:19;;:21;;20618:1;;20598:21;:::i;:::-;20585:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20550:31:0;;;;;:18;:31;;;;;;;;20537:12;:45;;20585:35;;;;;20537:12;:45;;;;;;:::i;:::-;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;20537:83:0;-1:-1:-1;;;;;20537:83:0;;;;;;20689:31;;;;;:18;:31;;;;;;;;20650:12;20663:19;;20689:31;;:18;20537:45;20663:21;;-1:-1:-1;;20663:21:0;:::i;:::-;20650:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20650:35:0;20631:55;;;;;;;;;;;;:89;20731:12;:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;20731:18:0;;;;;-1:-1:-1;;;;;;20731:18:0;;;;;;-1:-1:-1;20469:288:0:o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:173::-;843:20;;-1:-1:-1;;;;;892:31:1;;882:42;;872:70;;938:1;935;928:12;872:70;775:173;;;:::o;953:254::-;1021:6;1029;1082:2;1070:9;1061:7;1057:23;1053:32;1050:52;;;1098:1;1095;1088:12;1050:52;1121:29;1140:9;1121:29;:::i;:::-;1111:39;1197:2;1182:18;;;;1169:32;;-1:-1:-1;;;953:254:1:o;1586:186::-;1645:6;1698:2;1686:9;1677:7;1673:23;1669:32;1666:52;;;1714:1;1711;1704:12;1666:52;1737:29;1756:9;1737:29;:::i;1777:328::-;1854:6;1862;1870;1923:2;1911:9;1902:7;1898:23;1894:32;1891:52;;;1939:1;1936;1929:12;1891:52;1962:29;1981:9;1962:29;:::i;:::-;1952:39;;2010:38;2044:2;2033:9;2029:18;2010:38;:::i;:::-;2000:48;;2095:2;2084:9;2080:18;2067:32;2057:42;;1777:328;;;;;:::o;2110:118::-;2196:5;2189:13;2182:21;2175:5;2172:32;2162:60;;2218:1;2215;2208:12;2233:315;2298:6;2306;2359:2;2347:9;2338:7;2334:23;2330:32;2327:52;;;2375:1;2372;2365:12;2327:52;2398:29;2417:9;2398:29;:::i;:::-;2388:39;;2477:2;2466:9;2462:18;2449:32;2490:28;2512:5;2490:28;:::i;:::-;2537:5;2527:15;;;2233:315;;;;;:::o;2742:127::-;2803:10;2798:3;2794:20;2791:1;2784:31;2834:4;2831:1;2824:15;2858:4;2855:1;2848:15;2874:719;2917:5;2970:3;2963:4;2955:6;2951:17;2947:27;2937:55;;2988:1;2985;2978:12;2937:55;3024:6;3011:20;3050:18;3087:2;3083;3080:10;3077:36;;;3093:18;;:::i;:::-;3168:2;3162:9;3136:2;3222:13;;-1:-1:-1;;3218:22:1;;;3242:2;3214:31;3210:40;3198:53;;;3266:18;;;3286:22;;;3263:46;3260:72;;;3312:18;;:::i;:::-;3352:10;3348:2;3341:22;3387:2;3379:6;3372:18;3433:3;3426:4;3421:2;3413:6;3409:15;3405:26;3402:35;3399:55;;;3450:1;3447;3440:12;3399:55;3514:2;3507:4;3499:6;3495:17;3488:4;3480:6;3476:17;3463:54;3561:1;3554:4;3549:2;3541:6;3537:15;3533:26;3526:37;3581:6;3572:15;;;;;;2874:719;;;;:::o;3598:543::-;3686:6;3694;3747:2;3735:9;3726:7;3722:23;3718:32;3715:52;;;3763:1;3760;3753:12;3715:52;3803:9;3790:23;3832:18;3873:2;3865:6;3862:14;3859:34;;;3889:1;3886;3879:12;3859:34;3912:50;3954:7;3945:6;3934:9;3930:22;3912:50;:::i;:::-;3902:60;;4015:2;4004:9;4000:18;3987:32;3971:48;;4044:2;4034:8;4031:16;4028:36;;;4060:1;4057;4050:12;4028:36;;4083:52;4127:7;4116:8;4105:9;4101:24;4083:52;:::i;:::-;4073:62;;;3598:543;;;;;:::o;4146:454::-;4241:6;4249;4257;4265;4273;4326:3;4314:9;4305:7;4301:23;4297:33;4294:53;;;4343:1;4340;4333:12;4294:53;-1:-1:-1;;4366:23:1;;;4436:2;4421:18;;4408:32;;-1:-1:-1;4487:2:1;4472:18;;4459:32;;4538:2;4523:18;;4510:32;;-1:-1:-1;4589:3:1;4574:19;4561:33;;-1:-1:-1;4146:454:1;-1:-1:-1;4146:454:1:o;4605:180::-;4664:6;4717:2;4705:9;4696:7;4692:23;4688:32;4685:52;;;4733:1;4730;4723:12;4685:52;-1:-1:-1;4756:23:1;;4605:180;-1:-1:-1;4605:180:1:o;5114:260::-;5182:6;5190;5243:2;5231:9;5222:7;5218:23;5214:32;5211:52;;;5259:1;5256;5249:12;5211:52;5282:29;5301:9;5282:29;:::i;:::-;5272:39;;5330:38;5364:2;5353:9;5349:18;5330:38;:::i;:::-;5320:48;;5114:260;;;;;:::o;5379:380::-;5458:1;5454:12;;;;5501;;;5522:61;;5576:4;5568:6;5564:17;5554:27;;5522:61;5629:2;5621:6;5618:14;5598:18;5595:38;5592:161;;5675:10;5670:3;5666:20;5663:1;5656:31;5710:4;5707:1;5700:15;5738:4;5735:1;5728:15;5592:161;;5379:380;;;:::o;5764:351::-;5966:2;5948:21;;;6005:2;5985:18;;;5978:30;6044:29;6039:2;6024:18;;6017:57;6106:2;6091:18;;5764:351::o;6120:127::-;6181:10;6176:3;6172:20;6169:1;6162:31;6212:4;6209:1;6202:15;6236:4;6233:1;6226:15;6252:128;6319:9;;;6340:11;;;6337:37;;;6354:18;;:::i;6736:348::-;6938:2;6920:21;;;6977:2;6957:18;;;6950:30;7016:26;7011:2;6996:18;;6989:54;7075:2;7060:18;;6736:348::o;7368:245::-;7435:6;7488:2;7476:9;7467:7;7463:23;7459:32;7456:52;;;7504:1;7501;7494:12;7456:52;7536:9;7530:16;7555:28;7577:5;7555:28;:::i;7618:125::-;7683:9;;;7704:10;;;7701:36;;;7717:18;;:::i;7874:545::-;7976:2;7971:3;7968:11;7965:448;;;8012:1;8037:5;8033:2;8026:17;8082:4;8078:2;8068:19;8152:2;8140:10;8136:19;8133:1;8129:27;8123:4;8119:38;8188:4;8176:10;8173:20;8170:47;;;-1:-1:-1;8211:4:1;8170:47;8266:2;8261:3;8257:12;8254:1;8250:20;8244:4;8240:31;8230:41;;8321:82;8339:2;8332:5;8329:13;8321:82;;;8384:17;;;8365:1;8354:13;8321:82;;;8325:3;;;7874:545;;;:::o;8595:1352::-;8721:3;8715:10;8748:18;8740:6;8737:30;8734:56;;;8770:18;;:::i;:::-;8799:97;8889:6;8849:38;8881:4;8875:11;8849:38;:::i;:::-;8843:4;8799:97;:::i;:::-;8951:4;;9015:2;9004:14;;9032:1;9027:663;;;;9734:1;9751:6;9748:89;;;-1:-1:-1;9803:19:1;;;9797:26;9748:89;-1:-1:-1;;8552:1:1;8548:11;;;8544:24;8540:29;8530:40;8576:1;8572:11;;;8527:57;9850:81;;8997:944;;9027:663;7821:1;7814:14;;;7858:4;7845:18;;-1:-1:-1;;9063:20:1;;;9181:236;9195:7;9192:1;9189:14;9181:236;;;9284:19;;;9278:26;9263:42;;9376:27;;;;9344:1;9332:14;;;;9211:19;;9181:236;;;9185:3;9445:6;9436:7;9433:19;9430:201;;;9506:19;;;9500:26;-1:-1:-1;;9589:1:1;9585:14;;;9601:3;9581:24;9577:37;9573:42;9558:58;9543:74;;9430:201;-1:-1:-1;;;;;9677:1:1;9661:14;;;9657:22;9644:36;;-1:-1:-1;8595:1352:1:o;10362:168::-;10435:9;;;10466;;10483:15;;;10477:22;;10463:37;10453:71;;10504:18;;:::i;10535:217::-;10575:1;10601;10591:132;;10645:10;10640:3;10636:20;10633:1;10626:31;10680:4;10677:1;10670:15;10708:4;10705:1;10698:15;10591:132;-1:-1:-1;10737:9:1;;10535:217::o;11102:127::-;11163:10;11158:3;11154:20;11151:1;11144:31;11194:4;11191:1;11184:15;11218:4;11215:1;11208:15;11234:135;11273:3;11294:17;;;11291:43;;11314:18;;:::i;:::-;-1:-1:-1;11361:1:1;11350:13;;11234:135::o;13099:461::-;13152:3;13190:5;13184:12;13217:6;13212:3;13205:19;13243:4;13272:2;13267:3;13263:12;13256:19;;13309:2;13302:5;13298:14;13330:1;13340:195;13354:6;13351:1;13348:13;13340:195;;;13419:13;;-1:-1:-1;;;;;13415:39:1;13403:52;;13475:12;;;;13510:15;;;;13451:1;13369:9;13340:195;;;-1:-1:-1;13551:3:1;;13099:461;-1:-1:-1;;;;;13099:461:1:o;13565:510::-;13836:6;13825:9;13818:25;13879:3;13874:2;13863:9;13859:18;13852:31;13799:4;13900:57;13952:3;13941:9;13937:19;13929:6;13900:57;:::i;:::-;-1:-1:-1;;;;;13993:32:1;;;;13988:2;13973:18;;13966:60;-1:-1:-1;14057:2:1;14042:18;14035:34;13892:65;13565:510;-1:-1:-1;;13565:510:1:o;15804:582::-;16103:6;16092:9;16085:25;16146:6;16141:2;16130:9;16126:18;16119:34;16189:3;16184:2;16173:9;16169:18;16162:31;16066:4;16210:57;16262:3;16251:9;16247:19;16239:6;16210:57;:::i;:::-;-1:-1:-1;;;;;16303:32:1;;;;16298:2;16283:18;;16276:60;-1:-1:-1;16367:3:1;16352:19;16345:35;16202:65;15804:582;-1:-1:-1;;;15804:582:1:o;16391:127::-;16452:10;16447:3;16443:20;16440:1;16433:31;16483:4;16480:1;16473:15;16507:4;16504:1;16497:15

Swarm Source

ipfs://2d5baa25d4a2327100d45097782afa03770193d773ead19e77cbb6bb006834b4

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.