CRO Price: $0.09 (-2.07%)

Contract

0x90B29dB06577B0C5624E178A81377F2E0A095d2B

Overview

CRO Balance

Cronos Chain LogoCronos Chain LogoCronos Chain Logo0.449742511876649409 CRO

CRO Value

$0.04 (@ $0.09/CRO)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve179519542025-02-02 12:15:4680 days ago1738498546IN
0x90B29dB0...E0A095d2B
0 CRO0.1512945,200
Approve58372872022-12-02 23:03:03872 days ago1670022183IN
0x90B29dB0...E0A095d2B
0 CRO0.113238274,865.02295941
Approve41171662022-08-11 22:41:56985 days ago1660257716IN
0x90B29dB0...E0A095d2B
0 CRO0.219906524,944.05273743
Approve39540322022-08-01 5:17:09996 days ago1659331029IN
0x90B29dB0...E0A095d2B
0 CRO0.328381937,424.91992027
Approve29329112022-05-25 21:18:251063 days ago1653513505IN
0x90B29dB0...E0A095d2B
0 CRO0.222128854,994.01640373
Approve29103832022-05-24 9:13:261065 days ago1653383606IN
0x90B29dB0...E0A095d2B
0 CRO0.222096634,993.29205419
Approve27085472022-05-10 21:18:351078 days ago1652217515IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve25437342022-04-29 10:45:301090 days ago1651229130IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve25214202022-04-27 19:36:561091 days ago1651088216IN
0x90B29dB0...E0A095d2B
0 CRO0.3113537,000
Approve24809112022-04-24 22:03:441094 days ago1650837824IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve24242332022-04-20 20:40:091098 days ago1650487209IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve23938682022-04-18 14:36:361101 days ago1650292596IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve23869542022-04-18 2:45:551101 days ago1650249955IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve23862012022-04-18 1:31:121101 days ago1650245472IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve23689302022-04-16 20:08:501102 days ago1650139730IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve23327172022-04-14 4:58:571105 days ago1649912337IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve23146742022-04-12 22:06:471106 days ago1649801207IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve23111252022-04-12 15:45:271106 days ago1649778327IN
0x90B29dB0...E0A095d2B
0 CRO0.3113537,000
Approve23110742022-04-12 15:39:501106 days ago1649777990IN
0x90B29dB0...E0A095d2B
0 CRO0.3113537,000
Approve23108492022-04-12 15:13:551107 days ago1649776435IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve23108322022-04-12 15:11:591107 days ago1649776319IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve23106832022-04-12 14:54:411107 days ago1649775281IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve22941002022-04-11 8:46:131108 days ago1649666773IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve22925032022-04-11 6:04:171108 days ago1649657057IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
Approve22879742022-04-10 22:23:181108 days ago1649629398IN
0x90B29dB0...E0A095d2B
0 CRO0.2223955,000
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
39540332022-08-01 5:17:15996 days ago1659331035
0x90B29dB0...E0A095d2B
0.4506941 CRO
39540332022-08-01 5:17:15996 days ago1659331035
0x90B29dB0...E0A095d2B
0.00095158 CRO
39540332022-08-01 5:17:15996 days ago1659331035
0x90B29dB0...E0A095d2B
1.51612752 CRO
39540332022-08-01 5:17:15996 days ago1659331035
0x90B29dB0...E0A095d2B
3.03225504 CRO
39540332022-08-01 5:17:15996 days ago1659331035
0x90B29dB0...E0A095d2B
4.54838256 CRO
32124432022-06-13 8:47:481045 days ago1655110068
0x90B29dB0...E0A095d2B
0.44974251 CRO
32124432022-06-13 8:47:481045 days ago1655110068
0x90B29dB0...E0A095d2B
0.00110277 CRO
32124432022-06-13 8:47:481045 days ago1655110068
0x90B29dB0...E0A095d2B
1.59670478 CRO
32124432022-06-13 8:47:481045 days ago1655110068
0x90B29dB0...E0A095d2B
3.19340956 CRO
32124432022-06-13 8:47:481045 days ago1655110068
0x90B29dB0...E0A095d2B
4.79011435 CRO
29587752022-05-27 15:00:091062 days ago1653663609
0x90B29dB0...E0A095d2B
0.44863973 CRO
29587752022-05-27 15:00:091062 days ago1653663609
0x90B29dB0...E0A095d2B
0.00113036 CRO
29587752022-05-27 15:00:091062 days ago1653663609
0x90B29dB0...E0A095d2B
1.60963899 CRO
29587752022-05-27 15:00:091062 days ago1653663609
0x90B29dB0...E0A095d2B
3.21927799 CRO
29587752022-05-27 15:00:091062 days ago1653663609
0x90B29dB0...E0A095d2B
4.82891698 CRO
29329312022-05-25 21:20:201063 days ago1653513620
0x90B29dB0...E0A095d2B
0.44750936 CRO
29329312022-05-25 21:20:201063 days ago1653513620
0x90B29dB0...E0A095d2B
0.00158625 CRO
29329312022-05-25 21:20:201063 days ago1653513620
0x90B29dB0...E0A095d2B
1.83262723 CRO
29329312022-05-25 21:20:201063 days ago1653513620
0x90B29dB0...E0A095d2B
3.66525446 CRO
29329312022-05-25 21:20:201063 days ago1653513620
0x90B29dB0...E0A095d2B
5.49788169 CRO
29104042022-05-24 9:15:271065 days ago1653383727
0x90B29dB0...E0A095d2B
0.44592311 CRO
29104042022-05-24 9:15:271065 days ago1653383727
0x90B29dB0...E0A095d2B
0.00166652 CRO
29104042022-05-24 9:15:271065 days ago1653383727
0x90B29dB0...E0A095d2B
1.86773024 CRO
29104042022-05-24 9:15:271065 days ago1653383727
0x90B29dB0...E0A095d2B
3.73546048 CRO
29104042022-05-24 9:15:271065 days ago1653383727
0x90B29dB0...E0A095d2B
5.60319073 CRO
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CROBNOBI

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 5 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-03-30
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;


interface IERC20 {
    function totalSupply() external view returns (uint256);
    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 IUniswapV2Router {
    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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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;
}

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

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}


abstract contract Ownable {
    address private _owner;
    mapping(address => bool) private authorized;

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

    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        authorized[msgSender] = true;
        emit OwnershipTransferred(address(0), msgSender);
    }
    
    function owner() public view virtual returns (address) {
        return _owner;
    }
    
    function authorize(address account, bool _authorize) public onlyOwner{
        authorized[account] = _authorize;
    }
    
    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    
    modifier onlyAuthorized() {
        require(authorized[msg.sender], "Ownable: caller is not authorized");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is IERC20 {

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }
    
    function name() public view virtual returns (string memory) {
        return _name;
    }
    
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }
    
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }
    
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        return true;
    }
    
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue);
        return true;
    }
    
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        
        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
    }
    
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply = _totalSupply + amount;
        _balances[account] = _balances[account] + amount;
        emit Transfer(address(0), account, amount);
    }
    
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account] - amount;
        _totalSupply = _totalSupply - amount;
        emit Transfer(account, address(0), amount);
    }
    
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }
    
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

contract ZuckDividendDistributor is IDividendDistributor {
    
    address _token;
    address public _owner;

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

    // BSC Polkadot-PEG  
    IERC20 REWARD = IERC20(0x7083609fCE4d1d8Dc0C979AAb8c869Ea2C873402); 
    
    IUniswapV2Router _uniswapV2Router;
    
    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;

    mapping(address => Share) public shares;

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

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

    uint256 currentIndex;

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

    modifier onlyToken() {
        require(msg.sender == _token || msg.sender == _owner);
        _;
    }
    
    constructor(address _router, address owner_) {
        _uniswapV2Router = IUniswapV2Router(_router);
        _token = msg.sender;
        _owner = owner_;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

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

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

        totalShares = totalShares - shares[shareholder].amount + amount;
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit() public payable  {
        
        address[] memory path =  new address[](2);
        path[0] = _uniswapV2Router.WETH();
        path[1] = address(REWARD);
        _uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
            );
        uint256 newBalance = REWARD.balanceOf(address(this));
        
        totalDividends = totalDividends + newBalance;
        dividendsPerShare = dividendsPerShare + 
            dividendsPerShareAccuracyFactor * newBalance / totalShares;
    }
    
    receive() external payable {
        this.deposit{value: msg.value}();
    }

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

        if (shareholderCount == 0) {
            return;
        }

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

        uint256 iterations = 0;

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

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

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

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

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

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed + amount;
            //(bool success, ) = shareholder.call{value: amount, gas: 3000}(""); success; //Handle
            REWARD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised + amount;
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount);
        }
    }

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

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

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

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

        return shareholderTotalDividends - shareholderTotalExcluded;
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share * dividendsPerShare / dividendsPerShareAccuracyFactor;
    }

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

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

contract CROBNOBI is ERC20, Ownable {
   
    IUniswapV2Router public uniswapV2Router;
    address public immutable uniswapV2Pair;

    

    ZuckDividendDistributor public dividendDistributor;
    
    address public deadAddress = address(0x0000000000000000000000000000000000000000);
    address public marketingAddress;
    
    
    uint256 private constant TOTAL_SUPPLY = 1e12; // 1 T tokens
    uint256 private constant DECIMALS = 1e18;
    
    uint256 public maxTx = 5 * TOTAL_SUPPLY / 1000 * (DECIMALS);               // 0.5%  of total supply, 5   B tokens
    uint256 public swapTokensAtAmount = 5 * TOTAL_SUPPLY / 1e4 * (DECIMALS);   // 0.05% of total supply, 500 M tokens
    uint256 public maxWallet = 20 * TOTAL_SUPPLY / 1000 * (DECIMALS);          // 2.0%  of total supply, 20  B tokens  

    uint256 public rewardsFee;
    uint256 public liquidityFee;  
    uint256 public marketingFee; 
    uint256 public sellFeeIncrease;
    uint256 public totalFees;   
    
    bool private swapping;
    
    uint256 private nAntiBotBlocks;
    uint256 private antiBotDuration;
    uint256 private launchBlock;
    uint256 private tradeCooldown;
    bool private antiBotActive = false;
    mapping (address => uint256) timeLastTrade;
    mapping (address => bool) launchSniper;
    
    bool private tradingIsEnabled = false;
    bool private hasLaunched = false;
    
    bool public intensify = false;
    bool public shouldBurnFee = false;
    uint256 public intensifyDuration;
    uint256 public intensifyStart;
    
    uint256 public burnAmount = 0;
    bool public accumulatingForBurn = false;
    bool private inBurn = false;
    
    // use by default 400,000 gas to process auto-claiming dividends
    uint256 public gasForProcessing = 4e5;

    mapping (address => bool) public isExcludedFromFees;
    mapping (address => bool) public isExcludedFromDividends;

    mapping (address => bool) public isPair;


    event Launch(uint256 indexed nAntiBotBlocks);
    event SetFees(uint256 indexed FTMRewardsFee, uint256 indexed marketingFee, uint256 indexed liquidityFee);
    event SetTradeRestrictions(uint256 indexed maxTx, uint256 indexed maxWallet);
    event SetSwapTokensAtAmount(uint256 indexed swapTokensAtAmount);  
    
    event UpdateDividendDistributor(address indexed newAddress, address indexed oldAddress);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromDividends(address indexed account, bool indexed shouldExclude);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );

    event SendDividends(
    	uint256 FTMRewards
    );

    event ProcessedDividendDistributor(
    	uint256 iterations,
    	uint256 claims,
        uint256 lastProcessedIndex,
    	bool indexed automatic,
    	uint256 gas,
    	address indexed processor
    );

    constructor() ERC20("CROBNOBI", "$CRINJA") {
        
        uint256 _rewardsFee = 0;
        uint256 _liquidityFee = 2;
        uint256 _marketingFee = 2;
        uint256 _sellFeeIncrease = 4;

        rewardsFee = _rewardsFee;
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        sellFeeIncrease = _sellFeeIncrease;
        totalFees = _rewardsFee + _liquidityFee + _marketingFee;

    	// CRO MAINNET MMFinace
    	IUniswapV2Router _uniswapV2Router = IUniswapV2Router(0x145677FC4d9b8F19B5D56d1820c48e0443049a30);
    	
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        
        dividendDistributor = new ZuckDividendDistributor(address(_uniswapV2Router), owner());
    	marketingAddress = address(0xCA4eA7B1523Bd1368caDb56192F1329435c7B262);
        
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        excludeFromDividends(address(this), true);
        excludeFromDividends(address(dividendDistributor), true);
        excludeFromDividends(address(_uniswapV2Router), true);

        excludeFromFees(deadAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(owner(), true);

        /*
            _mint is an internal function in that is only called here,
            and CANNOT be called ever again.
        */
        _mint(owner(), TOTAL_SUPPLY * (DECIMALS));
    }
    
    modifier inSwap {
        swapping = true;
        _;
        swapping = false;
    }
    
    modifier inburn{
        inBurn = true;
        _; 
        inBurn = false;
    }
    
    function initiateAntiBot(uint256 _antiBotDuration) public onlyOwner{
        require(!tradingIsEnabled, "Project already launched.");
        antiBotDuration = _antiBotDuration;
        antiBotActive = true;
        tradingIsEnabled = true;
    }
    
    function launch(uint256 _nAntiBotBlocks,uint256 _tradeCooldown) public onlyOwner{
        require(!hasLaunched, "Project already launched.");
        nAntiBotBlocks = _nAntiBotBlocks;
        launchBlock = block.number;
        tradeCooldown = _tradeCooldown;
        hasLaunched = true;
        
        emit Launch(_tradeCooldown);
    }

    function updateDividendDistributor(address newAddress) public onlyOwner {
        require(newAddress != address(dividendDistributor), "Zuck: The dividend distributor already has that address");

        ZuckDividendDistributor newDividendDistributor = ZuckDividendDistributor(payable(newAddress));

        require(newDividendDistributor._owner() == address(this), "Zuck: The new dividend distributor must be owned by the Test token contract");

        excludeFromDividends(address(newDividendDistributor), true);
        excludeFromDividends(address(this), true);
        excludeFromDividends(address(uniswapV2Router), true);

        emit UpdateDividendDistributor(newAddress, address(dividendDistributor));

        dividendDistributor = newDividendDistributor;
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "Test: The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router(newAddress);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(isExcludedFromFees[account] != excluded, "Test: Account is already the value of 'excluded'");
        isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function excludeFromDividends(address account, bool shouldExclude) public onlyOwner {
        isExcludedFromDividends[account] = shouldExclude;
        emit ExcludeFromDividends(account, shouldExclude);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Test: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        if(value) {
            excludeFromDividends(pair, true);
        }

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue >= 200000 && newValue <= 800000, "Test: gasForProcessing must be between 200,000 and 800,000");
        require(newValue != gasForProcessing, "Test: Cannot update gasForProcessing to same value");
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) public onlyOwner{
        
        dividendDistributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }
    
    function getClaimWait() external view returns(uint256) {
        return dividendDistributor.minPeriod();
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendDistributor.totalDistributed();
    }
   
    function claim() external {
		dividendDistributor.claimDividend();
    }

    function getNumberOfDividendTokenHolders() external view returns(uint256) {
        return dividendDistributor.totalShares();
    }
    
    function setFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _rewardsFee, uint256 _sellFeeIncrease) public onlyOwner{
        require(0 <= _rewardsFee && _rewardsFee <= 5, "Requested rewardsFee fee not within acceptable range.");
        require(0 <= _liquidityFee && _liquidityFee <= 5 , "Requested liquidity fee not within acceptable range.");
        require(0 <= _marketingFee && _marketingFee <= 5, "Requested marketing fee not within acceptable range.");
        require(0 <= _sellFeeIncrease && _sellFeeIncrease <= 6, "Requested sell fee increase not within acceptable range.");
        require(0 < _marketingFee + _liquidityFee, "Total fee amount must be strictly positive.");
        
        rewardsFee = _rewardsFee;
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee; 
        sellFeeIncrease = _sellFeeIncrease;
        totalFees = _rewardsFee + _liquidityFee + _marketingFee;
        
        emit SetFees(liquidityFee, marketingFee, rewardsFee);  
    }
    
    function setTradeRestrictions(uint256 _maxTx, uint256 _maxWallet) public onlyOwner{
        require(_maxTx >= (5 * TOTAL_SUPPLY / 1000), "Requested max transaction amount too low.");
        require(_maxWallet >= (20 * TOTAL_SUPPLY / 1000), "Requested max allowable wallet amount too low.");
        
        maxTx = _maxTx * DECIMALS;
        maxWallet = _maxWallet * DECIMALS;
        
        emit SetTradeRestrictions(maxTx, maxWallet);
    }

    function setSwapTokensAtAmount(uint256 _swapTokensAtAmount) public onlyOwner{
        require(5 * TOTAL_SUPPLY / 1000 <= _swapTokensAtAmount && _swapTokensAtAmount <= 2 * TOTAL_SUPPLY / 100,
        "Requested contract swap amount out of acceptable range.");
        
        swapTokensAtAmount = _swapTokensAtAmount * DECIMALS;
         
         emit SetSwapTokensAtAmount(swapTokensAtAmount);  
    }
    
    function checkValidTrade(address from, address to, uint256 amount) private view{
        if (from != owner() && to != owner() && !isExcludedFromFees[from]) {
            require(tradingIsEnabled, "Project has yet to launch.");
            require(amount <= maxTx, "Transfer amount exceeds the maxTxAmount."); 
            if (isPair[from]){
                require(balanceOf(address(to)) + amount <= maxWallet, "Token purchase implies maxWallet violation.");
            }
        } 
    }
    
    function _transfer(address from, address to, uint256 amount) internal override {
        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
    
        checkValidTrade(from, to, amount);
        bool takeFee = tradingIsEnabled && !swapping;
        
        if(isExcludedFromFees[from] || isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        if(takeFee) {
            uint256 fees;
            bool _burnFees = false;
           if(antiBotActive){
               if(isPair[from]){
                   require(!launchSniper[to], "Do not buy before official launch.");
                   if(!hasLaunched){
                       super._transfer(from, address(this), amount);
                       launchSniper[to] = true;
                       return;
                   }
                   if(timeLastTrade[to] != 0){
                       require(block.number > timeLastTrade[to] + tradeCooldown, "Trade too frequent.");
                   }
                   timeLastTrade[to] = block.number;
               }
               
                if(block.number < launchBlock + nAntiBotBlocks){
                    fees = amount * 99 / 100;    
                }
                else{
                    antiBotActive = block.number > launchBlock + antiBotDuration ? false : antiBotActive;
                    (uint256 fee, bool burnFees) = calculateFee(from);
                    _burnFees = burnFees;
                    fees = amount * fee / 100;
                }
           }
           else{
            (uint256 fee, bool burnFees) = calculateFee(from);
            _burnFees = burnFees;
            fees = amount * fee / 100;   
           }

        	amount = amount - fees;
            super._transfer(from, (_burnFees ? deadAddress : address(this)), fees);
        }
        
        if(accumulatingForBurn){
            if(shouldBurn()){
                doBurn(burnAmount);
            }    
        }
        else if(shouldSwap(from)) { 
            swapTokens(swapTokensAtAmount);
        }
        
        super._transfer(from, to, amount);

        if(!isExcludedFromDividends[from])
            try dividendDistributor.setShare(payable(from), balanceOf(from)) {} catch {}
        if(!isExcludedFromDividends[to])
            try dividendDistributor.setShare(payable(to), balanceOf(to)) {} catch {}
        
        if(tradingIsEnabled && !swapping && !antiBotActive) {
	    	try dividendDistributor.process(gasForProcessing) {
	    	} catch {}
        }
    }
    
    function rush(bool _shouldBurn, uint256 _minutes) external onlyAuthorized{
        require(_minutes <= 120, "Rush may not last over two hours.");
        intensify = true;
        shouldBurnFee = _shouldBurn;
        intensifyDuration = _minutes * 1 minutes;
        intensifyStart = block.timestamp;
    }
    
    function calculateFee(address from) private returns (uint256, bool){
        uint256 fee;
        if(intensify){
            uint256 halfTime = intensifyStart  + intensifyDuration / 2;
            uint256 fullTime = intensifyStart  + intensifyDuration;
            
            if(block.timestamp < halfTime){
                fee = isPair[from] ? 0 : 20;
                return (fee, shouldBurnFee);
            }
            else if(block.timestamp < fullTime){
                fee = isPair[from] ? 5 : 15;
                return (fee, shouldBurnFee);
            }
            else{
                fee = isPair[from] ? totalFees : totalFees + sellFeeIncrease;
                intensify = false;
                return (fee, false);
            }
        }
        else{
            fee = isPair[from] ? totalFees : totalFees + sellFeeIncrease;
            return (fee, false);
        }
    }
    
    function shouldBurn() private view returns (bool){
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canBurn = contractTokenBalance >= burnAmount;
        return tradingIsEnabled && canBurn &&
        !inBurn && !antiBotActive;
    }
    
    function planBurn(uint256 _burnNumerator, uint256 _burnDenominator) public onlyAuthorized {
        burnAmount = TOTAL_SUPPLY * DECIMALS * _burnNumerator / _burnDenominator;
        accumulatingForBurn = true;
    } 
    
    function doBurn(uint256 _burnAmount) private inburn {
        super._transfer(address(this), deadAddress, _burnAmount);
        accumulatingForBurn = false;
    }
    
    function shouldSwap(address from) private view returns (bool){
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        
        return tradingIsEnabled && canSwap && !swapping &&
        !isPair[from] && !isExcludedFromFees[from] && !antiBotActive;
    }    
        
    function swapTokens(uint256 tokens) private inSwap {
        uint256 LPtokens = tokens * liquidityFee / totalFees;
        uint256 halfLPTokens = LPtokens / 2;
        uint256 marketingtokens = tokens * marketingFee / totalFees;
        uint256 rewardTokens = tokens - LPtokens - marketingtokens;
        uint256 swapAmount = halfLPTokens + marketingtokens + rewardTokens;
        uint256 initialBalance = address(this).balance;

        swapTokensForEth(swapAmount); 
         
        uint256 newBalance = address(this).balance - initialBalance;
        
        uint256 BNBForLP = newBalance * halfLPTokens / swapAmount;
        uint256 BNBForMarketing = newBalance * marketingtokens / swapAmount;
        
        (bool temp,) = payable(marketingAddress).call{value: BNBForMarketing, gas: 30000}(""); temp; //warning-suppresion 
        
        if(halfLPTokens>0){
            addLiquidity(halfLPTokens, BNBForLP);
            emit SwapAndLiquify(halfLPTokens, BNBForLP);
        }
        uint256 BNBForRewards = address(this).balance;
        try dividendDistributor.deposit{value: BNBForRewards}() {} catch{} //warning-suppresion 
        emit SendDividends(BNBForRewards);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
       uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }
    
    function buybackStuckBNB(uint256 percent) public onlyAuthorized {
        uint256 amountToBuyBack = address(this).balance * percent / 100;
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountToBuyBack}(
            0, // accept any amount of Tokens
            path,
            deadAddress, 
            block.timestamp
        );
    } 
    
    function airdrop(address sender, address[] calldata recipients, uint256[] calldata values) external onlyOwner {
        require(recipients.length == values.length, "Mismatch between Address and token count");
        for (uint256 i = 0; i < recipients.length; i++) {
            _transfer(sender, recipients[i], values[i] * DECIMALS);
        }
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"shouldExclude","type":"bool"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nAntiBotBlocks","type":"uint256"}],"name":"Launch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendDistributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"FTMRewards","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"FTMRewardsFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SetSwapTokensAtAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"maxTx","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"SetTradeRestrictions","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendDistributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"accumulatingForBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_authorize","type":"bool"}],"name":"authorize","outputs":[],"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":"burnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"buybackStuckBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract ZuckDividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"shouldExclude","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","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":"uint256","name":"_antiBotDuration","type":"uint256"}],"name":"initiateAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"intensify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"intensifyDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"intensifyStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nAntiBotBlocks","type":"uint256"},{"internalType":"uint256","name":"_tradeCooldown","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnNumerator","type":"uint256"},{"internalType":"uint256","name":"_burnDenominator","type":"uint256"}],"name":"planBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_shouldBurn","type":"bool"},{"internalType":"uint256","name":"_minutes","type":"uint256"}],"name":"rush","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeIncrease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"},{"internalType":"uint256","name":"_sellFeeIncrease","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensAtAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setTradeRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldBurnFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600980546001600160a01b0319169055670de0b6b3a76400006103e86200003264e8d4a51000600562000965565b6200003e919062000987565b6200004a919062000965565b600b55670de0b6b3a76400006127106200006b64e8d4a51000600562000965565b62000077919062000987565b62000083919062000965565b600c55670de0b6b3a76400006103e8620000a464e8d4a51000601462000965565b620000b0919062000987565b620000bc919062000965565b600d556018805460ff19169055601b805463ffffffff191690556000601e55601f805461ffff1916905562061a80602055348015620000fa57600080fd5b50604080518082018252600881526743524f424e4f424960c01b602080830191825283518085019094526007845266244352494e4a4160c81b9084015281519192916200014a916003916200089b565b508051620001609060049060208401906200089b565b5050600580543361010081026001600160a81b031990921691909117601217909155600081815260066020526040808220805460ff191660011790555191925082917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000600e8190556002600f819055601081905560046011819055819081620001f18186620009aa565b620001fd9190620009aa565b601281905550600073145677fc4d9b8f19b5d56d1820c48e0443049a3090506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025857600080fd5b505afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002939190620009c5565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002dc57600080fd5b505afa158015620002f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003179190620009c5565b6040518363ffffffff1660e01b815260040162000336929190620009f7565b602060405180830381600087803b1580156200035157600080fd5b505af115801562000366573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038c9190620009c5565b600780546001600160a01b0319166001600160a01b03858116919091179091558116608052905081620003be620004ea565b604051620003cc906200092a565b620003d9929190620009f7565b604051809103906000f080158015620003f6573d6000803e3d6000fd5b50600880546001600160a01b03929092166001600160a01b0319928316179055600a805490911673ca4ea7b1523bd1368cadb56192f1329435c7b26217905562000442816001620004fe565b6200044f30600162000610565b60085462000468906001600160a01b0316600162000610565b6200047582600162000610565b6009546200048e906001600160a01b0316600162000698565b6200049b30600162000698565b620004b1620004a9620004ea565b600162000698565b620004de620004bf620004ea565b620004d8670de0b6b3a764000064e8d4a5100062000965565b620007b5565b50505050505062000a83565b60055461010090046001600160a01b031690565b6001600160a01b03821660009081526023602052604090205460ff1615158115151415620005995760405162461bcd60e51b815260206004820152603e60248201527f546573743a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c7565000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152602360205260409020805460ff19168215801591909117909155620005d457620005d482600162000610565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b336200061b620004ea565b6001600160a01b031614620006445760405162461bcd60e51b8152600401620005909062000a11565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be91a35050565b33620006a3620004ea565b6001600160a01b031614620006cc5760405162461bcd60e51b8152600401620005909062000a11565b6001600160a01b03821660009081526021602052604090205460ff1615158115151415620007565760405162461bcd60e51b815260206004820152603060248201527f546573743a204163636f756e7420697320616c7265616479207468652076616c60448201526f7565206f6620276578636c756465642760801b606482015260840162000590565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200080d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000590565b806002546200081d9190620009aa565b6002556001600160a01b03821660009081526020819052604090205462000846908290620009aa565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620008a99062000a46565b90600052602060002090601f016020900481019282620008cd576000855562000918565b82601f10620008e857805160ff191683800117855562000918565b8280016001018555821562000918579182015b8281111562000918578251825591602001919060010190620008fb565b506200092692915062000938565b5090565b610e7e80620041ad83390190565b5b8082111562000926576000815560010162000939565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200098257620009826200094f565b500290565b600082620009a557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009c057620009c06200094f565b500190565b600060208284031215620009d857600080fd5b81516001600160a01b0381168114620009f057600080fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168062000a5b57607f821691505b6020821081141562000a7d57634e487b7160e01b600052602260045260246000fd5b50919050565b60805161370762000aa660003960008181610525015261197801526137076000f3fe6080604052600436106102955760003560e01c8063025ff12f146102a15780630483f7a0146102c357806306fdde03146102e3578063095ea7b31461030e57806313114a9d1461033e5780631694505e1461036257806318160ddd1461039a5780631e3fe7db146103af57806323b872dd146103cf57806327c8f835146103ef57806328d38a1e1461040f5780632bb14e1d146104305780632d1fb389146104465780632d48e8961461046657806330bb4cff14610486578063313ce5671461049b57806339509351146104bd5780633cc66d4d146104dd578063486a7e6b146104fd57806349bd5a5e146105135780634e71d92d146105475780634fbee1931461055c57806361f9fe5f1461058c57806364b0f653146105ac57806365b8dbc0146105c15780636b67c4df146105e15780636fcba377146105f757806370a0823114610617578063715018a6146106375780637437681e1461064c578063822cb4901461066257806382760cd214610682578063871c128d146106a25780638da5cb5b146106c257806395d89b41146106d757806398118cb4146106ec5780639a7a23d6146107025780639c1b8af5146107225780639f00ad8e14610738578063a0c68c1d1461074e578063a26579ad14610768578063a457c2d71461077d578063a5ece9411461079d578063a9059cbb146107bd578063ada00ad6146107dd578063afa4f3b2146107fd578063bad3ea6a1461081d578063c02466681461083d578063c705c5691461085d578063dd62ed3e1461088d578063e2f45605146108d3578063e5e31b13146108e9578063eed20cd514610919578063f0329cb51461092f578063f2fde38b1461094f578063f8b45b051461096f578063fd0ba57714610985578063ff1a01d71461099b57600080fd5b3661029c57005b600080fd5b3480156102ad57600080fd5b506102c16102bc366004613170565b6109bb565b005b3480156102cf57600080fd5b506102c16102de366004613207565b610ad4565b3480156102ef57600080fd5b506102f8610b57565b604051610305919061323c565b60405180910390f35b34801561031a57600080fd5b5061032e610329366004613291565b610be9565b6040519015158152602001610305565b34801561034a57600080fd5b5061035460125481565b604051908152602001610305565b34801561036e57600080fd5b50600754610382906001600160a01b031681565b6040516001600160a01b039091168152602001610305565b3480156103a657600080fd5b50600254610354565b3480156103bb57600080fd5b506102c16103ca3660046132bd565b610bff565b3480156103db57600080fd5b5061032e6103ea3660046132e1565b610e47565b3480156103fb57600080fd5b50600954610382906001600160a01b031681565b34801561041b57600080fd5b50601b5461032e906301000000900460ff1681565b34801561043c57600080fd5b50610354600e5481565b34801561045257600080fd5b506102c1610461366004613207565b610e99565b34801561047257600080fd5b506102c1610481366004613322565b610ef3565b34801561049257600080fd5b50610354610f84565b3480156104a757600080fd5b5060055460405160ff9091168152602001610305565b3480156104c957600080fd5b5061032e6104d8366004613291565b611006565b3480156104e957600080fd5b506102c16104f8366004613344565b61103d565b34801561050957600080fd5b50610354601e5481565b34801561051f57600080fd5b506103827f000000000000000000000000000000000000000000000000000000000000000081565b34801561055357600080fd5b506102c16110b1565b34801561056857600080fd5b5061032e6105773660046132bd565b60216020526000908152604090205460ff1681565b34801561059857600080fd5b50601b5461032e9062010000900460ff1681565b3480156105b857600080fd5b5061035461111b565b3480156105cd57600080fd5b506102c16105dc3660046132bd565b611160565b3480156105ed57600080fd5b5061035460105481565b34801561060357600080fd5b506102c161061236600461335d565b61125c565b34801561062357600080fd5b506103546106323660046132bd565b611519565b34801561064357600080fd5b506102c1611534565b34801561065857600080fd5b50610354600b5481565b34801561066e57600080fd5b506102c161067d366004613322565b6115a1565b34801561068e57600080fd5b506102c161069d366004613322565b61172d565b3480156106ae57600080fd5b506102c16106bd366004613344565b6117d0565b3480156106ce57600080fd5b50610382611924565b3480156106e357600080fd5b506102f8611938565b3480156106f857600080fd5b50610354600f5481565b34801561070e57600080fd5b506102c161071d366004613207565b611947565b34801561072e57600080fd5b5061035460205481565b34801561074457600080fd5b5061035460115481565b34801561075a57600080fd5b50601f5461032e9060ff1681565b34801561077457600080fd5b50610354611a40565b34801561078957600080fd5b5061032e610798366004613291565b611a88565b3480156107a957600080fd5b50600a54610382906001600160a01b031681565b3480156107c957600080fd5b5061032e6107d8366004613291565b611abf565b3480156107e957600080fd5b506102c16107f8366004613322565b611acc565b34801561080957600080fd5b506102c1610818366004613344565b611b3c565b34801561082957600080fd5b50600854610382906001600160a01b031681565b34801561084957600080fd5b506102c1610858366004613207565b611c61565b34801561086957600080fd5b5061032e6108783660046132bd565b60226020526000908152604090205460ff1681565b34801561089957600080fd5b506103546108a836600461338f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108df57600080fd5b50610354600c5481565b3480156108f557600080fd5b5061032e6109043660046132bd565b60236020526000908152604090205460ff1681565b34801561092557600080fd5b50610354601d5481565b34801561093b57600080fd5b506102c161094a366004613344565b611d77565b34801561095b57600080fd5b506102c161096a3660046132bd565b611f2a565b34801561097b57600080fd5b50610354600d5481565b34801561099157600080fd5b50610354601c5481565b3480156109a757600080fd5b506102c16109b63660046133c8565b612013565b336109c4611924565b6001600160a01b0316146109f35760405162461bcd60e51b81526004016109ea906133e4565b60405180910390fd5b828114610a535760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b60648201526084016109ea565b60005b83811015610acc57610aba86868684818110610a7457610a74613419565b9050602002016020810190610a8991906132bd565b670de0b6b3a7640000868686818110610aa457610aa4613419565b90506020020135610ab59190613445565b6120d1565b80610ac481613464565b915050610a56565b505050505050565b33610add611924565b6001600160a01b031614610b035760405162461bcd60e51b81526004016109ea906133e4565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be91a35050565b606060038054610b669061347f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b929061347f565b8015610bdf5780601f10610bb457610100808354040283529160200191610bdf565b820191906000526020600020905b815481529060010190602001808311610bc257829003601f168201915b5050505050905090565b6000610bf63384846125cf565b50600192915050565b33610c08611924565b6001600160a01b031614610c2e5760405162461bcd60e51b81526004016109ea906133e4565b6008546001600160a01b0382811691161415610cac5760405162461bcd60e51b815260206004820152603760248201527f5a75636b3a20546865206469766964656e64206469737472696275746f7220616044820152766c7265616479206861732074686174206164647265737360481b60648201526084016109ea565b6000819050306001600160a01b0316816001600160a01b031663b2bdfa7b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cf457600080fd5b505afa158015610d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2c91906134ba565b6001600160a01b031614610dbc5760405162461bcd60e51b815260206004820152604b60248201527f5a75636b3a20546865206e6577206469766964656e642064697374726962757460448201527f6f72206d757374206265206f776e656420627920746865205465737420746f6b60648201526a195b8818dbdb9d1c9858dd60aa1b608482015260a4016109ea565b610dc7816001610ad4565b610dd2306001610ad4565b600754610de9906001600160a01b03166001610ad4565b6008546040516001600160a01b03918216918416907f4c1beaad9b2fcfd2ce776571d2ebc4750ba710de22bc57bd3fee8737ee3e3a9090600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b6000610e548484846120d1565b6001600160a01b038416600090815260016020908152604080832033808552925290912054610e8f918691610e8a9086906134d7565b6125cf565b5060019392505050565b33610ea2611924565b6001600160a01b031614610ec85760405162461bcd60e51b81526004016109ea906133e4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b33610efc611924565b6001600160a01b031614610f225760405162461bcd60e51b81526004016109ea906133e4565b6008546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610f7057600080fd5b505af1158015610acc573d6000803e3d6000fd5b6008546040805163efca2eed60e01b815290516000926001600160a01b03169163efca2eed916004808301926020929190829003018186803b158015610fc957600080fd5b505afa158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100191906134ee565b905090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bf6918590610e8a908690613507565b33611046611924565b6001600160a01b03161461106c5760405162461bcd60e51b81526004016109ea906133e4565b601b5460ff161561108f5760405162461bcd60e51b81526004016109ea9061351f565b60155560188054600160ff199182168117909255601b80549091169091179055565b600860009054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b50505050565b60085460408051633a98ef3960e01b815290516000926001600160a01b031691633a98ef39916004808301926020929190829003018186803b158015610fc957600080fd5b33611169611924565b6001600160a01b03161461118f5760405162461bcd60e51b81526004016109ea906133e4565b6007546001600160a01b03828116911614156111ff5760405162461bcd60e51b815260206004820152602960248201527f546573743a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b60648201526084016109ea565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b33611265611924565b6001600160a01b03161461128b5760405162461bcd60e51b81526004016109ea906133e4565b60058211156112fa5760405162461bcd60e51b815260206004820152603560248201527f526571756573746564207265776172647346656520666565206e6f74207769746044820152743434b71030b1b1b2b83a30b13632903930b733b29760591b60648201526084016109ea565b60058311156113685760405162461bcd60e51b815260206004820152603460248201527f526571756573746564206c697175696469747920666565206e6f74207769746860448201527334b71030b1b1b2b83a30b13632903930b733b29760611b60648201526084016109ea565b60058411156113d65760405162461bcd60e51b815260206004820152603460248201527f526571756573746564206d61726b6574696e6720666565206e6f74207769746860448201527334b71030b1b1b2b83a30b13632903930b733b29760611b60648201526084016109ea565b60068111156114485760405162461bcd60e51b815260206004820152603860248201527f5265717565737465642073656c6c2066656520696e637265617365206e6f74206044820152773bb4ba3434b71030b1b1b2b83a30b13632903930b733b29760411b60648201526084016109ea565b6114528385613507565b6000106114b55760405162461bcd60e51b815260206004820152602b60248201527f546f74616c2066656520616d6f756e74206d757374206265207374726963746c60448201526a3c903837b9b4ba34bb329760a91b60648201526084016109ea565b600e829055600f83905560108490556011819055836114d48484613507565b6114de9190613507565b601255600e54601054600f546040517f37322890d66d781059d797be5e2f27dc160a34d8bc0a8e09116cb9a773ce88ef90600090a450505050565b6001600160a01b031660009081526020819052604090205490565b3361153d611924565b6001600160a01b0316146115635760405162461bcd60e51b81526004016109ea906133e4565b60055460405160009161010090046001600160a01b0316906000805160206136b2833981519152908390a360058054610100600160a81b0319169055565b336115aa611924565b6001600160a01b0316146115d05760405162461bcd60e51b81526004016109ea906133e4565b6103e86115e364e8d4a510006005613445565b6115ed9190613552565b82101561164e5760405162461bcd60e51b815260206004820152602960248201527f526571756573746564206d6178207472616e73616374696f6e20616d6f756e74604482015268103a37b7903637bb9760b91b60648201526084016109ea565b6103e861166164e8d4a510006014613445565b61166b9190613552565b8110156116d15760405162461bcd60e51b815260206004820152602e60248201527f526571756573746564206d617820616c6c6f7761626c652077616c6c6574206160448201526d36b7bab73a103a37b7903637bb9760911b60648201526084016109ea565b6116e3670de0b6b3a764000083613445565b600b556116f8670de0b6b3a764000082613445565b600d819055600b546040517fc66babc31501a8b9fd3efae98ba8279008417a4d125e542a34ba6657305bf8ff90600090a35050565b33611736611924565b6001600160a01b03161461175c5760405162461bcd60e51b81526004016109ea906133e4565b601b54610100900460ff16156117845760405162461bcd60e51b81526004016109ea9061351f565b6014829055436016556017819055601b805461ff00191661010017905560405181907fa72e5e150ebe7b67363131cf1d5e72a8053adc58eb1879467ebd529ae3d4ecca90600090a25050565b336117d9611924565b6001600160a01b0316146117ff5760405162461bcd60e51b81526004016109ea906133e4565b62030d4081101580156118155750620c35008111155b6118845760405162461bcd60e51b815260206004820152603a60248201527f546573743a20676173466f7250726f63657373696e67206d7573742062652062604482015279065747765656e203230302c30303020616e64203830302c3030360341b60648201526084016109ea565b6020548114156118f15760405162461bcd60e51b815260206004820152603260248201527f546573743a2043616e6e6f742075706461746520676173466f7250726f63657360448201527173696e6720746f2073616d652076616c756560701b60648201526084016109ea565b60205460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3602055565b60055461010090046001600160a01b031690565b606060048054610b669061347f565b33611950611924565b6001600160a01b0316146119765760405162461bcd60e51b81526004016109ea906133e4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a325760405162461bcd60e51b815260206004820152604b60248201527f546573743a205468652050616e63616b655377617020706169722063616e6e6f60448201527f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b6560648201526a744d616b6572506169727360a81b608482015260a4016109ea565b611a3c82826126f4565b5050565b600854604080516001620ad8df60e21b0319815290516000926001600160a01b03169163ffd49c84916004808301926020929190829003018186803b158015610fc957600080fd5b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bf6918590610e8a9086906134d7565b6000610bf63384846120d1565b3360009081526006602052604090205460ff16611afb5760405162461bcd60e51b81526004016109ea90613574565b8082611b14670de0b6b3a764000064e8d4a51000613445565b611b1e9190613445565b611b289190613552565b601e555050601f805460ff19166001179055565b33611b45611924565b6001600160a01b031614611b6b5760405162461bcd60e51b81526004016109ea906133e4565b806103e8611b7f64e8d4a510006005613445565b611b899190613552565b11158015611bb257506064611ba464e8d4a510006002613445565b611bae9190613552565b8111155b611c1e5760405162461bcd60e51b815260206004820152603760248201527f52657175657374656420636f6e7472616374207377617020616d6f756e74206f6044820152763aba1037b31030b1b1b2b83a30b13632903930b733b29760491b60648201526084016109ea565b611c30670de0b6b3a764000082613445565b600c8190556040517f09e89af7cbd8410d0ad2a74ab3cc8d9ddeef8ab1177f0f8a1984d355bb9d78f190600090a250565b33611c6a611924565b6001600160a01b031614611c905760405162461bcd60e51b81526004016109ea906133e4565b6001600160a01b03821660009081526021602052604090205460ff1615158115151415611d185760405162461bcd60e51b815260206004820152603060248201527f546573743a204163636f756e7420697320616c7265616479207468652076616c60448201526f7565206f6620276578636c756465642760801b60648201526084016109ea565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b3360009081526006602052604090205460ff16611da65760405162461bcd60e51b81526004016109ea90613574565b60006064611db48347613445565b611dbe9190613552565b60408051600280825260608201835292935060009290916020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611e2857600080fd5b505afa158015611e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6091906134ba565b81600081518110611e7357611e73613419565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611ea757611ea7613419565b6001600160a01b03928316602091820292909201015260075460095460405163b6f9de9560e01b81529183169263b6f9de95928692611ef39260009288929091169042906004016135f9565b6000604051808303818588803b158015611f0c57600080fd5b505af1158015611f20573d6000803e3d6000fd5b5050505050505050565b33611f33611924565b6001600160a01b031614611f595760405162461bcd60e51b81526004016109ea906133e4565b6001600160a01b038116611fbe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ea565b6005546040516001600160a01b0380841692610100900416906000805160206136b283398151915290600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b3360009081526006602052604090205460ff166120425760405162461bcd60e51b81526004016109ea90613574565b607881111561209d5760405162461bcd60e51b815260206004820152602160248201527f52757368206d6179206e6f74206c617374206f7665722074776f20686f7572736044820152601760f91b60648201526084016109ea565b601b805483151563010000000263ffff00001990911617620100001790556120c681603c613445565b601c55505042601d55565b806120e7576120e2838360006127fd565b505050565b6120f28383836128a2565b601b5460009060ff16801561210a575060135460ff16155b6001600160a01b03851660009081526021602052604090205490915060ff168061214c57506001600160a01b03831660009081526021602052604090205460ff165b15612155575060005b80156123e457601854600090819060ff1615612385576001600160a01b03861660009081526023602052604090205460ff16156122e9576001600160a01b0385166000908152601a602052604090205460ff16156122005760405162461bcd60e51b815260206004820152602260248201527f446f206e6f7420627579206265666f7265206f6666696369616c206c61756e63604482015261341760f11b60648201526084016109ea565b601b54610100900460ff166122455761221a8630866127fd565b5050506001600160a01b039091166000908152601a60205260409020805460ff191660011790555050565b6001600160a01b038516600090815260196020526040902054156122cd576017546001600160a01b0386166000908152601960205260409020546122899190613507565b43116122cd5760405162461bcd60e51b81526020600482015260136024820152722a3930b232903a37b790333932b8bab2b73a1760691b60448201526064016109ea565b6001600160a01b03851660009081526019602052604090204390555b6014546016546122f99190613507565b43101561231e57606461230d856063613445565b6123179190613552565b91506123b3565b60155460165461232e9190613507565b431161233f5760185460ff16612342565b60005b6018805460ff191691151591909117905560008061235f88612a5a565b9350915082905060646123728388613445565b61237c9190613552565b935050506123b3565b60008061239188612a5a565b9350915082905060646123a48388613445565b6123ae9190613552565b935050505b6123bd82856134d7565b93506123e186826123ce57306123db565b6009546001600160a01b03165b846127fd565b50505b601f5460ff161561240c576123f7612bd8565b1561240757612407601e54612c27565b612425565b61241584612c5c565b1561242557612425600c54612cf1565b6124308484846127fd565b6001600160a01b03841660009081526022602052604090205460ff166124b5576008546001600160a01b03166314b6ca968561246b81611519565b6040518363ffffffff1660e01b815260040161248892919061362e565b600060405180830381600087803b1580156124a257600080fd5b505af19250505080156124b3575060015b505b6001600160a01b03831660009081526022602052604090205460ff1661253a576008546001600160a01b03166314b6ca96846124f081611519565b6040518363ffffffff1660e01b815260040161250d92919061362e565b600060405180830381600087803b15801561252757600080fd5b505af1925050508015612538575060015b505b601b5460ff16801561254f575060135460ff16155b801561255e575060185460ff16155b15611115576008546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161259b9160040190815260200190565b600060405180830381600087803b1580156125b557600080fd5b505af19250505080156125c6575060015b61111557611115565b6001600160a01b0383166126315760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ea565b6001600160a01b0382166126925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ea565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03821660009081526023602052604090205460ff16151581151514156127895760405162461bcd60e51b815260206004820152603e60248201527f546573743a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c7565000060648201526084016109ea565b6001600160a01b0382166000908152602360205260409020805460ff191682158015919091179091556127c1576127c1826001610ad4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166000908152602081905260409020546128219082906134d7565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612851908290613507565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016126e7565b6128aa611924565b6001600160a01b0316836001600160a01b0316141580156128e457506128ce611924565b6001600160a01b0316826001600160a01b031614155b801561290957506001600160a01b03831660009081526021602052604090205460ff16155b156120e257601b5460ff1661295d5760405162461bcd60e51b815260206004820152601a602482015279283937b532b1ba103430b9903cb2ba103a37903630bab731b41760311b60448201526064016109ea565b600b548111156129c05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ea565b6001600160a01b03831660009081526023602052604090205460ff16156120e257600d54816129ee84611519565b6129f89190613507565b11156120e25760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e20707572636861736520696d706c696573206d617857616c6c657460448201526a103b34b7b630ba34b7b71760a91b60648201526084016109ea565b6000806000601b60029054906101000a900460ff1615612b945760006002601c54612a859190613552565b601d54612a929190613507565b90506000601c54601d54612aa69190613507565b905081421015612af8576001600160a01b03861660009081526023602052604090205460ff16612ad7576014612ada565b60005b601b5460ff9182169863010000009091049091169650945050505050565b80421015612b42576001600160a01b03861660009081526023602052604090205460ff16612b2757600f612ada565b5050601b54600595630100000090910460ff16945092505050565b6001600160a01b03861660009081526023602052604090205460ff16612b7757601154601254612b729190613507565b612b7b565b6012545b601b805462ff0000191690559660009650945050505050565b6001600160a01b03841660009081526023602052604090205460ff16612bc957601154601254612bc49190613507565b612bcd565b6012545b946000945092505050565b600080612be430611519565b601e54601b549192508210159060ff168015612bfd5750805b8015612c115750601f54610100900460ff16155b8015612c20575060185460ff16155b9250505090565b601f805461ff001916610100179055600954612c4e9030906001600160a01b0316836127fd565b50601f805461ffff19169055565b600080612c6830611519565b600c54601b549192508210159060ff168015612c815750805b8015612c90575060135460ff16155b8015612cb557506001600160a01b03841660009081526023602052604090205460ff16155b8015612cda57506001600160a01b03841660009081526021602052604090205460ff16155b8015612ce9575060185460ff16155b949350505050565b6013805460ff19166001179055601254600f5460009190612d129084613445565b612d1c9190613552565b90506000612d2b600283613552565b9050600060125460105485612d409190613445565b612d4a9190613552565b9050600081612d5985876134d7565b612d6391906134d7565b9050600081612d728486613507565b612d7c9190613507565b905047612d8882612f17565b6000612d9482476134d7565b9050600083612da38884613445565b612dad9190613552565b9050600084612dbc8885613445565b612dc69190613552565b600a546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114612e1d576040519150601f19603f3d011682016040523d82523d6000602084013e612e22565b606091505b50909150508815612e7157612e37898461304a565b604080518a8152602081018590527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b60085460408051630d0e30db60e41b8152905147926001600160a01b03169163d0e30db091849160048082019260009290919082900301818588803b158015612eb957600080fd5b505af193505050508015612ecb575060015b506040518181527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a150506013805460ff1916905550505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f4c57612f4c613419565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612fa057600080fd5b505afa158015612fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd891906134ba565b81600181518110612feb57612feb613419565b6001600160a01b03928316602091820292909201015260075461301191309116846125cf565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790610f56908590600090869030904290600401613647565b6007546130629030906001600160a01b0316846125cf565b60075460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156130cd57600080fd5b505af11580156130e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131069190613683565b5050505050565b6001600160a01b038116811461312257600080fd5b50565b60008083601f84011261313757600080fd5b5081356001600160401b0381111561314e57600080fd5b6020830191508360208260051b850101111561316957600080fd5b9250929050565b60008060008060006060868803121561318857600080fd5b85356131938161310d565b945060208601356001600160401b03808211156131af57600080fd5b6131bb89838a01613125565b909650945060408801359150808211156131d457600080fd5b506131e188828901613125565b969995985093965092949392505050565b8035801515811461320257600080fd5b919050565b6000806040838503121561321a57600080fd5b82356132258161310d565b9150613233602084016131f2565b90509250929050565b600060208083528351808285015260005b818110156132695785810183015185820160400152820161324d565b8181111561327b576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156132a457600080fd5b82356132af8161310d565b946020939093013593505050565b6000602082840312156132cf57600080fd5b81356132da8161310d565b9392505050565b6000806000606084860312156132f657600080fd5b83356133018161310d565b925060208401356133118161310d565b929592945050506040919091013590565b6000806040838503121561333557600080fd5b50508035926020909101359150565b60006020828403121561335657600080fd5b5035919050565b6000806000806080858703121561337357600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156133a257600080fd5b82356133ad8161310d565b915060208301356133bd8161310d565b809150509250929050565b600080604083850312156133db57600080fd5b6132af836131f2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561345f5761345f61342f565b500290565b60006000198214156134785761347861342f565b5060010190565b600181811c9082168061349357607f821691505b602082108114156134b457634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156134cc57600080fd5b81516132da8161310d565b6000828210156134e9576134e961342f565b500390565b60006020828403121561350057600080fd5b5051919050565b6000821982111561351a5761351a61342f565b500190565b602080825260199082015278283937b532b1ba1030b63932b0b23c903630bab731b432b21760391b604082015260600190565b60008261356f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526021908201527f4f776e61626c653a2063616c6c6572206973206e6f7420617574686f72697a656040820152601960fa1b606082015260800190565b600081518084526020808501945080840160005b838110156135ee5781516001600160a01b0316875295820195908201906001016135c9565b509495945050505050565b84815260806020820152600061361260808301866135b5565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b03929092168252602082015260400190565b85815284602082015260a06040820152600061366660a08301866135b5565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561369857600080fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220f52c69471a07c70a644805d286b620f9171ad6ca20eb79a88493a9516803764a64736f6c634300080900336080604052600280546001600160a01b031916737083609fce4d1d8dc0c979aab8c869ea2c8734021790556ec097ce7bc90715b34b9f1000000000600c55610e10600d556103e8600e5534801561005557600080fd5b50604051610e7e380380610e7e833981016040819052610074916100cb565b600380546001600160a01b039384166001600160a01b03199182161790915560008054821633179055600180549290931691161790556100fe565b80516001600160a01b03811681146100c657600080fd5b919050565b600080604083850312156100de57600080fd5b6100e7836100af565b91506100f5602084016100af565b90509250929050565b610d718061010d6000396000f3fe6080604052600436106100bc5760003560e01c806311ce023d1461011c57806314b6ca961461014557806328fd3198146101675780632d48e896146101875780633a98ef39146101a75780634fab0ae8146101bd578063997664d7146101d3578063b2bdfa7b146101e9578063ce7c2ac214610216578063d0e30db01461026d578063e2d2e21914610275578063efca2eed1461028b578063f0fc6bca146102a1578063ffb2c479146102b6578063ffd49c84146102d657600080fd5b3661011757306001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156100fc57600080fd5b505af1158015610110573d6000803e3d6000fd5b5050505050005b600080fd5b34801561012857600080fd5b50610132600c5481565b6040519081526020015b60405180910390f35b34801561015157600080fd5b50610165610160366004610b0d565b6102ec565b005b34801561017357600080fd5b50610132610182366004610b39565b610479565b34801561019357600080fd5b506101656101a2366004610b5d565b610502565b3480156101b357600080fd5b5061013260085481565b3480156101c957600080fd5b50610132600e5481565b3480156101df57600080fd5b5061013260095481565b3480156101f557600080fd5b50600154610209906001600160a01b031681565b60405161013c9190610b7f565b34801561022257600080fd5b50610252610231366004610b39565b60076020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161013c565b610165610539565b34801561028157600080fd5b50610132600b5481565b34801561029757600080fd5b50610132600a5481565b3480156102ad57600080fd5b50610165610757565b3480156102c257600080fd5b506101656102d1366004610b93565b610762565b3480156102e257600080fd5b50610132600d5481565b6000546001600160a01b031633148061030f57506001546001600160a01b031633145b61031857600080fd5b6001600160a01b0382166000908152600760205260409020541561033f5761033f8261084b565b60008111801561036557506001600160a01b038216600090815260076020526040902054155b156103cb57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103fe565b801580156103f057506001600160a01b03821660009081526007602052604090205415155b156103fe576103fe82610978565b6001600160a01b038216600090815260076020526040902054600854829161042591610bc2565b61042f9190610bd9565b6008556001600160a01b038216600090815260076020526040902081905561045681610a8d565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461049e57506000919050565b6001600160a01b0382166000908152600760205260408120546104c090610a8d565b6001600160a01b0384166000908152600760205260409020600101549091508082116104f0575060009392505050565b6104fa8183610bc2565b949350505050565b6000546001600160a01b031633148061052557506001546001600160a01b031633145b61052e57600080fd5b600d91909155600e55565b6040805160028082526060820183526000926020830190803683375050600354604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561059e57600080fd5b505afa1580156105b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d69190610bf1565b816000815181106105e9576105e9610c0e565b6001600160a01b03928316602091820292909201015260025482519116908290600190811061061a5761061a610c0e565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061066090600090869030904290600401610c24565b6000604051808303818588803b15801561067957600080fd5b505af115801561068d573d6000803e3d6000fd5b50506002546040516370a0823160e01b8152600094506001600160a01b0390911692506370a0823191506106c5903090600401610b7f565b60206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107159190610c8e565b9050806009546107259190610bd9565b600955600854600c54610739908390610ca7565b6107439190610cc6565b600b546107509190610bd9565b600b555050565b6107603361084b565b565b6004548061076e575050565b6000805a905060005b848310801561078557508381105b156108445783600f5410610799576000600f555b6107cb6004600f54815481106107b1576107b1610c0e565b6000918252602090912001546001600160a01b0316610ab0565b15610802576108026004600f54815481106107e8576107e8610c0e565b6000918252602090912001546001600160a01b031661084b565b5a61080d9083610bc2565b6108179084610bd9565b92505a600f8054919350600061082c83610ce8565b9190505550808061083c90610ce8565b915050610777565b5050505050565b6001600160a01b03811660009081526007602052604090205461086b5750565b600061087682610479565b905080156109745780600a5461088c9190610bd9565b600a5560025460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156108dd57600080fd5b505af11580156108f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109159190610d03565b506001600160a01b0382166000908152600660209081526040808320429055600790915290206002015461094a908290610bd9565b6001600160a01b038316600090815260076020526040902060028101919091555461045690610a8d565b5050565b6004805461098890600190610bc2565b8154811061099857610998610c0e565b60009182526020808320909101546001600160a01b03848116845260059092526040909220546004805492909316929181106109d6576109d6610c0e565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610a2290600190610bc2565b81548110610a3257610a32610c0e565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a6857610a68610d25565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600c54600b5483610aa09190610ca7565b610aaa9190610cc6565b92915050565b600d546001600160a01b03821660009081526006602052604081205490914291610ada9190610bd9565b108015610aaa5750600e54610aee83610479565b1192915050565b6001600160a01b0381168114610b0a57600080fd5b50565b60008060408385031215610b2057600080fd5b8235610b2b81610af5565b946020939093013593505050565b600060208284031215610b4b57600080fd5b8135610b5681610af5565b9392505050565b60008060408385031215610b7057600080fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b600060208284031215610ba557600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610bd457610bd4610bac565b500390565b60008219821115610bec57610bec610bac565b500190565b600060208284031215610c0357600080fd5b8151610b5681610af5565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610c6e5784516001600160a01b031683529383019391830191600101610c49565b50506001600160a01b039690961660408501525050506060015292915050565b600060208284031215610ca057600080fd5b5051919050565b6000816000190483118215151615610cc157610cc1610bac565b500290565b600082610ce357634e487b7160e01b600052601260045260246000fd5b500490565b6000600019821415610cfc57610cfc610bac565b5060010190565b600060208284031215610d1557600080fd5b81518015158114610b5657600080fd5b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f1bcc0267fc47199322f28f29c17bfe74bc60e216360ad66a8f2f3aaf8fdf10964736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102955760003560e01c8063025ff12f146102a15780630483f7a0146102c357806306fdde03146102e3578063095ea7b31461030e57806313114a9d1461033e5780631694505e1461036257806318160ddd1461039a5780631e3fe7db146103af57806323b872dd146103cf57806327c8f835146103ef57806328d38a1e1461040f5780632bb14e1d146104305780632d1fb389146104465780632d48e8961461046657806330bb4cff14610486578063313ce5671461049b57806339509351146104bd5780633cc66d4d146104dd578063486a7e6b146104fd57806349bd5a5e146105135780634e71d92d146105475780634fbee1931461055c57806361f9fe5f1461058c57806364b0f653146105ac57806365b8dbc0146105c15780636b67c4df146105e15780636fcba377146105f757806370a0823114610617578063715018a6146106375780637437681e1461064c578063822cb4901461066257806382760cd214610682578063871c128d146106a25780638da5cb5b146106c257806395d89b41146106d757806398118cb4146106ec5780639a7a23d6146107025780639c1b8af5146107225780639f00ad8e14610738578063a0c68c1d1461074e578063a26579ad14610768578063a457c2d71461077d578063a5ece9411461079d578063a9059cbb146107bd578063ada00ad6146107dd578063afa4f3b2146107fd578063bad3ea6a1461081d578063c02466681461083d578063c705c5691461085d578063dd62ed3e1461088d578063e2f45605146108d3578063e5e31b13146108e9578063eed20cd514610919578063f0329cb51461092f578063f2fde38b1461094f578063f8b45b051461096f578063fd0ba57714610985578063ff1a01d71461099b57600080fd5b3661029c57005b600080fd5b3480156102ad57600080fd5b506102c16102bc366004613170565b6109bb565b005b3480156102cf57600080fd5b506102c16102de366004613207565b610ad4565b3480156102ef57600080fd5b506102f8610b57565b604051610305919061323c565b60405180910390f35b34801561031a57600080fd5b5061032e610329366004613291565b610be9565b6040519015158152602001610305565b34801561034a57600080fd5b5061035460125481565b604051908152602001610305565b34801561036e57600080fd5b50600754610382906001600160a01b031681565b6040516001600160a01b039091168152602001610305565b3480156103a657600080fd5b50600254610354565b3480156103bb57600080fd5b506102c16103ca3660046132bd565b610bff565b3480156103db57600080fd5b5061032e6103ea3660046132e1565b610e47565b3480156103fb57600080fd5b50600954610382906001600160a01b031681565b34801561041b57600080fd5b50601b5461032e906301000000900460ff1681565b34801561043c57600080fd5b50610354600e5481565b34801561045257600080fd5b506102c1610461366004613207565b610e99565b34801561047257600080fd5b506102c1610481366004613322565b610ef3565b34801561049257600080fd5b50610354610f84565b3480156104a757600080fd5b5060055460405160ff9091168152602001610305565b3480156104c957600080fd5b5061032e6104d8366004613291565b611006565b3480156104e957600080fd5b506102c16104f8366004613344565b61103d565b34801561050957600080fd5b50610354601e5481565b34801561051f57600080fd5b506103827f000000000000000000000000fb307dc1d74facef5a43bf34aabf2731571761b781565b34801561055357600080fd5b506102c16110b1565b34801561056857600080fd5b5061032e6105773660046132bd565b60216020526000908152604090205460ff1681565b34801561059857600080fd5b50601b5461032e9062010000900460ff1681565b3480156105b857600080fd5b5061035461111b565b3480156105cd57600080fd5b506102c16105dc3660046132bd565b611160565b3480156105ed57600080fd5b5061035460105481565b34801561060357600080fd5b506102c161061236600461335d565b61125c565b34801561062357600080fd5b506103546106323660046132bd565b611519565b34801561064357600080fd5b506102c1611534565b34801561065857600080fd5b50610354600b5481565b34801561066e57600080fd5b506102c161067d366004613322565b6115a1565b34801561068e57600080fd5b506102c161069d366004613322565b61172d565b3480156106ae57600080fd5b506102c16106bd366004613344565b6117d0565b3480156106ce57600080fd5b50610382611924565b3480156106e357600080fd5b506102f8611938565b3480156106f857600080fd5b50610354600f5481565b34801561070e57600080fd5b506102c161071d366004613207565b611947565b34801561072e57600080fd5b5061035460205481565b34801561074457600080fd5b5061035460115481565b34801561075a57600080fd5b50601f5461032e9060ff1681565b34801561077457600080fd5b50610354611a40565b34801561078957600080fd5b5061032e610798366004613291565b611a88565b3480156107a957600080fd5b50600a54610382906001600160a01b031681565b3480156107c957600080fd5b5061032e6107d8366004613291565b611abf565b3480156107e957600080fd5b506102c16107f8366004613322565b611acc565b34801561080957600080fd5b506102c1610818366004613344565b611b3c565b34801561082957600080fd5b50600854610382906001600160a01b031681565b34801561084957600080fd5b506102c1610858366004613207565b611c61565b34801561086957600080fd5b5061032e6108783660046132bd565b60226020526000908152604090205460ff1681565b34801561089957600080fd5b506103546108a836600461338f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108df57600080fd5b50610354600c5481565b3480156108f557600080fd5b5061032e6109043660046132bd565b60236020526000908152604090205460ff1681565b34801561092557600080fd5b50610354601d5481565b34801561093b57600080fd5b506102c161094a366004613344565b611d77565b34801561095b57600080fd5b506102c161096a3660046132bd565b611f2a565b34801561097b57600080fd5b50610354600d5481565b34801561099157600080fd5b50610354601c5481565b3480156109a757600080fd5b506102c16109b63660046133c8565b612013565b336109c4611924565b6001600160a01b0316146109f35760405162461bcd60e51b81526004016109ea906133e4565b60405180910390fd5b828114610a535760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b60648201526084016109ea565b60005b83811015610acc57610aba86868684818110610a7457610a74613419565b9050602002016020810190610a8991906132bd565b670de0b6b3a7640000868686818110610aa457610aa4613419565b90506020020135610ab59190613445565b6120d1565b80610ac481613464565b915050610a56565b505050505050565b33610add611924565b6001600160a01b031614610b035760405162461bcd60e51b81526004016109ea906133e4565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be91a35050565b606060038054610b669061347f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b929061347f565b8015610bdf5780601f10610bb457610100808354040283529160200191610bdf565b820191906000526020600020905b815481529060010190602001808311610bc257829003601f168201915b5050505050905090565b6000610bf63384846125cf565b50600192915050565b33610c08611924565b6001600160a01b031614610c2e5760405162461bcd60e51b81526004016109ea906133e4565b6008546001600160a01b0382811691161415610cac5760405162461bcd60e51b815260206004820152603760248201527f5a75636b3a20546865206469766964656e64206469737472696275746f7220616044820152766c7265616479206861732074686174206164647265737360481b60648201526084016109ea565b6000819050306001600160a01b0316816001600160a01b031663b2bdfa7b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cf457600080fd5b505afa158015610d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2c91906134ba565b6001600160a01b031614610dbc5760405162461bcd60e51b815260206004820152604b60248201527f5a75636b3a20546865206e6577206469766964656e642064697374726962757460448201527f6f72206d757374206265206f776e656420627920746865205465737420746f6b60648201526a195b8818dbdb9d1c9858dd60aa1b608482015260a4016109ea565b610dc7816001610ad4565b610dd2306001610ad4565b600754610de9906001600160a01b03166001610ad4565b6008546040516001600160a01b03918216918416907f4c1beaad9b2fcfd2ce776571d2ebc4750ba710de22bc57bd3fee8737ee3e3a9090600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b6000610e548484846120d1565b6001600160a01b038416600090815260016020908152604080832033808552925290912054610e8f918691610e8a9086906134d7565b6125cf565b5060019392505050565b33610ea2611924565b6001600160a01b031614610ec85760405162461bcd60e51b81526004016109ea906133e4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b33610efc611924565b6001600160a01b031614610f225760405162461bcd60e51b81526004016109ea906133e4565b6008546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610f7057600080fd5b505af1158015610acc573d6000803e3d6000fd5b6008546040805163efca2eed60e01b815290516000926001600160a01b03169163efca2eed916004808301926020929190829003018186803b158015610fc957600080fd5b505afa158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100191906134ee565b905090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bf6918590610e8a908690613507565b33611046611924565b6001600160a01b03161461106c5760405162461bcd60e51b81526004016109ea906133e4565b601b5460ff161561108f5760405162461bcd60e51b81526004016109ea9061351f565b60155560188054600160ff199182168117909255601b80549091169091179055565b600860009054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b50505050565b60085460408051633a98ef3960e01b815290516000926001600160a01b031691633a98ef39916004808301926020929190829003018186803b158015610fc957600080fd5b33611169611924565b6001600160a01b03161461118f5760405162461bcd60e51b81526004016109ea906133e4565b6007546001600160a01b03828116911614156111ff5760405162461bcd60e51b815260206004820152602960248201527f546573743a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b60648201526084016109ea565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b33611265611924565b6001600160a01b03161461128b5760405162461bcd60e51b81526004016109ea906133e4565b60058211156112fa5760405162461bcd60e51b815260206004820152603560248201527f526571756573746564207265776172647346656520666565206e6f74207769746044820152743434b71030b1b1b2b83a30b13632903930b733b29760591b60648201526084016109ea565b60058311156113685760405162461bcd60e51b815260206004820152603460248201527f526571756573746564206c697175696469747920666565206e6f74207769746860448201527334b71030b1b1b2b83a30b13632903930b733b29760611b60648201526084016109ea565b60058411156113d65760405162461bcd60e51b815260206004820152603460248201527f526571756573746564206d61726b6574696e6720666565206e6f74207769746860448201527334b71030b1b1b2b83a30b13632903930b733b29760611b60648201526084016109ea565b60068111156114485760405162461bcd60e51b815260206004820152603860248201527f5265717565737465642073656c6c2066656520696e637265617365206e6f74206044820152773bb4ba3434b71030b1b1b2b83a30b13632903930b733b29760411b60648201526084016109ea565b6114528385613507565b6000106114b55760405162461bcd60e51b815260206004820152602b60248201527f546f74616c2066656520616d6f756e74206d757374206265207374726963746c60448201526a3c903837b9b4ba34bb329760a91b60648201526084016109ea565b600e829055600f83905560108490556011819055836114d48484613507565b6114de9190613507565b601255600e54601054600f546040517f37322890d66d781059d797be5e2f27dc160a34d8bc0a8e09116cb9a773ce88ef90600090a450505050565b6001600160a01b031660009081526020819052604090205490565b3361153d611924565b6001600160a01b0316146115635760405162461bcd60e51b81526004016109ea906133e4565b60055460405160009161010090046001600160a01b0316906000805160206136b2833981519152908390a360058054610100600160a81b0319169055565b336115aa611924565b6001600160a01b0316146115d05760405162461bcd60e51b81526004016109ea906133e4565b6103e86115e364e8d4a510006005613445565b6115ed9190613552565b82101561164e5760405162461bcd60e51b815260206004820152602960248201527f526571756573746564206d6178207472616e73616374696f6e20616d6f756e74604482015268103a37b7903637bb9760b91b60648201526084016109ea565b6103e861166164e8d4a510006014613445565b61166b9190613552565b8110156116d15760405162461bcd60e51b815260206004820152602e60248201527f526571756573746564206d617820616c6c6f7761626c652077616c6c6574206160448201526d36b7bab73a103a37b7903637bb9760911b60648201526084016109ea565b6116e3670de0b6b3a764000083613445565b600b556116f8670de0b6b3a764000082613445565b600d819055600b546040517fc66babc31501a8b9fd3efae98ba8279008417a4d125e542a34ba6657305bf8ff90600090a35050565b33611736611924565b6001600160a01b03161461175c5760405162461bcd60e51b81526004016109ea906133e4565b601b54610100900460ff16156117845760405162461bcd60e51b81526004016109ea9061351f565b6014829055436016556017819055601b805461ff00191661010017905560405181907fa72e5e150ebe7b67363131cf1d5e72a8053adc58eb1879467ebd529ae3d4ecca90600090a25050565b336117d9611924565b6001600160a01b0316146117ff5760405162461bcd60e51b81526004016109ea906133e4565b62030d4081101580156118155750620c35008111155b6118845760405162461bcd60e51b815260206004820152603a60248201527f546573743a20676173466f7250726f63657373696e67206d7573742062652062604482015279065747765656e203230302c30303020616e64203830302c3030360341b60648201526084016109ea565b6020548114156118f15760405162461bcd60e51b815260206004820152603260248201527f546573743a2043616e6e6f742075706461746520676173466f7250726f63657360448201527173696e6720746f2073616d652076616c756560701b60648201526084016109ea565b60205460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3602055565b60055461010090046001600160a01b031690565b606060048054610b669061347f565b33611950611924565b6001600160a01b0316146119765760405162461bcd60e51b81526004016109ea906133e4565b7f000000000000000000000000fb307dc1d74facef5a43bf34aabf2731571761b76001600160a01b0316826001600160a01b03161415611a325760405162461bcd60e51b815260206004820152604b60248201527f546573743a205468652050616e63616b655377617020706169722063616e6e6f60448201527f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b6560648201526a744d616b6572506169727360a81b608482015260a4016109ea565b611a3c82826126f4565b5050565b600854604080516001620ad8df60e21b0319815290516000926001600160a01b03169163ffd49c84916004808301926020929190829003018186803b158015610fc957600080fd5b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bf6918590610e8a9086906134d7565b6000610bf63384846120d1565b3360009081526006602052604090205460ff16611afb5760405162461bcd60e51b81526004016109ea90613574565b8082611b14670de0b6b3a764000064e8d4a51000613445565b611b1e9190613445565b611b289190613552565b601e555050601f805460ff19166001179055565b33611b45611924565b6001600160a01b031614611b6b5760405162461bcd60e51b81526004016109ea906133e4565b806103e8611b7f64e8d4a510006005613445565b611b899190613552565b11158015611bb257506064611ba464e8d4a510006002613445565b611bae9190613552565b8111155b611c1e5760405162461bcd60e51b815260206004820152603760248201527f52657175657374656420636f6e7472616374207377617020616d6f756e74206f6044820152763aba1037b31030b1b1b2b83a30b13632903930b733b29760491b60648201526084016109ea565b611c30670de0b6b3a764000082613445565b600c8190556040517f09e89af7cbd8410d0ad2a74ab3cc8d9ddeef8ab1177f0f8a1984d355bb9d78f190600090a250565b33611c6a611924565b6001600160a01b031614611c905760405162461bcd60e51b81526004016109ea906133e4565b6001600160a01b03821660009081526021602052604090205460ff1615158115151415611d185760405162461bcd60e51b815260206004820152603060248201527f546573743a204163636f756e7420697320616c7265616479207468652076616c60448201526f7565206f6620276578636c756465642760801b60648201526084016109ea565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b3360009081526006602052604090205460ff16611da65760405162461bcd60e51b81526004016109ea90613574565b60006064611db48347613445565b611dbe9190613552565b60408051600280825260608201835292935060009290916020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611e2857600080fd5b505afa158015611e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6091906134ba565b81600081518110611e7357611e73613419565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611ea757611ea7613419565b6001600160a01b03928316602091820292909201015260075460095460405163b6f9de9560e01b81529183169263b6f9de95928692611ef39260009288929091169042906004016135f9565b6000604051808303818588803b158015611f0c57600080fd5b505af1158015611f20573d6000803e3d6000fd5b5050505050505050565b33611f33611924565b6001600160a01b031614611f595760405162461bcd60e51b81526004016109ea906133e4565b6001600160a01b038116611fbe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ea565b6005546040516001600160a01b0380841692610100900416906000805160206136b283398151915290600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b3360009081526006602052604090205460ff166120425760405162461bcd60e51b81526004016109ea90613574565b607881111561209d5760405162461bcd60e51b815260206004820152602160248201527f52757368206d6179206e6f74206c617374206f7665722074776f20686f7572736044820152601760f91b60648201526084016109ea565b601b805483151563010000000263ffff00001990911617620100001790556120c681603c613445565b601c55505042601d55565b806120e7576120e2838360006127fd565b505050565b6120f28383836128a2565b601b5460009060ff16801561210a575060135460ff16155b6001600160a01b03851660009081526021602052604090205490915060ff168061214c57506001600160a01b03831660009081526021602052604090205460ff165b15612155575060005b80156123e457601854600090819060ff1615612385576001600160a01b03861660009081526023602052604090205460ff16156122e9576001600160a01b0385166000908152601a602052604090205460ff16156122005760405162461bcd60e51b815260206004820152602260248201527f446f206e6f7420627579206265666f7265206f6666696369616c206c61756e63604482015261341760f11b60648201526084016109ea565b601b54610100900460ff166122455761221a8630866127fd565b5050506001600160a01b039091166000908152601a60205260409020805460ff191660011790555050565b6001600160a01b038516600090815260196020526040902054156122cd576017546001600160a01b0386166000908152601960205260409020546122899190613507565b43116122cd5760405162461bcd60e51b81526020600482015260136024820152722a3930b232903a37b790333932b8bab2b73a1760691b60448201526064016109ea565b6001600160a01b03851660009081526019602052604090204390555b6014546016546122f99190613507565b43101561231e57606461230d856063613445565b6123179190613552565b91506123b3565b60155460165461232e9190613507565b431161233f5760185460ff16612342565b60005b6018805460ff191691151591909117905560008061235f88612a5a565b9350915082905060646123728388613445565b61237c9190613552565b935050506123b3565b60008061239188612a5a565b9350915082905060646123a48388613445565b6123ae9190613552565b935050505b6123bd82856134d7565b93506123e186826123ce57306123db565b6009546001600160a01b03165b846127fd565b50505b601f5460ff161561240c576123f7612bd8565b1561240757612407601e54612c27565b612425565b61241584612c5c565b1561242557612425600c54612cf1565b6124308484846127fd565b6001600160a01b03841660009081526022602052604090205460ff166124b5576008546001600160a01b03166314b6ca968561246b81611519565b6040518363ffffffff1660e01b815260040161248892919061362e565b600060405180830381600087803b1580156124a257600080fd5b505af19250505080156124b3575060015b505b6001600160a01b03831660009081526022602052604090205460ff1661253a576008546001600160a01b03166314b6ca96846124f081611519565b6040518363ffffffff1660e01b815260040161250d92919061362e565b600060405180830381600087803b15801561252757600080fd5b505af1925050508015612538575060015b505b601b5460ff16801561254f575060135460ff16155b801561255e575060185460ff16155b15611115576008546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161259b9160040190815260200190565b600060405180830381600087803b1580156125b557600080fd5b505af19250505080156125c6575060015b61111557611115565b6001600160a01b0383166126315760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ea565b6001600160a01b0382166126925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ea565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03821660009081526023602052604090205460ff16151581151514156127895760405162461bcd60e51b815260206004820152603e60248201527f546573743a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c7565000060648201526084016109ea565b6001600160a01b0382166000908152602360205260409020805460ff191682158015919091179091556127c1576127c1826001610ad4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166000908152602081905260409020546128219082906134d7565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612851908290613507565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016126e7565b6128aa611924565b6001600160a01b0316836001600160a01b0316141580156128e457506128ce611924565b6001600160a01b0316826001600160a01b031614155b801561290957506001600160a01b03831660009081526021602052604090205460ff16155b156120e257601b5460ff1661295d5760405162461bcd60e51b815260206004820152601a602482015279283937b532b1ba103430b9903cb2ba103a37903630bab731b41760311b60448201526064016109ea565b600b548111156129c05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ea565b6001600160a01b03831660009081526023602052604090205460ff16156120e257600d54816129ee84611519565b6129f89190613507565b11156120e25760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e20707572636861736520696d706c696573206d617857616c6c657460448201526a103b34b7b630ba34b7b71760a91b60648201526084016109ea565b6000806000601b60029054906101000a900460ff1615612b945760006002601c54612a859190613552565b601d54612a929190613507565b90506000601c54601d54612aa69190613507565b905081421015612af8576001600160a01b03861660009081526023602052604090205460ff16612ad7576014612ada565b60005b601b5460ff9182169863010000009091049091169650945050505050565b80421015612b42576001600160a01b03861660009081526023602052604090205460ff16612b2757600f612ada565b5050601b54600595630100000090910460ff16945092505050565b6001600160a01b03861660009081526023602052604090205460ff16612b7757601154601254612b729190613507565b612b7b565b6012545b601b805462ff0000191690559660009650945050505050565b6001600160a01b03841660009081526023602052604090205460ff16612bc957601154601254612bc49190613507565b612bcd565b6012545b946000945092505050565b600080612be430611519565b601e54601b549192508210159060ff168015612bfd5750805b8015612c115750601f54610100900460ff16155b8015612c20575060185460ff16155b9250505090565b601f805461ff001916610100179055600954612c4e9030906001600160a01b0316836127fd565b50601f805461ffff19169055565b600080612c6830611519565b600c54601b549192508210159060ff168015612c815750805b8015612c90575060135460ff16155b8015612cb557506001600160a01b03841660009081526023602052604090205460ff16155b8015612cda57506001600160a01b03841660009081526021602052604090205460ff16155b8015612ce9575060185460ff16155b949350505050565b6013805460ff19166001179055601254600f5460009190612d129084613445565b612d1c9190613552565b90506000612d2b600283613552565b9050600060125460105485612d409190613445565b612d4a9190613552565b9050600081612d5985876134d7565b612d6391906134d7565b9050600081612d728486613507565b612d7c9190613507565b905047612d8882612f17565b6000612d9482476134d7565b9050600083612da38884613445565b612dad9190613552565b9050600084612dbc8885613445565b612dc69190613552565b600a546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114612e1d576040519150601f19603f3d011682016040523d82523d6000602084013e612e22565b606091505b50909150508815612e7157612e37898461304a565b604080518a8152602081018590527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b60085460408051630d0e30db60e41b8152905147926001600160a01b03169163d0e30db091849160048082019260009290919082900301818588803b158015612eb957600080fd5b505af193505050508015612ecb575060015b506040518181527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a150506013805460ff1916905550505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f4c57612f4c613419565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612fa057600080fd5b505afa158015612fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd891906134ba565b81600181518110612feb57612feb613419565b6001600160a01b03928316602091820292909201015260075461301191309116846125cf565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790610f56908590600090869030904290600401613647565b6007546130629030906001600160a01b0316846125cf565b60075460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156130cd57600080fd5b505af11580156130e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131069190613683565b5050505050565b6001600160a01b038116811461312257600080fd5b50565b60008083601f84011261313757600080fd5b5081356001600160401b0381111561314e57600080fd5b6020830191508360208260051b850101111561316957600080fd5b9250929050565b60008060008060006060868803121561318857600080fd5b85356131938161310d565b945060208601356001600160401b03808211156131af57600080fd5b6131bb89838a01613125565b909650945060408801359150808211156131d457600080fd5b506131e188828901613125565b969995985093965092949392505050565b8035801515811461320257600080fd5b919050565b6000806040838503121561321a57600080fd5b82356132258161310d565b9150613233602084016131f2565b90509250929050565b600060208083528351808285015260005b818110156132695785810183015185820160400152820161324d565b8181111561327b576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156132a457600080fd5b82356132af8161310d565b946020939093013593505050565b6000602082840312156132cf57600080fd5b81356132da8161310d565b9392505050565b6000806000606084860312156132f657600080fd5b83356133018161310d565b925060208401356133118161310d565b929592945050506040919091013590565b6000806040838503121561333557600080fd5b50508035926020909101359150565b60006020828403121561335657600080fd5b5035919050565b6000806000806080858703121561337357600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156133a257600080fd5b82356133ad8161310d565b915060208301356133bd8161310d565b809150509250929050565b600080604083850312156133db57600080fd5b6132af836131f2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561345f5761345f61342f565b500290565b60006000198214156134785761347861342f565b5060010190565b600181811c9082168061349357607f821691505b602082108114156134b457634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156134cc57600080fd5b81516132da8161310d565b6000828210156134e9576134e961342f565b500390565b60006020828403121561350057600080fd5b5051919050565b6000821982111561351a5761351a61342f565b500190565b602080825260199082015278283937b532b1ba1030b63932b0b23c903630bab731b432b21760391b604082015260600190565b60008261356f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526021908201527f4f776e61626c653a2063616c6c6572206973206e6f7420617574686f72697a656040820152601960fa1b606082015260800190565b600081518084526020808501945080840160005b838110156135ee5781516001600160a01b0316875295820195908201906001016135c9565b509495945050505050565b84815260806020820152600061361260808301866135b5565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b03929092168252602082015260400190565b85815284602082015260a06040820152600061366660a08301866135b5565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561369857600080fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220f52c69471a07c70a644805d286b620f9171ad6ca20eb79a88493a9516803764a64736f6c63430008090033

Deployed Bytecode Sourcemap

13707:19795:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33103:355;;;;;;;;;;-1:-1:-1;33103:355:0;;;;;:::i;:::-;;:::i;:::-;;20846:211;;;;;;;;;;-1:-1:-1;20846:211:0;;;;;:::i;:::-;;:::i;4009:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4929:167;;;;;;;;;;-1:-1:-1;4929:167:0;;;;;:::i;:::-;;:::i;:::-;;;3007:14:1;;3000:22;2982:41;;2970:2;2955:18;4929:167:0;2842:187:1;14675:24:0;;;;;;;;;;;;;;;;;;;3180:25:1;;;3168:2;3153:18;14675:24:0;3034:177:1;13755:39:0;;;;;;;;;;-1:-1:-1;13755:39:0;;;;-1:-1:-1;;;;;13755:39:0;;;;;;-1:-1:-1;;;;;3404:32:1;;;3386:51;;3374:2;3359:18;13755:39:0;3216:227:1;4322:108:0;;;;;;;;;;-1:-1:-1;4410:12:0;;4322:108;;19428:785;;;;;;;;;;-1:-1:-1;19428:785:0;;;;;:::i;:::-;;:::i;5108:270::-;;;;;;;;;;-1:-1:-1;5108:270:0;;;;;:::i;:::-;;:::i;13919:80::-;;;;;;;;;;-1:-1:-1;13919:80:0;;;;-1:-1:-1;;;;;13919:80:0;;;15160:33;;;;;;;;;;-1:-1:-1;15160:33:0;;;;;;;;;;;14535:25;;;;;;;;;;;;;;;;2749:120;;;;;;;;;;-1:-1:-1;2749:120:0;;;;;:::i;:::-;;:::i;22112:197::-;;;;;;;;;;-1:-1:-1;22112:197:0;;;;;:::i;:::-;;:::i;22441:136::-;;;;;;;;;;;;;:::i;4219:91::-;;;;;;;;;;-1:-1:-1;4293:9:0;;4219:91;;4293:9;;;;4764:36:1;;4752:2;4737:18;4219:91:0;4622:184:1;5390:211:0;;;;;;;;;;-1:-1:-1;5390:211:0;;;;;:::i;:::-;;:::i;18810:251::-;;;;;;;;;;-1:-1:-1;18810:251:0;;;;;:::i;:::-;;:::i;15281:29::-;;;;;;;;;;;;;;;;13801:38;;;;;;;;;;;;;;;22588:74;;;;;;;;;;;;;:::i;15519:51::-;;;;;;;;;;-1:-1:-1;15519:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15124:29;;;;;;;;;;-1:-1:-1;15124:29:0;;;;;;;;;;;22670:133;;;;;;;;;;;;;:::i;20221:311::-;;;;;;;;;;-1:-1:-1;20221:311:0;;;;;:::i;:::-;;:::i;14603:27::-;;;;;;;;;;;;;;;;22815:1016;;;;;;;;;;-1:-1:-1;22815:1016:0;;;;;:::i;:::-;;:::i;4442:127::-;;;;;;;;;;-1:-1:-1;4442:127:0;;;;;:::i;:::-;;:::i;3148:148::-;;;;;;;;;;;;;:::i;14174:59::-;;;;;;;;;;;;;;;;23843:454;;;;;;;;;;-1:-1:-1;23843:454:0;;;;;:::i;:::-;;:::i;19073:347::-;;;;;;;;;;-1:-1:-1;19073:347:0;;;;;:::i;:::-;;:::i;21700:404::-;;;;;;;;;;-1:-1:-1;21700:404:0;;;;;:::i;:::-;;:::i;2650:87::-;;;;;;;;;;;;;:::i;4112:95::-;;;;;;;;;;;;;:::i;14567:27::-;;;;;;;;;;;;;;;;21065:262;;;;;;;;;;-1:-1:-1;21065:262:0;;;;;:::i;:::-;;:::i;15473:37::-;;;;;;;;;;;;;;;;14638:30;;;;;;;;;;;;;;;;15317:39;;;;;;;;;;-1:-1:-1;15317:39:0;;;;;;;;22321:112;;;;;;;;;;;;;:::i;5609:221::-;;;;;;;;;;-1:-1:-1;5609:221:0;;;;;:::i;:::-;;:::i;14006:31::-;;;;;;;;;;-1:-1:-1;14006:31:0;;;;-1:-1:-1;;;;;14006:31:0;;;4581:173;;;;;;;;;;-1:-1:-1;4581:173:0;;;;;:::i;:::-;;:::i;29399:218::-;;;;;;;;;;-1:-1:-1;29399:218:0;;;;;:::i;:::-;;:::i;24305:410::-;;;;;;;;;;-1:-1:-1;24305:410:0;;;;;:::i;:::-;;:::i;13856:50::-;;;;;;;;;;-1:-1:-1;13856:50:0;;;;-1:-1:-1;;;;;13856:50:0;;;20540:294;;;;;;;;;;-1:-1:-1;20540:294:0;;;;;:::i;:::-;;:::i;15577:56::-;;;;;;;;;;-1:-1:-1;15577:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4766:151;;;;;;;;;;-1:-1:-1;4766:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4882:18:0;;;4855:7;4882:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4766:151;14293:71;;;;;;;;;;;;;;;;15642:39;;;;;;;;;;-1:-1:-1;15642:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15239:29;;;;;;;;;;;;;;;;32519:571;;;;;;;;;;-1:-1:-1;32519:571:0;;;;;:::i;:::-;;:::i;3308:244::-;;;;;;;;;;-1:-1:-1;3308:244:0;;;;;:::i;:::-;;:::i;14412:64::-;;;;;;;;;;;;;;;;15200:32;;;;;;;;;;;;;;;;27866:312;;;;;;;;;;-1:-1:-1;27866:312:0;;;;;:::i;:::-;;:::i;33103:355::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;;;;;;;;;33232:34;;::::1;33224:87;;;::::0;-1:-1:-1;;;33224:87:0;;6843:2:1;33224:87:0::1;::::0;::::1;6825:21:1::0;6882:2;6862:18;;;6855:30;6921:34;6901:18;;;6894:62;-1:-1:-1;;;6972:18:1;;;6965:38;7020:19;;33224:87:0::1;6641:404:1::0;33224:87:0::1;33327:9;33322:129;33342:21:::0;;::::1;33322:129;;;33385:54;33395:6;33403:10;;33414:1;33403:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;14157:4;33418:6;;33425:1;33418:9;;;;;;;:::i;:::-;;;;;;;:20;;;;:::i;:::-;33385:9;:54::i;:::-;33365:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33322:129;;;;33103:355:::0;;;;;:::o;20846:211::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20941:32:0;::::1;;::::0;;;:23:::1;:32;::::0;;;;;:48;;-1:-1:-1;;20941:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21005:44;;20941:48;;:32;21005:44:::1;::::0;::::1;20846:211:::0;;:::o;4009:91::-;4054:13;4087:5;4080:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4009:91;:::o;4929:167::-;5012:4;5029:37;5038:10;5050:7;5059:6;5029:8;:37::i;:::-;-1:-1:-1;5084:4:0;4929:167;;;;:::o;19428:785::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;19541:19:::1;::::0;-1:-1:-1;;;;;19519:42:0;;::::1;19541:19:::0;::::1;19519:42;;19511:110;;;::::0;-1:-1:-1;;;19511:110:0;;8214:2:1;19511:110:0::1;::::0;::::1;8196:21:1::0;8253:2;8233:18;;;8226:30;8292:34;8272:18;;;8265:62;-1:-1:-1;;;8343:18:1;;;8336:53;8406:19;;19511:110:0::1;8012:419:1::0;19511:110:0::1;19634:46;19715:10;19634:93;;19791:4;-1:-1:-1::0;;;;;19748:48:0::1;:22;-1:-1:-1::0;;;;;19748:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19748:48:0::1;;19740:136;;;::::0;-1:-1:-1;;;19740:136:0;;8894:2:1;19740:136:0::1;::::0;::::1;8876:21:1::0;8933:2;8913:18;;;8906:30;8972:34;8952:18;;;8945:62;9043:34;9023:18;;;9016:62;-1:-1:-1;;;9094:19:1;;;9087:42;9146:19;;19740:136:0::1;8692:479:1::0;19740:136:0::1;19889:59;19918:22;19943:4;19889:20;:59::i;:::-;19959:41;19988:4;19995;19959:20;:41::i;:::-;20040:15;::::0;20011:52:::1;::::0;-1:-1:-1;;;;;20040:15:0::1;::::0;20011:20:::1;:52::i;:::-;20127:19;::::0;20081:67:::1;::::0;-1:-1:-1;;;;;20127:19:0;;::::1;::::0;20081:67;::::1;::::0;::::1;::::0;20127:19:::1;::::0;20081:67:::1;20161:19;:44:::0;;-1:-1:-1;;;;;;20161:44:0::1;-1:-1:-1::0;;;;;20161:44:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;19428:785:0:o;5108:270::-;5214:4;5231:36;5241:6;5249:9;5260:6;5231:9;:36::i;:::-;-1:-1:-1;;;;;5307:19:0;;;;;;:11;:19;;;;;;;;5295:10;5307:31;;;;;;;;;5278:70;;5287:6;;5307:40;;5341:6;;5307:40;:::i;:::-;5278:8;:70::i;:::-;-1:-1:-1;5366:4:0;5108:270;;;;;:::o;2749:120::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2829:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:32;;-1:-1:-1;;2829:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;2749:120::o;22112:197::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;22228:19:::1;::::0;:73:::1;::::0;-1:-1:-1;;;22228:73:0;;::::1;::::0;::::1;9480:25:1::0;;;9521:18;;;9514:34;;;-1:-1:-1;;;;;22228:19:0;;::::1;::::0;:43:::1;::::0;9453:18:1;;22228:73:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;22441:136:::0;22531:19;;:38;;;-1:-1:-1;;;22531:38:0;;;;22504:7;;-1:-1:-1;;;;;22531:19:0;;:36;;:38;;;;;;;;;;;;;;:19;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22524:45;;22441:136;:::o;5390:211::-;5504:10;5478:4;5525:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;5525:32:0;;;;;;;;;;5478:4;;5495:76;;5516:7;;5525:45;;5560:10;;5525:45;:::i;18810:251::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;18897:16:::1;::::0;::::1;;18896:17;18888:55;;;;-1:-1:-1::0;;;18888:55:0::1;;;;;;;:::i;:::-;18954:15;:34:::0;18999:13:::1;:20:::0;;19015:4:::1;-1:-1:-1::0;;18999:20:0;;::::1;::::0;::::1;::::0;;;19030:16:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;;18810:251::o;22588:74::-;22619:19;;;;;;;;;-1:-1:-1;;;;;22619:19:0;-1:-1:-1;;;;;22619:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22588:74::o;22670:133::-;22762:19;;:33;;;-1:-1:-1;;;22762:33:0;;;;22735:7;;-1:-1:-1;;;;;22762:19:0;;:31;;:33;;;;;;;;;;;;;;:19;:33;;;;;;;;;;20221:311;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;20330:15:::1;::::0;-1:-1:-1;;;;;20308:38:0;;::::1;20330:15:::0;::::1;20308:38;;20300:92;;;::::0;-1:-1:-1;;;20300:92:0;;10437:2:1;20300:92:0::1;::::0;::::1;10419:21:1::0;10476:2;10456:18;;;10449:30;10515:34;10495:18;;;10488:62;-1:-1:-1;;;10566:18:1;;;10559:39;10615:19;;20300:92:0::1;10235:405:1::0;20300:92:0::1;20450:15;::::0;20408:59:::1;::::0;-1:-1:-1;;;;;20450:15:0;;::::1;::::0;20408:59;::::1;::::0;::::1;::::0;20450:15:::1;::::0;20408:59:::1;20478:15;:46:::0;;-1:-1:-1;;;;;;20478:46:0::1;-1:-1:-1::0;;;;;20478:46:0;;;::::1;::::0;;;::::1;::::0;;20221:311::o;22815:1016::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;22995:1:::1;22980:11;:16;;22952:102;;;::::0;-1:-1:-1;;;22952:102:0;;10847:2:1;22952:102:0::1;::::0;::::1;10829:21:1::0;10886:2;10866:18;;;10859:30;10925:34;10905:18;;;10898:62;-1:-1:-1;;;10976:18:1;;;10969:51;11037:19;;22952:102:0::1;10645:417:1::0;22952:102:0::1;23112:1;23095:13;:18;;23065:106;;;::::0;-1:-1:-1;;;23065:106:0;;11269:2:1;23065:106:0::1;::::0;::::1;11251:21:1::0;11308:2;11288:18;;;11281:30;11347:34;11327:18;;;11320:62;-1:-1:-1;;;11398:18:1;;;11391:50;11458:19;;23065:106:0::1;11067:416:1::0;23065:106:0::1;23229:1;23212:13;:18;;23182:105;;;::::0;-1:-1:-1;;;23182:105:0;;11690:2:1;23182:105:0::1;::::0;::::1;11672:21:1::0;11729:2;11709:18;;;11702:30;11768:34;11748:18;;;11741:62;-1:-1:-1;;;11819:18:1;;;11812:50;11879:19;;23182:105:0::1;11488:416:1::0;23182:105:0::1;23351:1;23331:16;:21;;23298:115;;;::::0;-1:-1:-1;;;23298:115:0;;12111:2:1;23298:115:0::1;::::0;::::1;12093:21:1::0;12150:2;12130:18;;;12123:30;12189:34;12169:18;;;12162:62;-1:-1:-1;;;12240:18:1;;;12233:54;12304:19;;23298:115:0::1;11909:420:1::0;23298:115:0::1;23436:29;23452:13:::0;23436;:29:::1;:::i;:::-;23432:1;:33;23424:89;;;::::0;-1:-1:-1;;;23424:89:0;;12536:2:1;23424:89:0::1;::::0;::::1;12518:21:1::0;12575:2;12555:18;;;12548:30;12614:34;12594:18;;;12587:62;-1:-1:-1;;;12665:18:1;;;12658:41;12716:19;;23424:89:0::1;12334:407:1::0;23424:89:0::1;23534:10;:24:::0;;;23569:12:::1;:28:::0;;;23608:12:::1;:28:::0;;;23648:15:::1;:34:::0;;;23623:13;23705:27:::1;23584:13:::0;23547:11;23705:27:::1;:::i;:::-;:43;;;;:::i;:::-;23693:9;:55:::0;23810:10:::1;::::0;23796:12:::1;::::0;23782::::1;::::0;23774:47:::1;::::0;::::1;::::0;;;::::1;22815:1016:::0;;;;:::o;4442:127::-;-1:-1:-1;;;;;4543:18:0;4516:7;4543:18;;;;;;;;;;;;4442:127::o;3148:148::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;3239:6:::1;::::0;3218:40:::1;::::0;3255:1:::1;::::0;3239:6:::1;::::0;::::1;-1:-1:-1::0;;;;;3239:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;3218:40:0;3255:1;;3218:40:::1;3269:6;:19:::0;;-1:-1:-1;;;;;;3269:19:0::1;::::0;;3148:148::o;23843:454::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;23974:4:::1;23955:16;14096:4;23955:1;:16;:::i;:::-;:23;;;;:::i;:::-;23944:6;:35;;23936:89;;;::::0;-1:-1:-1;;;23936:89:0;;13170:2:1;23936:89:0::1;::::0;::::1;13152:21:1::0;13209:2;13189:18;;;13182:30;13248:34;13228:18;;;13221:62;-1:-1:-1;;;13299:18:1;;;13292:39;13348:19;;23936:89:0::1;12968:405:1::0;23936:89:0::1;24079:4;24059:17;14096:4;24059:2;:17;:::i;:::-;:24;;;;:::i;:::-;24044:10;:40;;24036:99;;;::::0;-1:-1:-1;;;24036:99:0;;13580:2:1;24036:99:0::1;::::0;::::1;13562:21:1::0;13619:2;13599:18;;;13592:30;13658:34;13638:18;;;13631:62;-1:-1:-1;;;13709:18:1;;;13702:44;13763:19;;24036:99:0::1;13378:410:1::0;24036:99:0::1;24164:17;14157:4;24164:6:::0;:17:::1;:::i;:::-;24156:5;:25:::0;24204:21:::1;14157:4;24204:10:::0;:21:::1;:::i;:::-;24192:9;:33:::0;;;24272:5:::1;::::0;24251:38:::1;::::0;::::1;::::0;;;::::1;23843:454:::0;;:::o;19073:347::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;19173:11:::1;::::0;::::1;::::0;::::1;;;19172:12;19164:50;;;;-1:-1:-1::0;;;19164:50:0::1;;;;;;;:::i;:::-;19225:14;:32:::0;;;19282:12:::1;19268:11;:26:::0;19305:13:::1;:30:::0;;;19346:11:::1;:18:::0;;-1:-1:-1;;19346:18:0::1;;;::::0;;19390:22:::1;::::0;19321:14;;19390:22:::1;::::0;-1:-1:-1;;19390:22:0::1;19073:347:::0;;:::o;21700:404::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;21798:6:::1;21786:8;:18;;:40;;;;;21820:6;21808:8;:18;;21786:40;21778:111;;;::::0;-1:-1:-1;;;21778:111:0;;13995:2:1;21778:111:0::1;::::0;::::1;13977:21:1::0;14034:2;14014:18;;;14007:30;14073:34;14053:18;;;14046:62;-1:-1:-1;;;14124:18:1;;;14117:56;14190:19;;21778:111:0::1;13793:422:1::0;21778:111:0::1;21920:16;;21908:8;:28;;21900:91;;;::::0;-1:-1:-1;;;21900:91:0;;14422:2:1;21900:91:0::1;::::0;::::1;14404:21:1::0;14461:2;14441:18;;;14434:30;14500:34;14480:18;;;14473:62;-1:-1:-1;;;14551:18:1;;;14544:48;14609:19;;21900:91:0::1;14220:414:1::0;21900:91:0::1;22041:16;::::0;22007:51:::1;::::0;22031:8;;22007:51:::1;::::0;;;::::1;22069:16;:27:::0;21700:404::o;2650:87::-;2723:6;;;;;-1:-1:-1;;;;;2723:6:0;;2650:87::o;4112:95::-;4159:13;4192:7;4185:14;;;;;:::i;21065:262::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;21172:13:::1;-1:-1:-1::0;;;;;21164:21:0::1;:4;-1:-1:-1::0;;;;;21164:21:0::1;;;21156:109;;;::::0;-1:-1:-1;;;21156:109:0;;14841:2:1;21156:109:0::1;::::0;::::1;14823:21:1::0;14880:2;14860:18;;;14853:30;14919:34;14899:18;;;14892:62;14990:34;14970:18;;;14963:62;-1:-1:-1;;;15041:19:1;;;15034:42;15093:19;;21156:109:0::1;14639:479:1::0;21156:109:0::1;21278:41;21307:4;21313:5;21278:28;:41::i;:::-;21065:262:::0;;:::o;22321:112::-;22394:19;;:31;;;-1:-1:-1;;;;;;22394:31:0;;;;22367:7;;-1:-1:-1;;;;;22394:19:0;;:29;;:31;;;;;;;;;;;;;;:19;:31;;;;;;;;;;5609:221;5728:10;5702:4;5749:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;5749:32:0;;;;;;;;;;5702:4;;5719:81;;5740:7;;5749:50;;5784:15;;5749:50;:::i;4581:173::-;4667:4;4684:40;4694:10;4706:9;4717:6;4684:9;:40::i;29399:218::-;3067:10;3056:22;;;;:10;:22;;;;;;;;3048:68;;;;-1:-1:-1;;;3048:68:0;;;;;;;:::i;:::-;29556:16;29539:14;29513:23:::1;14157:4;14096;29513:23;:::i;:::-;:40;;;;:::i;:::-;:59;;;;:::i;:::-;29500:10;:72:::0;-1:-1:-1;;29583:19:0::1;:26:::0;;-1:-1:-1;;29583:26:0::1;29605:4;29583:26;::::0;;29399:218::o;24305:410::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;24427:19;24419:4:::1;24400:16;14096:4;24400:1;:16;:::i;:::-;:23;;;;:::i;:::-;:46;;:95;;;;-1:-1:-1::0;24492:3:0::1;24473:16;14096:4;24473:1;:16;:::i;:::-;:22;;;;:::i;:::-;24450:19;:45;;24400:95;24392:172;;;::::0;-1:-1:-1;;;24392:172:0;;15727:2:1;24392:172:0::1;::::0;::::1;15709:21:1::0;15766:2;15746:18;;;15739:30;15805:34;15785:18;;;15778:62;-1:-1:-1;;;15856:18:1;;;15849:53;15919:19;;24392:172:0::1;15525:419:1::0;24392:172:0::1;24606:30;14157:4;24606:19:::0;:30:::1;:::i;:::-;24585:18;:51:::0;;;24664:41:::1;::::0;::::1;::::0;;;::::1;24305:410:::0;:::o;20540:294::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20633:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;:39;;::::0;::::1;;;;20625:100;;;::::0;-1:-1:-1;;;20625:100:0;;16151:2:1;20625:100:0::1;::::0;::::1;16133:21:1::0;16190:2;16170:18;;;16163:30;16229:34;16209:18;;;16202:62;-1:-1:-1;;;16280:18:1;;;16273:46;16336:19;;20625:100:0::1;15949:412:1::0;20625:100:0::1;-1:-1:-1::0;;;;;20736:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;20736:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20792:34;;2982:41:1;;;20792:34:0::1;::::0;2955:18:1;20792:34:0::1;;;;;;;20540:294:::0;;:::o;32519:571::-;3067:10;3056:22;;;;:10;:22;;;;;;;;3048:68;;;;-1:-1:-1;;;3048:68:0;;;;;;;:::i;:::-;32594:23:::1;32654:3;32620:31;32644:7:::0;32620:21:::1;:31;:::i;:::-;:37;;;;:::i;:::-;32752:16;::::0;;32766:1:::1;32752:16:::0;;;;;::::1;::::0;;32594:63;;-1:-1:-1;32728:21:0::1;::::0;32752:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;32789:15:0::1;::::0;:22:::1;::::0;;-1:-1:-1;;;32789:22:0;;;;32728:40;;-1:-1:-1;;;;;;32789:15:0;;::::1;::::0;:20:::1;::::0;-1:-1:-1;32789:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32779:4;32784:1;32779:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;32779:32:0::1;;;-1:-1:-1::0;;;;;32779:32:0::1;;;::::0;::::1;32840:4;32822;32827:1;32822:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32822:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;32858:15:::1;::::0;33029:11:::1;::::0;32858:224:::1;::::0;-1:-1:-1;;;32858:224:0;;:15;;::::1;::::0;:66:::1;::::0;32932:15;;32858:224:::1;::::0;:15:::1;::::0;33010:4;;33029:11;;::::1;::::0;33056:15:::1;::::0;32858:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32583:507;;32519:571:::0;:::o;3308:244::-;2932:10;2921:7;:5;:7::i;:::-;-1:-1:-1;;;;;2921:21:0;;2913:66;;;;-1:-1:-1;;;2913:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3397:22:0;::::1;3389:73;;;::::0;-1:-1:-1;;;3389:73:0;;17681:2:1;3389:73:0::1;::::0;::::1;17663:21:1::0;17720:2;17700:18;;;17693:30;17759:34;17739:18;;;17732:62;-1:-1:-1;;;17810:18:1;;;17803:36;17856:19;;3389:73:0::1;17479:402:1::0;3389:73:0::1;3499:6;::::0;3478:38:::1;::::0;-1:-1:-1;;;;;3478:38:0;;::::1;::::0;3499:6:::1;::::0;::::1;;::::0;-1:-1:-1;;;;;;;;;;;3478:38:0;;;::::1;3527:6;:17:::0;;-1:-1:-1;;;;;3527:17:0;;::::1;;;-1:-1:-1::0;;;;;;3527:17:0;;::::1;::::0;;;::::1;::::0;;3308:244::o;27866:312::-;3067:10;3056:22;;;;:10;:22;;;;;;;;3048:68;;;;-1:-1:-1;;;3048:68:0;;;;;;;:::i;:::-;27970:3:::1;27958:8;:15;;27950:61;;;::::0;-1:-1:-1;;;27950:61:0;;18088:2:1;27950:61:0::1;::::0;::::1;18070:21:1::0;18127:2;18107:18;;;18100:30;18166:34;18146:18;;;18139:62;-1:-1:-1;;;18217:18:1;;;18210:31;18258:19;;27950:61:0::1;17886:397:1::0;27950:61:0::1;28022:9;:16:::0;;28049:27;::::1;;::::0;::::1;-1:-1:-1::0;;28049:27:0;;;;28022:16;28049:27;;;28107:20:::1;:8:::0;28118:9:::1;28107:20;:::i;:::-;28087:17;:40:::0;-1:-1:-1;;28155:15:0::1;28138:14;:32:::0;27866:312::o;25236:2618::-;25329:11;25326:92;;25357:28;25373:4;25379:2;25383:1;25357:15;:28::i;:::-;25236:2618;;;:::o;25326:92::-;25434:33;25450:4;25456:2;25460:6;25434:15;:33::i;:::-;25493:16;;25478:12;;25493:16;;:29;;;;-1:-1:-1;25514:8:0;;;;25513:9;25493:29;-1:-1:-1;;;;;25546:24:0;;;;;;:18;:24;;;;;;25478:44;;-1:-1:-1;25546:24:0;;;:50;;-1:-1:-1;;;;;;25574:22:0;;;;;;:18;:22;;;;;;;;25546:50;25543:97;;;-1:-1:-1;25623:5:0;25543:97;25663:7;25660:1472;;;25753:13;;25687:12;;;;25753:13;;25750:1250;;;-1:-1:-1;;;;;25788:12:0;;;;;;:6;:12;;;;;;;;25785:562;;;-1:-1:-1;;;;;25832:16:0;;;;;;:12;:16;;;;;;;;25831:17;25823:64;;;;-1:-1:-1;;;25823:64:0;;18490:2:1;25823:64:0;;;18472:21:1;18529:2;18509:18;;;18502:30;18568:34;18548:18;;;18541:62;-1:-1:-1;;;18619:18:1;;;18612:32;18661:19;;25823:64:0;18288:398:1;25823:64:0;25913:11;;;;;;;25909:190;;25951:44;25967:4;25981;25988:6;25951:15;:44::i;:::-;-1:-1:-1;;;;;;;;26021:16:0;;;;;;;:12;:16;;;;;:23;;-1:-1:-1;;26021:23:0;26040:4;26021:23;;;-1:-1:-1;;25236:2618:0:o;25909:190::-;-1:-1:-1;;;;;26123:17:0;;;;;;:13;:17;;;;;;:22;26120:155;;26215:13;;-1:-1:-1;;;;;26195:17:0;;;;;;:13;:17;;;;;;:33;;26215:13;26195:33;:::i;:::-;26180:12;:48;26172:80;;;;-1:-1:-1;;;26172:80:0;;18893:2:1;26172:80:0;;;18875:21:1;18932:2;18912:18;;;18905:30;-1:-1:-1;;;18951:18:1;;;18944:49;19010:18;;26172:80:0;18691:343:1;26172:80:0;-1:-1:-1;;;;;26296:17:0;;;;;;:13;:17;;;;;26316:12;26296:32;;25785:562;26414:14;;26400:11;;:28;;;;:::i;:::-;26385:12;:43;26382:430;;;26473:3;26459:11;:6;26468:2;26459:11;:::i;:::-;:17;;;;:::i;:::-;26452:24;;25750:1250;;26382:430;26590:15;;26576:11;;:29;;;;:::i;:::-;26561:12;:44;:68;;26616:13;;;;26561:68;;;26608:5;26561:68;26545:13;:84;;-1:-1:-1;;26545:84:0;;;;;;;;;;-1:-1:-1;;26683:18:0;26696:4;26683:12;:18::i;:::-;26652:49;-1:-1:-1;26652:49:0;-1:-1:-1;26652:49:0;;-1:-1:-1;26789:3:0;26774:12;26652:49;26774:6;:12;:::i;:::-;:18;;;;:::i;:::-;26767:25;;26522:290;;25750:1250;;;26859:11;26872:13;26889:18;26902:4;26889:12;:18::i;:::-;26858:49;-1:-1:-1;26858:49:0;-1:-1:-1;26858:49:0;;-1:-1:-1;26979:3:0;26964:12;26858:49;26964:6;:12;:::i;:::-;:18;;;;:::i;:::-;26957:25;;26843:157;;25750:1250;27022:13;27031:4;27022:6;:13;:::i;:::-;27013:22;;27050:70;27066:4;27073:9;:39;;27107:4;27073:39;;;27085:11;;-1:-1:-1;;;;;27085:11:0;27073:39;27115:4;27050:15;:70::i;:::-;25672:1460;;25660:1472;27155:19;;;;27152:216;;;27193:12;:10;:12::i;:::-;27190:69;;;27225:18;27232:10;;27225:6;:18::i;:::-;27152:216;;;27292:16;27303:4;27292:10;:16::i;:::-;27289:79;;;27326:30;27337:18;;27326:10;:30::i;:::-;27388:33;27404:4;27410:2;27414:6;27388:15;:33::i;:::-;-1:-1:-1;;;;;27438:29:0;;;;;;:23;:29;;;;;;;;27434:124;;27486:19;;-1:-1:-1;;;;;27486:19:0;:28;27523:4;27530:15;27523:4;27530:9;:15::i;:::-;27486:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27482:76;;-1:-1:-1;;;;;27572:27:0;;;;;;:23;:27;;;;;;;;27568:118;;27618:19;;-1:-1:-1;;;;;27618:19:0;:28;27655:2;27660:13;27655:2;27660:9;:13::i;:::-;27618:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27614:72;;27709:16;;;;:29;;;;-1:-1:-1;27730:8:0;;;;27729:9;27709:29;:47;;;;-1:-1:-1;27743:13:0;;;;27742:14;27709:47;27706:141;;;27771:19;;27799:16;;27771:45;;-1:-1:-1;;;;;;27771:45:0;;-1:-1:-1;;;;;27771:19:0;;;;:27;;:45;;;;3180:25:1;;;3168:2;3153:18;;3034:177;27771:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27767:69;;;;6960:346;-1:-1:-1;;;;;7062:19:0;;7054:68;;;;-1:-1:-1;;;7054:68:0;;19528:2:1;7054:68:0;;;19510:21:1;19567:2;19547:18;;;19540:30;19606:34;19586:18;;;19579:62;-1:-1:-1;;;19657:18:1;;;19650:34;19701:19;;7054:68:0;19326:400:1;7054:68:0;-1:-1:-1;;;;;7141:21:0;;7133:68;;;;-1:-1:-1;;;7133:68:0;;19933:2:1;7133:68:0;;;19915:21:1;19972:2;19952:18;;;19945:30;20011:34;19991:18;;;19984:62;-1:-1:-1;;;20062:18:1;;;20055:32;20104:19;;7133:68:0;19731:398:1;7133:68:0;-1:-1:-1;;;;;7214:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7266:32;;3180:25:1;;;7266:32:0;;3153:18:1;7266:32:0;;;;;;;;6960:346;;;:::o;21335:357::-;-1:-1:-1;;;;;21426:12:0;;;;;;:6;:12;;;;;;;;:21;;;;;;;21418:96;;;;-1:-1:-1;;;21418:96:0;;20336:2:1;21418:96:0;;;20318:21:1;20375:2;20355:18;;;20348:30;20414:34;20394:18;;;20387:62;20485:32;20465:18;;;20458:60;20535:19;;21418:96:0;20134:426:1;21418:96:0;-1:-1:-1;;;;;21525:12:0;;;;;;:6;:12;;;;;:20;;-1:-1:-1;;21525:20:0;;;;;;;;;;;;21558:69;;21583:32;21604:4;21610;21583:20;:32::i;:::-;21644:40;;;;;;-1:-1:-1;;;;;21644:40:0;;;;;;;;21335:357;;:::o;5842:336::-;-1:-1:-1;;;;;6030:17:0;;:9;:17;;;;;;;;;;;:26;;6050:6;;6030:26;:::i;:::-;-1:-1:-1;;;;;6010:17:0;;;:9;:17;;;;;;;;;;;:46;;;;6090:20;;;;;;;:29;;6113:6;;6090:29;:::i;:::-;-1:-1:-1;;;;;6067:20:0;;;:9;:20;;;;;;;;;;;;:52;;;;6135:35;3180:25:1;;;6067:20:0;;6135:35;;;;;;3153:18:1;6135:35:0;3034:177:1;24727:497:0;24829:7;:5;:7::i;:::-;-1:-1:-1;;;;;24821:15:0;:4;-1:-1:-1;;;;;24821:15:0;;;:32;;;;;24846:7;:5;:7::i;:::-;-1:-1:-1;;;;;24840:13:0;:2;-1:-1:-1;;;;;24840:13:0;;;24821:32;:61;;;;-1:-1:-1;;;;;;24858:24:0;;;;;;:18;:24;;;;;;;;24857:25;24821:61;24817:399;;;24907:16;;;;24899:55;;;;-1:-1:-1;;;24899:55:0;;20767:2:1;24899:55:0;;;20749:21:1;20806:2;20786:18;;;20779:30;-1:-1:-1;;;20825:18:1;;;20818:56;20891:18;;24899:55:0;20565:350:1;24899:55:0;24987:5;;24977:6;:15;;24969:68;;;;-1:-1:-1;;;24969:68:0;;21122:2:1;24969:68:0;;;21104:21:1;21161:2;21141:18;;;21134:30;21200:34;21180:18;;;21173:62;-1:-1:-1;;;21251:18:1;;;21244:38;21299:19;;24969:68:0;20920:404:1;24969:68:0;-1:-1:-1;;;;;25057:12:0;;;;;;:6;:12;;;;;;;;25053:152;;;25132:9;;25122:6;25097:22;25115:2;25097:9;:22::i;:::-;:31;;;;:::i;:::-;:44;;25089:100;;;;-1:-1:-1;;;25089:100:0;;21531:2:1;25089:100:0;;;21513:21:1;21570:2;21550:18;;;21543:30;21609:34;21589:18;;;21582:62;-1:-1:-1;;;21660:18:1;;;21653:41;21711:19;;25089:100:0;21329:407:1;28190:919:0;28243:7;28252:4;28268:11;28293:9;;;;;;;;;;;28290:812;;;28318:16;28375:1;28355:17;;:21;;;;:::i;:::-;28337:14;;:39;;;;:::i;:::-;28318:58;;28391:16;28428:17;;28410:14;;:35;;;;:::i;:::-;28391:54;;28495:8;28477:15;:26;28474:482;;;-1:-1:-1;;;;;28529:12:0;;;;;;:6;:12;;;;;;;;:21;;28548:2;28529:21;;;28544:1;28529:21;28582:13;;28523:27;;;;;28582:13;;;;;;;;-1:-1:-1;28190:919:0;-1:-1:-1;;;;;28190:919:0:o;28474:482::-;28652:8;28634:15;:26;28631:325;;;-1:-1:-1;;;;;28686:12:0;;;;;;:6;:12;;;;;;;;:21;;28705:2;28686:21;;;-1:-1:-1;;28739:13:0;;28701:1;;28739:13;;;;28680:27;28739:13;;-1:-1:-1;28680:27:0;-1:-1:-1;;;28190:919:0:o;28631:325::-;-1:-1:-1;;;;;28812:12:0;;;;;;:6;:12;;;;;;;;:54;;28851:15;;28839:9;;:27;;;;:::i;:::-;28812:54;;;28827:9;;28812:54;28885:9;:17;;-1:-1:-1;;28885:17:0;;;28806:60;28897:5;;-1:-1:-1;28190:919:0;-1:-1:-1;;;;;28190:919:0:o;28290:812::-;-1:-1:-1;;;;;29002:12:0;;;;;;:6;:12;;;;;;;;:54;;29041:15;;29029:9;;:27;;;;:::i;:::-;29002:54;;;29017:9;;29002:54;28996:60;29084:5;;-1:-1:-1;28190:919:0;-1:-1:-1;;;28190:919:0:o;29121:266::-;29165:4;29181:28;29212:24;29230:4;29212:9;:24::i;:::-;29286:10;;29314:16;;29181:55;;-1:-1:-1;29262:34:0;;;;29314:16;;:27;;;;;29334:7;29314:27;:47;;;;-1:-1:-1;29355:6:0;;;;;;;29354:7;29314:47;:65;;;;-1:-1:-1;29366:13:0;;;;29365:14;29314:65;29307:72;;;;29121:266;:::o;29630:165::-;18739:6;:13;;-1:-1:-1;;18739:13:0;;;;;29724:11:::1;::::0;29693:56:::1;::::0;29717:4:::1;::::0;-1:-1:-1;;;;;29724:11:0::1;29737::::0;29693:15:::1;:56::i;:::-;-1:-1:-1::0;29760:19:0::1;:27:::0;;-1:-1:-1;;18776:14:0;;;29630:165::o;29807:344::-;29863:4;29879:28;29910:24;29928:4;29910:9;:24::i;:::-;29984:18;;30030:16;;29879:55;;-1:-1:-1;29960:42:0;;;;30030:16;;:27;;;;;30050:7;30030:27;:40;;;;-1:-1:-1;30062:8:0;;;;30061:9;30030:40;:66;;;;-1:-1:-1;;;;;;30084:12:0;;;;;;:6;:12;;;;;;;;30083:13;30030:66;:95;;;;-1:-1:-1;;;;;;30101:24:0;;;;;;:18;:24;;;;;;;;30100:25;30030:95;:113;;;;-1:-1:-1;30130:13:0;;;;30129:14;30030:113;30023:120;29807:344;-1:-1:-1;;;;29807:344:0:o;30171:1211::-;18639:8;:15;;-1:-1:-1;;18639:15:0;18650:4;18639:15;;;30276:9:::1;::::0;30261:12:::1;::::0;18639:8;;30276:9;30252:21:::1;::::0;:6;:21:::1;:::i;:::-;:33;;;;:::i;:::-;30233:52:::0;-1:-1:-1;30296:20:0::1;30319:12;30330:1;30233:52:::0;30319:12:::1;:::i;:::-;30296:35;;30342:23;30392:9;;30377:12;;30368:6;:21;;;;:::i;:::-;:33;;;;:::i;:::-;30342:59:::0;-1:-1:-1;30412:20:0::1;30342:59:::0;30435:17:::1;30444:8:::0;30435:6;:17:::1;:::i;:::-;:35;;;;:::i;:::-;30412:58:::0;-1:-1:-1;30481:18:0::1;30412:58:::0;30502:30:::1;30517:15:::0;30502:12;:30:::1;:::i;:::-;:45;;;;:::i;:::-;30481:66:::0;-1:-1:-1;30583:21:0::1;30617:28;30481:66:::0;30617:16:::1;:28::i;:::-;30668:18;30689:38;30713:14:::0;30689:21:::1;:38;:::i;:::-;30668:59:::0;-1:-1:-1;30748:16:0::1;30795:10:::0;30767:25:::1;30780:12:::0;30668:59;30767:25:::1;:::i;:::-;:38;;;;:::i;:::-;30748:57:::0;-1:-1:-1;30816:23:0::1;30873:10:::0;30842:28:::1;30855:15:::0;30842:10;:28:::1;:::i;:::-;:41;;;;:::i;:::-;30927:16;::::0;30919:70:::1;::::0;30816:67;;-1:-1:-1;30905:9:0::1;::::0;-1:-1:-1;;;;;30927:16:0;;::::1;::::0;30979:5:::1;::::0;30816:67;;30905:9;30919:70;30905:9;30919:70;30816:67;30927:16;30979:5;30919:70:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;30904:85:0;;-1:-1:-1;;31041:14:0;;31038:139:::1;;31071:36;31084:12;31098:8;31071:12;:36::i;:::-;31127:38;::::0;;9480:25:1;;;9536:2;9521:18;;9514:34;;;31127:38:0::1;::::0;9453:18:1;31127:38:0::1;;;;;;;31038:139;31247:19;::::0;:51:::1;::::0;;-1:-1:-1;;;31247:51:0;;;;31211:21:::1;::::0;-1:-1:-1;;;;;31247:19:0::1;::::0;:27:::1;::::0;31211:21;;31247:51:::1;::::0;;::::1;::::0;31187:21:::1;::::0;31247:51;;;;;;;;31211:21;31247:19;:51;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;;;;;;31243:66:::0;31346:28:::1;::::0;3180:25:1;;;31346:28:0::1;::::0;3168:2:1;3153:18;31346:28:0::1;;;;;;;-1:-1:-1::0;;18677:8:0;:16;;-1:-1:-1;;18677:16:0;;;-1:-1:-1;;;;;;;;;;30171:1211:0:o;31390:589::-;31540:16;;;31554:1;31540:16;;;;;;;;31516:21;;31540:16;;;;;;;;;;-1:-1:-1;31540:16:0;31516:40;;31585:4;31567;31572:1;31567:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31567:23:0;;;:7;;;;;;;;;;:23;;;;31611:15;;:22;;;-1:-1:-1;;;31611:22:0;;;;:15;;;;;:20;;:22;;;;;31567:7;;31611:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31601:4;31606:1;31601:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31601:32:0;;;:7;;;;;;;;;:32;31678:15;;31646:62;;31663:4;;31678:15;31696:11;31646:8;:62::i;:::-;31747:15;;:224;;-1:-1:-1;;;31747:224:0;;-1:-1:-1;;;;;31747:15:0;;;;:66;;:224;;31828:11;;31747:15;;31898:4;;31925;;31945:15;;31747:224;;;:::i;31991:516::-;32171:15;;32139:62;;32156:4;;-1:-1:-1;;;;;32171:15:0;32189:11;32139:8;:62::i;:::-;32243:15;;32447:11;;32243:256;;-1:-1:-1;;;32243:256:0;;32315:4;32243:256;;;22879:34:1;22929:18;;;22922:34;;;32243:15:0;22972:18:1;;;22965:34;;;23015:18;;;23008:34;-1:-1:-1;;;;;32447:11:0;;;23058:19:1;;;23051:44;32473:15:0;23111:19:1;;;23104:35;32243:15:0;;;:31;;32282:9;;22813:19:1;;32243:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31991:516;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:367::-;213:8;223:6;277:3;270:4;262:6;258:17;254:27;244:55;;295:1;292;285:12;244:55;-1:-1:-1;318:20:1;;-1:-1:-1;;;;;350:30:1;;347:50;;;393:1;390;383:12;347:50;430:4;422:6;418:17;406:29;;490:3;483:4;473:6;470:1;466:14;458:6;454:27;450:38;447:47;444:67;;;507:1;504;497:12;444:67;150:367;;;;;:::o;522:908::-;653:6;661;669;677;685;738:2;726:9;717:7;713:23;709:32;706:52;;;754:1;751;744:12;706:52;793:9;780:23;812:31;837:5;812:31;:::i;:::-;862:5;-1:-1:-1;918:2:1;903:18;;890:32;-1:-1:-1;;;;;971:14:1;;;968:34;;;998:1;995;988:12;968:34;1037:70;1099:7;1090:6;1079:9;1075:22;1037:70;:::i;:::-;1126:8;;-1:-1:-1;1011:96:1;-1:-1:-1;1214:2:1;1199:18;;1186:32;;-1:-1:-1;1230:16:1;;;1227:36;;;1259:1;1256;1249:12;1227:36;;1298:72;1362:7;1351:8;1340:9;1336:24;1298:72;:::i;:::-;522:908;;;;-1:-1:-1;522:908:1;;-1:-1:-1;1389:8:1;;1272:98;522:908;-1:-1:-1;;;522:908:1:o;1435:160::-;1500:20;;1556:13;;1549:21;1539:32;;1529:60;;1585:1;1582;1575:12;1529:60;1435:160;;;:::o;1600:315::-;1665:6;1673;1726:2;1714:9;1705:7;1701:23;1697:32;1694:52;;;1742:1;1739;1732:12;1694:52;1781:9;1768:23;1800:31;1825:5;1800:31;:::i;:::-;1850:5;-1:-1:-1;1874:35:1;1905:2;1890:18;;1874:35;:::i;:::-;1864:45;;1600:315;;;;;:::o;1920:597::-;2032:4;2061:2;2090;2079:9;2072:21;2122:6;2116:13;2165:6;2160:2;2149:9;2145:18;2138:34;2190:1;2200:140;2214:6;2211:1;2208:13;2200:140;;;2309:14;;;2305:23;;2299:30;2275:17;;;2294:2;2271:26;2264:66;2229:10;;2200:140;;;2358:6;2355:1;2352:13;2349:91;;;2428:1;2423:2;2414:6;2403:9;2399:22;2395:31;2388:42;2349:91;-1:-1:-1;2501:2:1;2480:15;-1:-1:-1;;2476:29:1;2461:45;;;;2508:2;2457:54;;1920:597;-1:-1:-1;;;1920:597:1:o;2522:315::-;2590:6;2598;2651:2;2639:9;2630:7;2626:23;2622:32;2619:52;;;2667:1;2664;2657:12;2619:52;2706:9;2693:23;2725:31;2750:5;2725:31;:::i;:::-;2775:5;2827:2;2812:18;;;;2799:32;;-1:-1:-1;;;2522:315:1:o;3448:247::-;3507:6;3560:2;3548:9;3539:7;3535:23;3531:32;3528:52;;;3576:1;3573;3566:12;3528:52;3615:9;3602:23;3634:31;3659:5;3634:31;:::i;:::-;3684:5;3448:247;-1:-1:-1;;;3448:247:1:o;3700:456::-;3777:6;3785;3793;3846:2;3834:9;3825:7;3821:23;3817:32;3814:52;;;3862:1;3859;3852:12;3814:52;3901:9;3888:23;3920:31;3945:5;3920:31;:::i;:::-;3970:5;-1:-1:-1;4027:2:1;4012:18;;3999:32;4040:33;3999:32;4040:33;:::i;:::-;3700:456;;4092:7;;-1:-1:-1;;;4146:2:1;4131:18;;;;4118:32;;3700:456::o;4369:248::-;4437:6;4445;4498:2;4486:9;4477:7;4473:23;4469:32;4466:52;;;4514:1;4511;4504:12;4466:52;-1:-1:-1;;4537:23:1;;;4607:2;4592:18;;;4579:32;;-1:-1:-1;4369:248:1:o;4811:180::-;4870:6;4923:2;4911:9;4902:7;4898:23;4894:32;4891:52;;;4939:1;4936;4929:12;4891:52;-1:-1:-1;4962:23:1;;4811:180;-1:-1:-1;4811:180:1:o;4996:385::-;5082:6;5090;5098;5106;5159:3;5147:9;5138:7;5134:23;5130:33;5127:53;;;5176:1;5173;5166:12;5127:53;-1:-1:-1;;5199:23:1;;;5269:2;5254:18;;5241:32;;-1:-1:-1;5320:2:1;5305:18;;5292:32;;5371:2;5356:18;5343:32;;-1:-1:-1;4996:385:1;-1:-1:-1;4996:385:1:o;5634:388::-;5702:6;5710;5763:2;5751:9;5742:7;5738:23;5734:32;5731:52;;;5779:1;5776;5769:12;5731:52;5818:9;5805:23;5837:31;5862:5;5837:31;:::i;:::-;5887:5;-1:-1:-1;5944:2:1;5929:18;;5916:32;5957:33;5916:32;5957:33;:::i;:::-;6009:7;5999:17;;;5634:388;;;;;:::o;6027:248::-;6092:6;6100;6153:2;6141:9;6132:7;6128:23;6124:32;6121:52;;;6169:1;6166;6159:12;6121:52;6192:26;6208:9;6192:26;:::i;6280:356::-;6482:2;6464:21;;;6501:18;;;6494:30;6560:34;6555:2;6540:18;;6533:62;6627:2;6612:18;;6280:356::o;7050:127::-;7111:10;7106:3;7102:20;7099:1;7092:31;7142:4;7139:1;7132:15;7166:4;7163:1;7156:15;7182:127;7243:10;7238:3;7234:20;7231:1;7224:31;7274:4;7271:1;7264:15;7298:4;7295:1;7288:15;7314:168;7354:7;7420:1;7416;7412:6;7408:14;7405:1;7402:21;7397:1;7390:9;7383:17;7379:45;7376:71;;;7427:18;;:::i;:::-;-1:-1:-1;7467:9:1;;7314:168::o;7487:135::-;7526:3;-1:-1:-1;;7547:17:1;;7544:43;;;7567:18;;:::i;:::-;-1:-1:-1;7614:1:1;7603:13;;7487:135::o;7627:380::-;7706:1;7702:12;;;;7749;;;7770:61;;7824:4;7816:6;7812:17;7802:27;;7770:61;7877:2;7869:6;7866:14;7846:18;7843:38;7840:161;;;7923:10;7918:3;7914:20;7911:1;7904:31;7958:4;7955:1;7948:15;7986:4;7983:1;7976:15;7840:161;;7627:380;;;:::o;8436:251::-;8506:6;8559:2;8547:9;8538:7;8534:23;8530:32;8527:52;;;8575:1;8572;8565:12;8527:52;8607:9;8601:16;8626:31;8651:5;8626:31;:::i;9176:125::-;9216:4;9244:1;9241;9238:8;9235:34;;;9249:18;;:::i;:::-;-1:-1:-1;9286:9:1;;9176:125::o;9559:184::-;9629:6;9682:2;9670:9;9661:7;9657:23;9653:32;9650:52;;;9698:1;9695;9688:12;9650:52;-1:-1:-1;9721:16:1;;9559:184;-1:-1:-1;9559:184:1:o;9748:128::-;9788:3;9819:1;9815:6;9812:1;9809:13;9806:39;;;9825:18;;:::i;:::-;-1:-1:-1;9861:9:1;;9748:128::o;9881:349::-;10083:2;10065:21;;;10122:2;10102:18;;;10095:30;-1:-1:-1;;;10156:2:1;10141:18;;10134:55;10221:2;10206:18;;9881:349::o;12746:217::-;12786:1;12812;12802:132;;12856:10;12851:3;12847:20;12844:1;12837:31;12891:4;12888:1;12881:15;12919:4;12916:1;12909:15;12802:132;-1:-1:-1;12948:9:1;;12746:217::o;15123:397::-;15325:2;15307:21;;;15364:2;15344:18;;;15337:30;15403:34;15398:2;15383:18;;15376:62;-1:-1:-1;;;15469:2:1;15454:18;;15447:31;15510:3;15495:19;;15123:397::o;16498:461::-;16551:3;16589:5;16583:12;16616:6;16611:3;16604:19;16642:4;16671:2;16666:3;16662:12;16655:19;;16708:2;16701:5;16697:14;16729:1;16739:195;16753:6;16750:1;16747:13;16739:195;;;16818:13;;-1:-1:-1;;;;;16814:39:1;16802:52;;16874:12;;;;16909:15;;;;16850:1;16768:9;16739:195;;;-1:-1:-1;16950:3:1;;16498:461;-1:-1:-1;;;;;16498:461:1:o;16964:510::-;17235:6;17224:9;17217:25;17278:3;17273:2;17262:9;17258:18;17251:31;17198:4;17299:57;17351:3;17340:9;17336:19;17328:6;17299:57;:::i;:::-;-1:-1:-1;;;;;17392:32:1;;;;17387:2;17372:18;;17365:60;-1:-1:-1;17456:2:1;17441:18;17434:34;17291:65;16964:510;-1:-1:-1;;16964:510:1:o;19039:282::-;-1:-1:-1;;;;;19239:32:1;;;;19221:51;;19303:2;19288:18;;19281:34;19209:2;19194:18;;19039:282::o;21951:582::-;22250:6;22239:9;22232:25;22293:6;22288:2;22277:9;22273:18;22266:34;22336:3;22331:2;22320:9;22316:18;22309:31;22213:4;22357:57;22409:3;22398:9;22394:19;22386:6;22357:57;:::i;:::-;-1:-1:-1;;;;;22450:32:1;;;;22445:2;22430:18;;22423:60;-1:-1:-1;22514:3:1;22499:19;22492:35;22349:65;21951:582;-1:-1:-1;;;21951:582:1:o;23150:306::-;23238:6;23246;23254;23307:2;23295:9;23286:7;23282:23;23278:32;23275:52;;;23323:1;23320;23313:12;23275:52;23352:9;23346:16;23336:26;;23402:2;23391:9;23387:18;23381:25;23371:35;;23446:2;23435:9;23431:18;23425:25;23415:35;;23150:306;;;;;:::o

Swarm Source

ipfs://f1bcc0267fc47199322f28f29c17bfe74bc60e216360ad66a8f2f3aaf8fdf109

Block Transaction Gas Used Reward
view all blocks validated

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.