ETH Price: $3,473.05 (+4.18%)
Gas: 5.18 Gwei

Contract

0xf74751c07c92b668f02527d0E1384eE6D68aC90E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

AltCTRL (CTRL) (@$0.0064)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve214723412024-12-24 12:30:477 hrs ago1735043447IN
AltCTRL: CTRL Token
0 ETH0.000385768.28044808
Approve214711062024-12-24 8:21:5911 hrs ago1735028519IN
AltCTRL: CTRL Token
0 ETH0.000296526.39968781
Approve214617852024-12-23 1:03:2342 hrs ago1734915803IN
AltCTRL: CTRL Token
0 ETH0.000271025.81755838
Approve214605862024-12-22 21:01:2346 hrs ago1734901283IN
AltCTRL: CTRL Token
0 ETH0.000388338.3831244
Approve214604542024-12-22 20:34:3547 hrs ago1734899675IN
AltCTRL: CTRL Token
0 ETH0.000251478.51110269
Approve214604102024-12-22 20:25:4747 hrs ago1734899147IN
AltCTRL: CTRL Token
0 ETH0.000426689.20859059
Approve214603912024-12-22 20:21:5947 hrs ago1734898919IN
AltCTRL: CTRL Token
0 ETH0.00044339.56734049
Approve214561572024-12-22 6:10:472 days ago1734847847IN
AltCTRL: CTRL Token
0 ETH0.000265095.68307458
Transfer214538322024-12-21 22:22:592 days ago1734819779IN
AltCTRL: CTRL Token
0 ETH0.000599288.61294989
Approve214375392024-12-19 15:44:115 days ago1734623051IN
AltCTRL: CTRL Token
0 ETH0.0013567429.08542342
Approve214364022024-12-19 11:55:235 days ago1734609323IN
AltCTRL: CTRL Token
0 ETH0.0004851810.47392991
Approve214363892024-12-19 11:52:475 days ago1734609167IN
AltCTRL: CTRL Token
0 ETH0.000579112.49813485
Transfer214256822024-12-17 23:56:356 days ago1734479795IN
AltCTRL: CTRL Token
0 ETH0.0011022310.31518473
Approve214198662024-12-17 4:28:597 days ago1734409739IN
AltCTRL: CTRL Token
0 ETH0.000531611.39626372
Approve214170872024-12-16 19:10:598 days ago1734376259IN
AltCTRL: CTRL Token
0 ETH0.0014083930.39601846
Approve213988712024-12-14 6:09:5910 days ago1734156599IN
AltCTRL: CTRL Token
0 ETH0.000203868.38830591
Approve213988652024-12-14 6:08:4710 days ago1734156527IN
AltCTRL: CTRL Token
0 ETH0.00021018.64957431
Approve213972782024-12-14 0:49:5910 days ago1734137399IN
AltCTRL: CTRL Token
0 ETH0.000347511.78513526
Approve213928872024-12-13 10:06:5911 days ago1734084419IN
AltCTRL: CTRL Token
0 ETH0.0007821816.79411844
Approve213864702024-12-12 12:37:2312 days ago1734007043IN
AltCTRL: CTRL Token
0 ETH0.0008511718.39850599
Approve213841322024-12-12 4:47:3512 days ago1733978855IN
AltCTRL: CTRL Token
0 ETH0.0006885314.76052617
Approve213818172024-12-11 21:02:2312 days ago1733950943IN
AltCTRL: CTRL Token
0 ETH0.0014063630.34432432
Approve213781432024-12-11 8:41:2313 days ago1733906483IN
AltCTRL: CTRL Token
0 ETH0.0006425713.77526111
Approve213777992024-12-11 7:32:3513 days ago1733902355IN
AltCTRL: CTRL Token
0 ETH0.0005026610.77592479
Approve213745622024-12-10 20:42:3513 days ago1733863355IN
AltCTRL: CTRL Token
0 ETH0.0009871221.33174042
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
214615072024-12-23 0:07:1143 hrs ago1734912431
AltCTRL: CTRL Token
0.03181132 ETH
214615072024-12-23 0:07:1143 hrs ago1734912431
AltCTRL: CTRL Token
0.03181132 ETH
214615072024-12-23 0:07:1143 hrs ago1734912431
AltCTRL: CTRL Token
0.00706918 ETH
214615072024-12-23 0:07:1143 hrs ago1734912431
AltCTRL: CTRL Token
0.07069183 ETH
214467122024-12-20 22:27:113 days ago1734733631
AltCTRL: CTRL Token
0.01372144 ETH
214467122024-12-20 22:27:113 days ago1734733631
AltCTRL: CTRL Token
0.01372144 ETH
214467122024-12-20 22:27:113 days ago1734733631
AltCTRL: CTRL Token
0.00304921 ETH
214467122024-12-20 22:27:113 days ago1734733631
AltCTRL: CTRL Token
0.0304921 ETH
214402202024-12-20 0:42:234 days ago1734655343
AltCTRL: CTRL Token
0.08578625 ETH
214402202024-12-20 0:42:234 days ago1734655343
AltCTRL: CTRL Token
0.08578625 ETH
214402202024-12-20 0:42:234 days ago1734655343
AltCTRL: CTRL Token
0.01906361 ETH
214402202024-12-20 0:42:234 days ago1734655343
AltCTRL: CTRL Token
0.19063611 ETH
213982232024-12-14 3:59:3510 days ago1734148775
AltCTRL: CTRL Token
0.01814327 ETH
213982232024-12-14 3:59:3510 days ago1734148775
AltCTRL: CTRL Token
0.01814327 ETH
213982232024-12-14 3:59:3510 days ago1734148775
AltCTRL: CTRL Token
0.00403183 ETH
213982232024-12-14 3:59:3510 days ago1734148775
AltCTRL: CTRL Token
0.04031838 ETH
213818362024-12-11 21:06:1112 days ago1733951171
AltCTRL: CTRL Token
0.01482673 ETH
213818362024-12-11 21:06:1112 days ago1733951171
AltCTRL: CTRL Token
0.01482673 ETH
213818362024-12-11 21:06:1112 days ago1733951171
AltCTRL: CTRL Token
0.00329482 ETH
213818362024-12-11 21:06:1112 days ago1733951171
AltCTRL: CTRL Token
0.03294828 ETH
213713412024-12-10 9:54:3514 days ago1733824475
AltCTRL: CTRL Token
0.01330311 ETH
213713412024-12-10 9:54:3514 days ago1733824475
AltCTRL: CTRL Token
0.01330311 ETH
213713412024-12-10 9:54:3514 days ago1733824475
AltCTRL: CTRL Token
0.00295624 ETH
213713412024-12-10 9:54:3514 days ago1733824475
AltCTRL: CTRL Token
0.02956246 ETH
213708272024-12-10 8:11:1114 days ago1733818271
AltCTRL: CTRL Token
0.028375 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AltCTRL

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-22
*/

/*
     _    _ _    ____ _____ ____  _
    / \  | | |_ / ___|_   _|  _ \| |
   / _ \ | | __| |     | | | |_) | |
  / ___ \| | |_| |___  | | |  _ <| |___
 /_/   \_\_|\__|\____| |_| |_| \_\_____|

 Website: https://altctrl.com/
 Telegram: https://t.me/OffcialAltCTRL/
 Twitter: https://twitter.com/OfficialAltCTRL/
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.11;

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

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function factory() external view returns (address);
}

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract AltCTRL is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public ExcludedFromWalletRestrictions;

    mapping (address => bool) private _isSniper;

    mapping (address => uint256) private lastTrade;

    uint256 private startingSupply = 42_000_000;

    string private _name = "AltCTRL";
    string private _symbol = "CTRL";
//==========================
    // FEES
    struct taxes {
    uint buyFee;
    uint sellFee;
    uint transferFee;
    }

    taxes public Fees = taxes(
    {buyFee: 3000, sellFee: 3000, transferFee: 3000}); // token starts at 30%
//==========================

    struct Maxima {
    uint maxBuy;
    uint maxSell;
    uint maxTransfer;
    }

    Maxima public maxFees = Maxima(
    {maxBuy: 500, maxSell: 500, maxTransfer: 500});

//==========================
    //Proportions of Taxes
    struct feeProportions {
    uint liquidity;
    uint stockpileFee;
    uint TreasuryFee;
    uint developmentFee;
    }

    feeProportions public Ratios = feeProportions(
    { liquidity:200 , stockpileFee: 0, TreasuryFee: 400, developmentFee: 400});

    uint256 private constant masterTaxDivisor = 10000;
    uint256 private constant MAX = ~uint256(0);
    uint8 constant private _decimals = 9;

    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    address constant private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    address payable public _treasuryWallet = payable(0x9C5e41A241b822eFeb2B2bc11d6cE549b41E2cCb);  // Also acts as the wallet for the optional stockpiling of tokens.
    address payable public _developmentWallet = payable(0x246b6e01092f08ea5d4790195CEB2FDD0F626cCa);
    address payable public _liquidityWallet = payable(0x04DDB1aB5d2f702ca116a2b6a158B4398cEC2205);

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    uint256 private maxTxPercent = 1; // 1%
    uint256 private maxTxDivisor = 100;

    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;

    uint256 private maxWalletPercent = 2; // 2%
    uint256 private maxWalletDivisor = 100;
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;

    uint256 private swapThreshold = (_tTotal * 5) / 10_000;
    uint256 private swapAmount = (_tTotal * 5) / 1_000;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 0; // make constant
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller != owner.");
        _;
    }

    constructor () payable {
        _tOwned[_msgSender()] = _tTotal;

        // Set the owner.
        _owner = msg.sender;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[_treasuryWallet] = true;
        _isExcludedFromFees[DEAD] = true;

        _liquidityHolders[owner()] = true;
        _liquidityHolders[_treasuryWallet] = true;
        _liquidityHolders[_developmentWallet] = true;

        // Approve the owner for Uniswap, time saver.
        _approve(_msgSender(), _routerAddress, _tTotal);

        // Event regarding the tTotal transferred to the _msgSender.
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    // Ownable removed as a lib and added here to allow for custom transfers and renouncement.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);


        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }

        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
    }

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

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "One week cool down.");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    // used for dApps e.g staking or some other utility or treasuries.
    function excludeWalletRestrictions(address excludeAddress) public onlyOwner{
        ExcludedFromWalletRestrictions[excludeAddress] = true;
    }

    function revokeWalletFreedom(address includeAddress) public onlyOwner{
        ExcludedFromWalletRestrictions[includeAddress] = false;
    }

    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function init() external onlyOwner {
        require (_liqAddStatus == 0, "Error.");
        _liqAddStatus = 1;
        snipeBlockAmt = 0;
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner() {
        _isSniper[account] = enabled;
    }

    function setRatios(uint _liquidity, uint _TreasuryFee, uint _developmentFee , uint _stockpileFee) external onlyOwner {
        require ( (_liquidity + _TreasuryFee + _developmentFee + _stockpileFee) == 100, "!= 100"); // to change the ratio, it must require the sum equal 100
        Ratios.liquidity = _liquidity;
        Ratios.TreasuryFee = _TreasuryFee;
        Ratios.developmentFee = _developmentFee;
        Ratios.stockpileFee = _stockpileFee;
    }

    function setBuyFee(uint _buyFee) external onlyOwner {
        require(_buyFee <= maxFees.maxBuy, "Cannot exceed maximums.");
         Fees.buyFee = _buyFee;
    }

    function setSellFee(uint _sellFee) external onlyOwner {
        require(_sellFee <= maxFees.maxSell, "Cannot exceed maximums.");
         Fees.sellFee = _sellFee;
    }

    function setTaxes(uint _buyFee, uint _sellFee, uint _transferFee) external onlyOwner {
        require(_buyFee <= maxFees.maxBuy
                && _sellFee <= maxFees.maxSell
                && _transferFee <= maxFees.maxTransfer,
                "Cannot exceed maximums.");
         Fees.buyFee = _buyFee;
         Fees.sellFee = _sellFee;
         Fees.transferFee = _transferFee;
    }

    function setMaxTxPercent(uint percent, uint divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
        _maxTxAmount = check;
    }

    function setMaxWalletSize(uint percent, uint divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
        _maxWalletSize = check;

    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable treasuryWallet, address payable developmentWallet) external onlyOwner {
        _treasuryWallet = payable(treasuryWallet);
        _developmentWallet = payable(developmentWallet);
    }

    function setLiquidityWallet(address payable liquidityReceiver) external onlyOwner {
        _liquidityWallet = payable(liquidityReceiver);

    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        if(_hasLimits(from, to)) {

            if(!(ExcludedFromWalletRestrictions[from] || ExcludedFromWalletRestrictions[to])) {
                if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
                }
                if(to != _routerAddress && !lpPairs[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                }

            }

        }
        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }
        }
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (Ratios.liquidity + Ratios.TreasuryFee + Ratios.developmentFee == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.TreasuryFee + Ratios.developmentFee) ) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((currentBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.TreasuryFee + Ratios.developmentFee) ) / 2;

        bool success;

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            uint ethBal = address(this).balance;
            uint ethBalForOperations = ((ethBal * Ratios.TreasuryFee) / (Ratios.TreasuryFee + Ratios.developmentFee));

            (success,) = address(_treasuryWallet).call{value: ethBalForOperations}("");
            (success,) = address(_developmentWallet).call{value: address(this).balance}("");
        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _liquidityWallet,
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            if (snipeBlockAmt != 0) {
                _liqAddBlock = block.number; // removed + 5000
            } else {
                _liqAddBlock = block.number;
            }
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (sniperProtection){
            if (isSniper(from) || isSniper(to)) {
                revert("Sniper rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0
                    && lpPairs[from]
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniper[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount; //A
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;

        if (to == lpPair) {currentFee = Fees.sellFee;}

        else if (from == lpPair) {currentFee = Fees.buyFee;}

        else {currentFee = Fees.transferFee;}

        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != (1)) {
                revert();
            }
        }
        uint256 stockpileFeeAmt = (amount * currentFee * Ratios.stockpileFee) / (Ratios.stockpileFee + Ratios.liquidity + Ratios.TreasuryFee + Ratios.developmentFee ) / masterTaxDivisor;
        uint256 feeAmount = (amount * currentFee / masterTaxDivisor) - stockpileFeeAmt;
        _tOwned[_treasuryWallet] += stockpileFeeAmt;
        _tOwned[address(this)] += (feeAmount);
        emit Transfer(from, _treasuryWallet, stockpileFeeAmt);
        emit Transfer(from, address(this), feeAmount);
        return amount - feeAmount - stockpileFeeAmt;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ExcludedFromWalletRestrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Fees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ratios","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"stockpileFee","type":"uint256"},{"internalType":"uint256","name":"TreasuryFee","type":"uint256"},{"internalType":"uint256","name":"developmentFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludeAddress","type":"address"}],"name":"excludeWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFees","outputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxTransfer","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"includeAddress","type":"address"}],"name":"revokeWalletFreedom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"liquidityReceiver","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_TreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_stockpileFee","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"treasuryWallet","type":"address"},{"internalType":"address payable","name":"developmentWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600355630280de80600a5560c06040526007608081905266105b1d10d5149360ca1b60a09081526200003791600b9190620006d9565b506040805180820190915260048082526310d5149360e21b60209092019182526200006591600c91620006d9565b506040805160608082018352610bb88083526020808401829052928401819052600d819055600e819055600f55825180820184526101f480825281840181905290840181905260108190556011819055601255825160808101845260c8808252600093820184905261019094820185905291018390526013556014556015819055601655620000f76009600a62000894565b600a54620001069190620008ac565b6017819055601b80546001600160a01b0319908116739c5e41a241b822efeb2b2bc11d6ce549b41e2ccb17909155601c805490911673246b6e01092f08ea5d4790195ceb2fdd0f626cca179055601d8054600161ff0160a01b0319167304ddb1ab5d2f702ca116a2b6a158b4398cec22051790556001601e8190556064601f81905591620001959190620008ac565b620001a19190620008ce565b60205560026021556064602255602254602154601754620001c39190620008ac565b620001cf9190620008ce565b6023556127106017546005620001e69190620008ac565b620001f29190620008ce565b6024556103e86017546005620002099190620008ac565b620002159190620008ce565b6025556026805461ffff191660019081179091556000602781905560288190556029819055602a819055602b819055602c8190556017549190620002563390565b6001600160a01b0316815260208082019290925260409081016000908120939093558254336001600160a01b03199182161790935560198054737a250d5630b4cf539739df2c5dacb4c659f2488d941684179055805163c45a015560e01b8152905163c45a0155926004808401939192918290030181865afa158015620002e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003079190620008f1565b6001600160a01b031663c9c65396601960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000369573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038f9190620008f1565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620003dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004029190620008f1565b601a80546001600160a01b0319166001600160a01b039283169081179091556000908152600260209081526040808320805460ff191660019081179091553084526004835281842060195490951684529390915281206000199055600690620004736000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526006909352818320805485166001908117909155601b549091168352908220805484168217905561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600590620005116000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601b54821681526005909352818320805485166001908117909155601c5490911683529120805490921617905562000597620005783390565b601754737a250d5630b4cf539739df2c5dacb4c659f2488d90620005d8565b60175460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a362000959565b6001600160a01b0383166200062a5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006785760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000621565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b828054620006e7906200091c565b90600052602060002090601f0160209004810192826200070b576000855562000756565b82601f106200072657805160ff191683800117855562000756565b8280016001018555821562000756579182015b828111156200075657825182559160200191906001019062000739565b506200076492915062000768565b5090565b5b8082111562000764576000815560010162000769565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007d6578160001904821115620007ba57620007ba6200077f565b80851615620007c857918102915b93841c93908002906200079a565b509250929050565b600082620007ef575060016200088e565b81620007fe575060006200088e565b8160018114620008175760028114620008225762000842565b60019150506200088e565b60ff8411156200083657620008366200077f565b50506001821b6200088e565b5060208310610133831016604e8410600b841016171562000867575081810a6200088e565b62000873838362000795565b80600019048211156200088a576200088a6200077f565b0290505b92915050565b6000620008a560ff841683620007de565b9392505050565b6000816000190483118215151615620008c957620008c96200077f565b500290565b600082620008ec57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200090457600080fd5b81516001600160a01b0381168114620008a557600080fd5b600181811c908216806200093157607f821691505b602082108114156200095357634e487b7160e01b600052602260045260246000fd5b50919050565b612aef80620009696000396000f3fe6080604052600436106102975760003560e01c806370a082311161015a578063c49b9a80116100c1578063e79d41601161007a578063e79d41601461087d578063e83e34b114610893578063e9dae5ed146108b2578063eafb5a3c146108d2578063eec2744e146108f2578063fb78680d1461091257600080fd5b8063c49b9a8014610792578063cc5c2c40146107b2578063d1d2b9be146107d2578063d3f6a15714610802578063dd62ed3e14610822578063e1c7392a1461086857600080fd5b80638da5cb5b116101135780638da5cb5b1461069c57806395d89b41146106da5780639f6d1bb0146106ef578063a457c2d71461070f578063a9059cbb1461072f578063b5f7bfa21461074f57600080fd5b806370a0823114610611578063715018a61461064757806380c581d11461065c57806385320beb1461067c578063893d20e81461069c5780638b4cee08146106ba57600080fd5b8063296f0a0c116101fe5780634a74bb02116101b75780634a74bb02146105385780634fb2e45d146105595780634fbee1931461057957806350a8e016146105b2578063571ac8b0146105d1578063590ffdce146105f157600080fd5b8063296f0a0c14610462578063313ce56714610482578063395093511461049e5780633aaa36e6146104be5780633f3cf56c146104f8578063452ed4f11461051857600080fd5b80631793fe4e116102505780631793fe4e146103a357806318160ddd146103c357806323b872dd146103e2578063243a7e31146104025780632600395714610422578063269d1faa1461044257600080fd5b806303fd2a45146102a357806306fdde03146102d65780630758d924146102f8578063095ea7b3146103185780630cc835a3146103485780630f3a325f1461036a57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102e257600080fd5b506102eb610932565b6040516102cd91906125da565b34801561030457600080fd5b506019546102b9906001600160a01b031681565b34801561032457600080fd5b50610338610333366004612647565b6109c4565b60405190151581526020016102cd565b34801561035457600080fd5b50610368610363366004612673565b6109da565b005b34801561037657600080fd5b5061033861038536600461268c565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156103af57600080fd5b506103686103be3660046126a9565b610a34565b3480156103cf57600080fd5b506017545b6040519081526020016102cd565b3480156103ee57600080fd5b506103386103fd3660046126db565b610aca565b34801561040e57600080fd5b50601d546102b9906001600160a01b031681565b34801561042e57600080fd5b5061036861043d36600461271c565b610b42565b34801561044e57600080fd5b50601b546102b9906001600160a01b031681565b34801561046e57600080fd5b5061036861047d36600461268c565b610bbf565b34801561048e57600080fd5b50604051600981526020016102cd565b3480156104aa57600080fd5b506103386104b9366004612647565b610c0b565b3480156104ca57600080fd5b50600d54600e54600f546104dd92919083565b604080519384526020840192909252908201526060016102cd565b34801561050457600080fd5b5061036861051336600461271c565b610c47565b34801561052457600080fd5b50601a546102b9906001600160a01b031681565b34801561054457600080fd5b50601d5461033890600160a81b900460ff1681565b34801561056557600080fd5b5061036861057436600461268c565b610cc4565b34801561058557600080fd5b5061033861059436600461268c565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105be57600080fd5b5060265461033890610100900460ff1681565b3480156105dd57600080fd5b506103386105ec36600461268c565b610e17565b3480156105fd57600080fd5b5061036861060c366004612753565b610e2b565b34801561061d57600080fd5b506103d461062c36600461268c565b6001600160a01b031660009081526001602052604090205490565b34801561065357600080fd5b50610368610e80565b34801561066857600080fd5b50610368610677366004612753565b610eff565b34801561068857600080fd5b50601c546102b9906001600160a01b031681565b3480156106a857600080fd5b506000546001600160a01b03166102b9565b3480156106c657600080fd5b506103686106d5366004612673565b610fd9565b3480156106e657600080fd5b506102eb61102a565b3480156106fb57600080fd5b5061036861070a36600461268c565b611039565b34801561071b57600080fd5b5061033861072a366004612647565b611084565b34801561073b57600080fd5b5061033861074a366004612647565b6110bb565b34801561075b57600080fd5b506013546014546015546016546107729392919084565b6040805194855260208501939093529183015260608201526080016102cd565b34801561079e57600080fd5b506103686107ad366004612788565b6110d2565b3480156107be57600080fd5b506103686107cd36600461268c565b611154565b3480156107de57600080fd5b506103386107ed36600461268c565b60076020526000908152604090205460ff1681565b34801561080e57600080fd5b5061036861081d3660046127a3565b6111a2565b34801561082e57600080fd5b506103d461083d3660046127a3565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561087457600080fd5b506103686111fa565b34801561088957600080fd5b506103d4602c5481565b34801561089f57600080fd5b506010546011546012546104dd92919083565b3480156108be57600080fd5b506103686108cd3660046127dc565b611269565b3480156108de57600080fd5b506103686108ed36600461268c565b6112df565b3480156108fe57600080fd5b5061036861090d366004612753565b61160b565b34801561091e57600080fd5b5061036861092d3660046126a9565b611660565b6060600b805461094190612808565b80601f016020809104026020016040519081016040528092919081815260200182805461096d90612808565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b5050505050905090565b60006109d13384846116c9565b50600192915050565b6000546001600160a01b03163314610a0d5760405162461bcd60e51b8152600401610a0490612843565b60405180910390fd5b601054811115610a2f5760405162461bcd60e51b8152600401610a049061286d565b600d55565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b8152600401610a0490612843565b8082610a6a85876128ba565b610a7491906128ba565b610a7e91906128ba565b606414610ab65760405162461bcd60e51b81526020600482015260066024820152650213d203130360d41b6044820152606401610a04565b601393909355601591909155601655601455565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610b2f576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610b299084906128d2565b90915550505b610b3a8484846117c2565b949350505050565b6000546001600160a01b03163314610b6c5760405162461bcd60e51b8152600401610a0490612843565b60008183601754610b7d91906128e9565b610b879190612908565b905061012c601754610b999190612908565b811015610bb85760405162461bcd60e51b8152600401610a049061292a565b6023555050565b6000546001600160a01b03163314610be95760405162461bcd60e51b8152600401610a0490612843565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916109d1918590610c429086906128ba565b6116c9565b6000546001600160a01b03163314610c715760405162461bcd60e51b8152600401610a0490612843565b60008183601754610c8291906128e9565b610c8c9190612908565b905061012c601754610c9e9190612908565b811015610cbd5760405162461bcd60e51b8152600401610a049061292a565b6020555050565b6000546001600160a01b03163314610cee5760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b038116610d145760405162461bcd60e51b8152600401610a049061296f565b6001600160a01b03811661dead1415610d3f5760405162461bcd60e51b8152600401610a049061296f565b60008054610d58916001600160a01b0390911690610e2b565b610d63816001610e2b565b600080546001600160a01b03908116825260016020818152604080852054600483528186208786168752835281862055845490931684525290205415610dcc57600080546001600160a01b03168082526001602052604090912054610dca919083906117c2565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610e25826000196109c4565b92915050565b6000546001600160a01b03163314610e555760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610eaa5760405162461bcd60e51b8152600401610a0490612843565b60008054610ec3916001600160a01b0390911690610e2b565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610f295760405162461bcd60e51b8152600401610a0490612843565b80610f5057506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415610fad5762093a8060035442610f6a91906128d2565b11610fad5760405162461bcd60e51b815260206004820152601360248201527227b732903bb2b2b59031b7b7b6103237bbb71760691b6044820152606401610a04565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6000546001600160a01b031633146110035760405162461bcd60e51b8152600401610a0490612843565b6011548111156110255760405162461bcd60e51b8152600401610a049061286d565b600e55565b6060600c805461094190612808565b6000546001600160a01b031633146110635760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b03166000908152600760205260409020805460ff19169055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916109d1918590610c429086906128d2565b60006110c83384846117c2565b5060019392505050565b6000546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610a0490612843565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061114990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146111cc5760405162461bcd60e51b8152600401610a0490612843565b601b80546001600160a01b039384166001600160a01b031991821617909155601c8054929093169116179055565b6000546001600160a01b031633146112245760405162461bcd60e51b8152600401610a0490612843565b6027541561125d5760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610a04565b60016027556000602b55565b6000546001600160a01b031633146112935760405162461bcd60e51b8152600401610a0490612843565b60105483118015906112a757506011548211155b80156112b557506012548111155b6112d15760405162461bcd60e51b8152600401610a049061286d565b600d92909255600e55600f55565b6000546001600160a01b031633146113095760405162461bcd60e51b8152600401610a0490612843565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137291906129cc565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e391906129cc565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145291906129cc565b90506001600160a01b0381166115cb57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c491906129cc565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611511573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153591906129cc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a691906129cc565b601a80546001600160a01b0319166001600160a01b03929092169190911790556115e7565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b031633146116355760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461168a5760405162461bcd60e51b8152600401610a0490612843565b828460175461169991906128e9565b6116a39190612908565b60245560175481906116b69084906128e9565b6116c09190612908565b60255550505050565b6001600160a01b0383166117155760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610a04565b6001600160a01b0382166117615760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610a04565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166118115760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610a04565b6001600160a01b03831661185e5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610a04565b600082116118995760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b6044820152606401610a04565b6118a38484611b22565b15611a47576001600160a01b03841660009081526007602052604090205460ff16806118e757506001600160a01b03831660009081526007602052604090205460ff165b611a47576001600160a01b03841660009081526002602052604090205460ff168061192a57506001600160a01b03831660009081526002602052604090205460ff165b15611981576020548211156119815760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610a04565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d148015906119c757506001600160a01b03831660009081526002602052604090205460ff16155b15611a4757602354826119ef856001600160a01b031660009081526001602052604090205490565b6119f991906128ba565b1115611a475760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610a04565b6001600160a01b03841660009081526006602052604090205460019060ff1680611a8957506001600160a01b03841660009081526006602052604090205460ff165b15611a92575060005b6001600160a01b03841660009081526002602052604090205460ff1615611b0d57601d54600160a01b900460ff16158015611ad65750601d54600160a81b900460ff165b15611b0d57306000908152600160205260409020546024548110611b0b576025548110611b0257506025545b611b0b81611be0565b505b611b1985858584611e18565b95945050505050565b600080546001600160a01b03848116911614801590611b4f57506000546001600160a01b03838116911614155b8015611b7457506001600160a01b03821660009081526005602052604090205460ff16155b8015611b9957506001600160a01b03831660009081526005602052604090205460ff16155b8015611bb057506001600160a01b03821661dead14155b8015611bc457506001600160a01b03821615155b8015611bd957506001600160a01b0383163014155b9392505050565b601d805460ff60a01b1916600160a01b179055601654601554601354611c0691906128ba565b611c1091906128ba565b611c1957611e08565b6016546015546013546000926002929091611c3491906128ba565b611c3e91906128ba565b601354611c4b90856128e9565b611c559190612908565b611c5f9190612908565b90506000611c6d82846128d2565b9050611c78816120d7565b6016546015546013544792600092600292611c9391906128ba565b611c9d91906128ba565b601354611caa90856128e9565b611cb49190612908565b611cbe9190612908565b905060008415611d1457611cd28583612218565b60408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611d2086886128d2565b1115611e02576016546015544791600091611d3b91906128ba565b601554611d4890846128e9565b611d529190612908565b601b546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611da0576040519150601f19603f3d011682016040523d82523d6000602084013e611da5565b606091505b5050601c546040519194506001600160a01b0316904790600081818185875af1925050503d8060008114611df5576040519150601f19603f3d011682016040523d82523d6000602084013e611dfa565b606091505b509093505050505b50505050505b50601d805460ff60a01b19169055565b60265460009060ff1615612004576001600160a01b03851660009081526008602052604090205460ff1680611e6557506001600160a01b03841660009081526008602052604090205460ff165b15611ea55760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610a04565b602654610100900460ff16611f3b57611ebe85856122b4565b602654610100900460ff16158015611edb5750611edb8585611b22565b15611f365760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610a04565b612004565b6000602854118015611f6557506001600160a01b03851660009081526002602052604090205460ff165b8015611f765750611f768585611b22565b1561200457602b54602854611f8b90436128d2565b1015612004576001600160a01b0384166000908152600860205260408120805460ff19166001179055602c805491611fc2836129e9565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b0385166000908152600160205260408120805485929061202c9084906128d2565b90915550600090508261203f578361204a565b61204a8686866123e4565b6001600160a01b0386166000908152600160205260408120805492935083929091906120779084906128ba565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120c391815260200190565b60405180910390a350600195945050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061210c5761210c612a04565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218991906129cc565b8160018151811061219c5761219c612a04565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac947906121e2908590600090869030904290600401612a1a565b600060405180830381600087803b1580156121fc57600080fd5b505af1158015612210573d6000803e3d6000fd5b505050505050565b601954601d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612288573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122ad9190612a8b565b5050505050565b602654610100900460ff16156123185760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610a04565b6123228282611b22565b15801561233c5750601a546001600160a01b038281169116145b15610fd557602b54156123525743602855612357565b436028555b6001600160a01b03821660009081526005602052604090819020805460ff191660019081179091556026805461ff00191661010017905542602955601d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916123d891901515815260200190565b60405180910390a15050565b601a5460009081906001600160a01b03858116911614156124085750600e5461242c565b601a546001600160a01b03868116911614156124275750600d5461242c565b50600f545b6124368585611b22565b1561245757602754158061244d5750602754600114155b1561245757600080fd5b601654601554601354601454600093612710939092909161247891906128ba565b61248291906128ba565b61248c91906128ba565b60145461249985886128e9565b6124a391906128e9565b6124ad9190612908565b6124b79190612908565b90506000816127106124c985886128e9565b6124d39190612908565b6124dd91906128d2565b601b546001600160a01b031660009081526001602052604081208054929350849290919061250c9084906128ba565b909155505030600090815260016020526040812080548392906125309084906128ba565b9091555050601b546040518381526001600160a01b03918216918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3816125c582876128d2565b6125cf91906128d2565b979650505050505050565b600060208083528351808285015260005b81811015612607578581018301518582016040015282016125eb565b81811115612619576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461264457600080fd5b50565b6000806040838503121561265a57600080fd5b82356126658161262f565b946020939093013593505050565b60006020828403121561268557600080fd5b5035919050565b60006020828403121561269e57600080fd5b8135611bd98161262f565b600080600080608085870312156126bf57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156126f057600080fd5b83356126fb8161262f565b9250602084013561270b8161262f565b929592945050506040919091013590565b6000806040838503121561272f57600080fd5b50508035926020909101359150565b8035801515811461274e57600080fd5b919050565b6000806040838503121561276657600080fd5b82356127718161262f565b915061277f6020840161273e565b90509250929050565b60006020828403121561279a57600080fd5b611bd98261273e565b600080604083850312156127b657600080fd5b82356127c18161262f565b915060208301356127d18161262f565b809150509250929050565b6000806000606084860312156127f157600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061281c57607f821691505b6020821081141561283d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f21b0b63632b910109e9037bbb732b91760811b604082015260600190565b60208082526017908201527f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156128cd576128cd6128a4565b500190565b6000828210156128e4576128e46128a4565b500390565b6000816000190483118215151615612903576129036128a4565b500290565b60008261292557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4d7573742062652061626f766520302e33337e25206f6620746f74616c2073756040820152643838363c9760d91b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b6000602082840312156129de57600080fd5b8151611bd98161262f565b60006000198214156129fd576129fd6128a4565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a6a5784516001600160a01b031683529383019391830191600101612a45565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612aa057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205236b89bdecee2d2879e9661fa57bbd275e58af8ee0fd661b8cce8d5004ef7dd64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c806370a082311161015a578063c49b9a80116100c1578063e79d41601161007a578063e79d41601461087d578063e83e34b114610893578063e9dae5ed146108b2578063eafb5a3c146108d2578063eec2744e146108f2578063fb78680d1461091257600080fd5b8063c49b9a8014610792578063cc5c2c40146107b2578063d1d2b9be146107d2578063d3f6a15714610802578063dd62ed3e14610822578063e1c7392a1461086857600080fd5b80638da5cb5b116101135780638da5cb5b1461069c57806395d89b41146106da5780639f6d1bb0146106ef578063a457c2d71461070f578063a9059cbb1461072f578063b5f7bfa21461074f57600080fd5b806370a0823114610611578063715018a61461064757806380c581d11461065c57806385320beb1461067c578063893d20e81461069c5780638b4cee08146106ba57600080fd5b8063296f0a0c116101fe5780634a74bb02116101b75780634a74bb02146105385780634fb2e45d146105595780634fbee1931461057957806350a8e016146105b2578063571ac8b0146105d1578063590ffdce146105f157600080fd5b8063296f0a0c14610462578063313ce56714610482578063395093511461049e5780633aaa36e6146104be5780633f3cf56c146104f8578063452ed4f11461051857600080fd5b80631793fe4e116102505780631793fe4e146103a357806318160ddd146103c357806323b872dd146103e2578063243a7e31146104025780632600395714610422578063269d1faa1461044257600080fd5b806303fd2a45146102a357806306fdde03146102d65780630758d924146102f8578063095ea7b3146103185780630cc835a3146103485780630f3a325f1461036a57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102e257600080fd5b506102eb610932565b6040516102cd91906125da565b34801561030457600080fd5b506019546102b9906001600160a01b031681565b34801561032457600080fd5b50610338610333366004612647565b6109c4565b60405190151581526020016102cd565b34801561035457600080fd5b50610368610363366004612673565b6109da565b005b34801561037657600080fd5b5061033861038536600461268c565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156103af57600080fd5b506103686103be3660046126a9565b610a34565b3480156103cf57600080fd5b506017545b6040519081526020016102cd565b3480156103ee57600080fd5b506103386103fd3660046126db565b610aca565b34801561040e57600080fd5b50601d546102b9906001600160a01b031681565b34801561042e57600080fd5b5061036861043d36600461271c565b610b42565b34801561044e57600080fd5b50601b546102b9906001600160a01b031681565b34801561046e57600080fd5b5061036861047d36600461268c565b610bbf565b34801561048e57600080fd5b50604051600981526020016102cd565b3480156104aa57600080fd5b506103386104b9366004612647565b610c0b565b3480156104ca57600080fd5b50600d54600e54600f546104dd92919083565b604080519384526020840192909252908201526060016102cd565b34801561050457600080fd5b5061036861051336600461271c565b610c47565b34801561052457600080fd5b50601a546102b9906001600160a01b031681565b34801561054457600080fd5b50601d5461033890600160a81b900460ff1681565b34801561056557600080fd5b5061036861057436600461268c565b610cc4565b34801561058557600080fd5b5061033861059436600461268c565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105be57600080fd5b5060265461033890610100900460ff1681565b3480156105dd57600080fd5b506103386105ec36600461268c565b610e17565b3480156105fd57600080fd5b5061036861060c366004612753565b610e2b565b34801561061d57600080fd5b506103d461062c36600461268c565b6001600160a01b031660009081526001602052604090205490565b34801561065357600080fd5b50610368610e80565b34801561066857600080fd5b50610368610677366004612753565b610eff565b34801561068857600080fd5b50601c546102b9906001600160a01b031681565b3480156106a857600080fd5b506000546001600160a01b03166102b9565b3480156106c657600080fd5b506103686106d5366004612673565b610fd9565b3480156106e657600080fd5b506102eb61102a565b3480156106fb57600080fd5b5061036861070a36600461268c565b611039565b34801561071b57600080fd5b5061033861072a366004612647565b611084565b34801561073b57600080fd5b5061033861074a366004612647565b6110bb565b34801561075b57600080fd5b506013546014546015546016546107729392919084565b6040805194855260208501939093529183015260608201526080016102cd565b34801561079e57600080fd5b506103686107ad366004612788565b6110d2565b3480156107be57600080fd5b506103686107cd36600461268c565b611154565b3480156107de57600080fd5b506103386107ed36600461268c565b60076020526000908152604090205460ff1681565b34801561080e57600080fd5b5061036861081d3660046127a3565b6111a2565b34801561082e57600080fd5b506103d461083d3660046127a3565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561087457600080fd5b506103686111fa565b34801561088957600080fd5b506103d4602c5481565b34801561089f57600080fd5b506010546011546012546104dd92919083565b3480156108be57600080fd5b506103686108cd3660046127dc565b611269565b3480156108de57600080fd5b506103686108ed36600461268c565b6112df565b3480156108fe57600080fd5b5061036861090d366004612753565b61160b565b34801561091e57600080fd5b5061036861092d3660046126a9565b611660565b6060600b805461094190612808565b80601f016020809104026020016040519081016040528092919081815260200182805461096d90612808565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b5050505050905090565b60006109d13384846116c9565b50600192915050565b6000546001600160a01b03163314610a0d5760405162461bcd60e51b8152600401610a0490612843565b60405180910390fd5b601054811115610a2f5760405162461bcd60e51b8152600401610a049061286d565b600d55565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b8152600401610a0490612843565b8082610a6a85876128ba565b610a7491906128ba565b610a7e91906128ba565b606414610ab65760405162461bcd60e51b81526020600482015260066024820152650213d203130360d41b6044820152606401610a04565b601393909355601591909155601655601455565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610b2f576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610b299084906128d2565b90915550505b610b3a8484846117c2565b949350505050565b6000546001600160a01b03163314610b6c5760405162461bcd60e51b8152600401610a0490612843565b60008183601754610b7d91906128e9565b610b879190612908565b905061012c601754610b999190612908565b811015610bb85760405162461bcd60e51b8152600401610a049061292a565b6023555050565b6000546001600160a01b03163314610be95760405162461bcd60e51b8152600401610a0490612843565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916109d1918590610c429086906128ba565b6116c9565b6000546001600160a01b03163314610c715760405162461bcd60e51b8152600401610a0490612843565b60008183601754610c8291906128e9565b610c8c9190612908565b905061012c601754610c9e9190612908565b811015610cbd5760405162461bcd60e51b8152600401610a049061292a565b6020555050565b6000546001600160a01b03163314610cee5760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b038116610d145760405162461bcd60e51b8152600401610a049061296f565b6001600160a01b03811661dead1415610d3f5760405162461bcd60e51b8152600401610a049061296f565b60008054610d58916001600160a01b0390911690610e2b565b610d63816001610e2b565b600080546001600160a01b03908116825260016020818152604080852054600483528186208786168752835281862055845490931684525290205415610dcc57600080546001600160a01b03168082526001602052604090912054610dca919083906117c2565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610e25826000196109c4565b92915050565b6000546001600160a01b03163314610e555760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610eaa5760405162461bcd60e51b8152600401610a0490612843565b60008054610ec3916001600160a01b0390911690610e2b565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610f295760405162461bcd60e51b8152600401610a0490612843565b80610f5057506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415610fad5762093a8060035442610f6a91906128d2565b11610fad5760405162461bcd60e51b815260206004820152601360248201527227b732903bb2b2b59031b7b7b6103237bbb71760691b6044820152606401610a04565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6000546001600160a01b031633146110035760405162461bcd60e51b8152600401610a0490612843565b6011548111156110255760405162461bcd60e51b8152600401610a049061286d565b600e55565b6060600c805461094190612808565b6000546001600160a01b031633146110635760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b03166000908152600760205260409020805460ff19169055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916109d1918590610c429086906128d2565b60006110c83384846117c2565b5060019392505050565b6000546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610a0490612843565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061114990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146111cc5760405162461bcd60e51b8152600401610a0490612843565b601b80546001600160a01b039384166001600160a01b031991821617909155601c8054929093169116179055565b6000546001600160a01b031633146112245760405162461bcd60e51b8152600401610a0490612843565b6027541561125d5760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610a04565b60016027556000602b55565b6000546001600160a01b031633146112935760405162461bcd60e51b8152600401610a0490612843565b60105483118015906112a757506011548211155b80156112b557506012548111155b6112d15760405162461bcd60e51b8152600401610a049061286d565b600d92909255600e55600f55565b6000546001600160a01b031633146113095760405162461bcd60e51b8152600401610a0490612843565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137291906129cc565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e391906129cc565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145291906129cc565b90506001600160a01b0381166115cb57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c491906129cc565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611511573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153591906129cc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a691906129cc565b601a80546001600160a01b0319166001600160a01b03929092169190911790556115e7565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b031633146116355760405162461bcd60e51b8152600401610a0490612843565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461168a5760405162461bcd60e51b8152600401610a0490612843565b828460175461169991906128e9565b6116a39190612908565b60245560175481906116b69084906128e9565b6116c09190612908565b60255550505050565b6001600160a01b0383166117155760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610a04565b6001600160a01b0382166117615760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610a04565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166118115760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610a04565b6001600160a01b03831661185e5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610a04565b600082116118995760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b6044820152606401610a04565b6118a38484611b22565b15611a47576001600160a01b03841660009081526007602052604090205460ff16806118e757506001600160a01b03831660009081526007602052604090205460ff165b611a47576001600160a01b03841660009081526002602052604090205460ff168061192a57506001600160a01b03831660009081526002602052604090205460ff165b15611981576020548211156119815760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610a04565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d148015906119c757506001600160a01b03831660009081526002602052604090205460ff16155b15611a4757602354826119ef856001600160a01b031660009081526001602052604090205490565b6119f991906128ba565b1115611a475760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610a04565b6001600160a01b03841660009081526006602052604090205460019060ff1680611a8957506001600160a01b03841660009081526006602052604090205460ff165b15611a92575060005b6001600160a01b03841660009081526002602052604090205460ff1615611b0d57601d54600160a01b900460ff16158015611ad65750601d54600160a81b900460ff165b15611b0d57306000908152600160205260409020546024548110611b0b576025548110611b0257506025545b611b0b81611be0565b505b611b1985858584611e18565b95945050505050565b600080546001600160a01b03848116911614801590611b4f57506000546001600160a01b03838116911614155b8015611b7457506001600160a01b03821660009081526005602052604090205460ff16155b8015611b9957506001600160a01b03831660009081526005602052604090205460ff16155b8015611bb057506001600160a01b03821661dead14155b8015611bc457506001600160a01b03821615155b8015611bd957506001600160a01b0383163014155b9392505050565b601d805460ff60a01b1916600160a01b179055601654601554601354611c0691906128ba565b611c1091906128ba565b611c1957611e08565b6016546015546013546000926002929091611c3491906128ba565b611c3e91906128ba565b601354611c4b90856128e9565b611c559190612908565b611c5f9190612908565b90506000611c6d82846128d2565b9050611c78816120d7565b6016546015546013544792600092600292611c9391906128ba565b611c9d91906128ba565b601354611caa90856128e9565b611cb49190612908565b611cbe9190612908565b905060008415611d1457611cd28583612218565b60408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611d2086886128d2565b1115611e02576016546015544791600091611d3b91906128ba565b601554611d4890846128e9565b611d529190612908565b601b546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611da0576040519150601f19603f3d011682016040523d82523d6000602084013e611da5565b606091505b5050601c546040519194506001600160a01b0316904790600081818185875af1925050503d8060008114611df5576040519150601f19603f3d011682016040523d82523d6000602084013e611dfa565b606091505b509093505050505b50505050505b50601d805460ff60a01b19169055565b60265460009060ff1615612004576001600160a01b03851660009081526008602052604090205460ff1680611e6557506001600160a01b03841660009081526008602052604090205460ff165b15611ea55760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610a04565b602654610100900460ff16611f3b57611ebe85856122b4565b602654610100900460ff16158015611edb5750611edb8585611b22565b15611f365760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610a04565b612004565b6000602854118015611f6557506001600160a01b03851660009081526002602052604090205460ff165b8015611f765750611f768585611b22565b1561200457602b54602854611f8b90436128d2565b1015612004576001600160a01b0384166000908152600860205260408120805460ff19166001179055602c805491611fc2836129e9565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b0385166000908152600160205260408120805485929061202c9084906128d2565b90915550600090508261203f578361204a565b61204a8686866123e4565b6001600160a01b0386166000908152600160205260408120805492935083929091906120779084906128ba565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120c391815260200190565b60405180910390a350600195945050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061210c5761210c612a04565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218991906129cc565b8160018151811061219c5761219c612a04565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac947906121e2908590600090869030904290600401612a1a565b600060405180830381600087803b1580156121fc57600080fd5b505af1158015612210573d6000803e3d6000fd5b505050505050565b601954601d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612288573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122ad9190612a8b565b5050505050565b602654610100900460ff16156123185760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610a04565b6123228282611b22565b15801561233c5750601a546001600160a01b038281169116145b15610fd557602b54156123525743602855612357565b436028555b6001600160a01b03821660009081526005602052604090819020805460ff191660019081179091556026805461ff00191661010017905542602955601d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916123d891901515815260200190565b60405180910390a15050565b601a5460009081906001600160a01b03858116911614156124085750600e5461242c565b601a546001600160a01b03868116911614156124275750600d5461242c565b50600f545b6124368585611b22565b1561245757602754158061244d5750602754600114155b1561245757600080fd5b601654601554601354601454600093612710939092909161247891906128ba565b61248291906128ba565b61248c91906128ba565b60145461249985886128e9565b6124a391906128e9565b6124ad9190612908565b6124b79190612908565b90506000816127106124c985886128e9565b6124d39190612908565b6124dd91906128d2565b601b546001600160a01b031660009081526001602052604081208054929350849290919061250c9084906128ba565b909155505030600090815260016020526040812080548392906125309084906128ba565b9091555050601b546040518381526001600160a01b03918216918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3816125c582876128d2565b6125cf91906128d2565b979650505050505050565b600060208083528351808285015260005b81811015612607578581018301518582016040015282016125eb565b81811115612619576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461264457600080fd5b50565b6000806040838503121561265a57600080fd5b82356126658161262f565b946020939093013593505050565b60006020828403121561268557600080fd5b5035919050565b60006020828403121561269e57600080fd5b8135611bd98161262f565b600080600080608085870312156126bf57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156126f057600080fd5b83356126fb8161262f565b9250602084013561270b8161262f565b929592945050506040919091013590565b6000806040838503121561272f57600080fd5b50508035926020909101359150565b8035801515811461274e57600080fd5b919050565b6000806040838503121561276657600080fd5b82356127718161262f565b915061277f6020840161273e565b90509250929050565b60006020828403121561279a57600080fd5b611bd98261273e565b600080604083850312156127b657600080fd5b82356127c18161262f565b915060208301356127d18161262f565b809150509250929050565b6000806000606084860312156127f157600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061281c57607f821691505b6020821081141561283d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f21b0b63632b910109e9037bbb732b91760811b604082015260600190565b60208082526017908201527f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156128cd576128cd6128a4565b500190565b6000828210156128e4576128e46128a4565b500390565b6000816000190483118215151615612903576129036128a4565b500290565b60008261292557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4d7573742062652061626f766520302e33337e25206f6620746f74616c2073756040820152643838363c9760d91b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b6000602082840312156129de57600080fd5b8151611bd98161262f565b60006000198214156129fd576129fd6128a4565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a6a5784516001600160a01b031683529383019391830191600101612a45565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612aa057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205236b89bdecee2d2879e9661fa57bbd275e58af8ee0fd661b8cce8d5004ef7dd64736f6c634300080b0033

Deployed Bytecode Sourcemap

3965:20294:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5933:73;;;;;;;;;;;;5964:42;5933:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;5933:73:0;;;;;;;;11036:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5768:35::-;;;;;;;;;;-1:-1:-1;5768:35:0;;;;-1:-1:-1;;;;;5768:35:0;;;11649:161;;;;;;;;;;-1:-1:-1;11649:161:0;;;;;:::i;:::-;;:::i;:::-;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;11649:161:0;1514:187:1;15490:165:0;;;;;;;;;;-1:-1:-1;15490:165:0;;;;;:::i;:::-;;:::i;:::-;;14613:106;;;;;;;;;;-1:-1:-1;14613:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;14693:18:0;14669:4;14693:18;;;:9;:18;;;;;;;;;14613:106;15019:463;;;;;;;;;;-1:-1:-1;15019:463:0;;;;;:::i;:::-;;:::i;10771:83::-;;;;;;;;;;-1:-1:-1;10844:7:0;;10771:83;;;2679:25:1;;;2667:2;2652:18;10771:83:0;2533:177:1;12263:306:0;;;;;;;;;;-1:-1:-1;12263:306:0;;;;;:::i;:::-;;:::i;6284:93::-;;;;;;;;;;-1:-1:-1;6284:93:0;;;;-1:-1:-1;;;;;6284:93:0;;;16507:257;;;;;;;;;;-1:-1:-1;16507:257:0;;;;;:::i;:::-;;:::i;6015:92::-;;;;;;;;;;-1:-1:-1;6015:92:0;;;;-1:-1:-1;;;;;6015:92:0;;;17301:148;;;;;;;;;;-1:-1:-1;17301:148:0;;;;;:::i;:::-;;:::i;10860:80::-;;;;;;;;;;-1:-1:-1;10860:80:0;;5660:1;4055:36:1;;4043:2;4028:18;10860:80:0;3913:184:1;12577:215:0;;;;;;;;;;-1:-1:-1;12577:215:0;;;;;:::i;:::-;;:::i;4870:81::-;;;;;;;;;;-1:-1:-1;4870:81:0;;;;;;;;;;;;;;;;4304:25:1;;;4360:2;4345:18;;4338:34;;;;4388:18;;;4381:34;4292:2;4277:18;4870:81:0;4102:319:1;16247:252:0;;;;;;;;;;-1:-1:-1;16247:252:0;;;;;:::i;:::-;;:::i;5810:21::-;;;;;;;;;;-1:-1:-1;5810:21:0;;;;-1:-1:-1;;;;;5810:21:0;;;6414:41;;;;;;;;;;-1:-1:-1;6414:41:0;;;;-1:-1:-1;;;6414:41:0;;;;;;9587:626;;;;;;;;;;-1:-1:-1;9587:626:0;;;;;:::i;:::-;;:::i;13961:125::-;;;;;;;;;;-1:-1:-1;13961:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;14050:28:0;14026:4;14050:28;;;:19;:28;;;;;;;;;13961:125;6977:36;;;;;;;;;;-1:-1:-1;6977:36:0;;;;;;;;;;;12135:120;;;;;;;;;;-1:-1:-1;12135:120:0;;;;;:::i;:::-;;:::i;14094:134::-;;;;;;;;;;-1:-1:-1;14094:134:0;;;;;:::i;:::-;;:::i;11349:117::-;;;;;;;;;;-1:-1:-1;11349:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;11442:16:0;11415:7;11442:16;;;:7;:16;;;;;;;11349:117;10221:195;;;;;;;;;;;;;:::i;13542:411::-;;;;;;;;;;-1:-1:-1;13542:411:0;;;;;:::i;:::-;;:::i;6182:95::-;;;;;;;;;;-1:-1:-1;6182:95:0;;;;-1:-1:-1;;;;;6182:95:0;;;11122:80;;;;;;;;;;-1:-1:-1;11174:7:0;9565:6;-1:-1:-1;;;;;9565:6:0;11122:80;;15663:171;;;;;;;;;;-1:-1:-1;15663:171:0;;;;;:::i;:::-;;:::i;10946:84::-;;;;;;;;;;;;;:::i;14463:142::-;;;;;;;;;;-1:-1:-1;14463:142:0;;;;;:::i;:::-;;:::i;12800:225::-;;;;;;;;;;-1:-1:-1;12800:225:0;;;;;:::i;:::-;;:::i;11474:167::-;;;;;;;;;;-1:-1:-1;11474:167:0;;;;;:::i;:::-;;:::i;5385:126::-;;;;;;;;;;-1:-1:-1;5385:126:0;;;;;;;;;;;;;;;;;;;5142:25:1;;;5198:2;5183:18;;5176:34;;;;5226:18;;;5219:34;5284:2;5269:18;;5262:34;5129:3;5114:19;5385:126:0;4911:391:1;17457:171:0;;;;;;;;;;-1:-1:-1;17457:171:0;;;;;:::i;:::-;;:::i;14308:147::-;;;;;;;;;;-1:-1:-1;14308:147:0;;;;;:::i;:::-;;:::i;4430:63::-;;;;;;;;;;-1:-1:-1;4430:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17069:224;;;;;;;;;;-1:-1:-1;17069:224:0;;;;;:::i;:::-;;:::i;11208:133::-;;;;;;;;;;-1:-1:-1;11208:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11310:19:0;;;11292:7;11310:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11208:133;14727:148;;;;;;;;;;;;;:::i;7245:32::-;;;;;;;;;;;;;;;;5103:83;;;;;;;;;;-1:-1:-1;5103:83:0;;;;;;;;;;;;15842:397;;;;;;;;;;-1:-1:-1;15842:397:0;;;;;:::i;:::-;;:::i;13033:501::-;;;;;;;;;;-1:-1:-1;13033:501:0;;;;;:::i;:::-;;:::i;14883:128::-;;;;;;;;;;-1:-1:-1;14883:128:0;;;;;:::i;:::-;;:::i;16772:289::-;;;;;;;;;;-1:-1:-1;16772:289:0;;;;;:::i;:::-;;:::i;11036:80::-;11084:13;11108:5;11101:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11036:80;:::o;11649:161::-;11724:4;11741:39;517:10;11764:7;11773:6;11741:8;:39::i;:::-;-1:-1:-1;11798:4:0;11649:161;;;;:::o;15490:165::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;;;;;;;;;15572:7:::1;:14:::0;15561:25;::::1;;15553:61;;;;-1:-1:-1::0;;;15553:61:0::1;;;;;;;:::i;:::-;15626:4;:21:::0;15490:165::o;15019:463::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;15204:13;15186:15;15158:25:::1;15171:12:::0;15158:10;:25:::1;:::i;:::-;:43;;;;:::i;:::-;:59;;;;:::i;:::-;15222:3;15157:68;15147:89;;;::::0;-1:-1:-1;;;15147:89:0;;8164:2:1;15147:89:0::1;::::0;::::1;8146:21:1::0;8203:1;8183:18;;;8176:29;-1:-1:-1;;;8221:18:1;;;8214:36;8267:18;;15147:89:0::1;7962:329:1::0;15147:89:0::1;15305:6;:29:::0;;;;15345:18;:33;;;;15389:21;:39;15439:19;:35;15019:463::o;12263:306::-;-1:-1:-1;;;;;12384:19:0;;12363:4;12384:19;;;:11;:19;;;;;;;;12404:10;12384:31;;;;;;;;-1:-1:-1;;12384:52:0;12380:126;;-1:-1:-1;;;;;12453:19:0;;;;;;:11;:19;;;;;;;;12473:10;12453:31;;;;;;;:41;;12488:6;;12453:19;:41;;12488:6;;12453:41;:::i;:::-;;;;-1:-1:-1;;12380:126:0;12525:36;12535:6;12543:9;12554:6;12525:9;:36::i;:::-;12518:43;12263:306;-1:-1:-1;;;;12263:306:0:o;16507:257::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;16591:13:::1;16629:7;16618;16608;;:17;;;;:::i;:::-;16607:29;;;;:::i;:::-;16591:45;;16675:3;16665:7;;:13;;;;:::i;:::-;16655:5;:24;;16647:74;;;;-1:-1:-1::0;;;16647:74:0::1;;;;;;;:::i;:::-;16732:14;:22:::0;-1:-1:-1;;16507:257:0:o;17301:148::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;17394:16:::1;:45:::0;;-1:-1:-1;;;;;;17394:45:0::1;-1:-1:-1::0;;;;;17394:45:0;;;::::1;::::0;;;::::1;::::0;;17301:148::o;12577:215::-;517:10;12665:4;12714:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12714:34:0;;;;;;;;;;12665:4;;12682:80;;12705:7;;12714:47;;12751:10;;12714:47;:::i;:::-;12682:8;:80::i;16247:252::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;16330:13:::1;16368:7;16357;16347;;:17;;;;:::i;:::-;16346:29;;;;:::i;:::-;16330:45;;16414:3;16404:7;;:13;;;;:::i;:::-;16394:5;:24;;16386:74;;;;-1:-1:-1::0;;;16386:74:0::1;;;;;;;:::i;:::-;16471:12;:20:::0;-1:-1:-1;;16247:252:0:o;9587:626::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9668:22:0;::::1;9660:96;;;;-1:-1:-1::0;;;9660:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9775:16:0;::::1;5964:42;9775:16;;9767:90;;;;-1:-1:-1::0;;;9767:90:0::1;;;;;;;:::i;:::-;9888:6;::::0;;9868:34:::1;::::0;-1:-1:-1;;;;;9888:6:0;;::::1;::::0;9868:19:::1;:34::i;:::-;9913:35;9933:8;9943:4;9913:19;:35::i;:::-;10005:6;::::0;;-1:-1:-1;;;;;10005:6:0;;::::1;11442:16:::0;;:7;:16;;;;;;;;;9963:11:::1;:19:::0;;;;;:29;;::::1;::::0;;;;;;;:49;10036:6;;;;::::1;11442:16:::0;;;;;;10026:21;10023:99:::1;;10074:6;::::0;;-1:-1:-1;;;;;10074:6:0::1;11442:16:::0;;;:7;:16;;;;;;;10064:46:::1;::::0;10074:6;10082:8;;10064:9:::1;:46::i;:::-;;10023:99;10134:6;:17:::0;;-1:-1:-1;;;;;;10134:17:0::1;-1:-1:-1::0;;;;;10134:17:0;::::1;::::0;;::::1;::::0;;10167:38:::1;::::0;10134:17;;;;10167:38:::1;::::0;10134:6;10167:38:::1;9587:626:::0;:::o;12135:120::-;12188:4;12212:35;12220:7;-1:-1:-1;;12212:7:0;:35::i;:::-;12205:42;12135:120;-1:-1:-1;;12135:120:0:o;14094:134::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14182:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14182:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14094:134::o;10221:195::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;10308:6:::1;::::0;;10288:34:::1;::::0;-1:-1:-1;;;;;10308:6:0;;::::1;::::0;10288:19:::1;:34::i;:::-;10350:1;10333:19:::0;;-1:-1:-1;;;;;;10333:19:0::1;::::0;;10368:40:::1;::::0;10350:1;;10368:40:::1;::::0;10350:1;;10368:40:::1;10221:195::o:0;13542:411::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;13623:16;13619:327:::1;;-1:-1:-1::0;;;;;;13656:13:0::1;13672:5;13656:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;13656:21:0::1;::::0;;13542:411::o;13619:327::-:1;13714:17;::::0;:22;13710:140:::1;;13803:7;13783:17;;13765:15;:35;;;;:::i;:::-;:45;13757:77;;;::::0;-1:-1:-1;;;13757:77:0;;9859:2:1;13757:77:0::1;::::0;::::1;9841:21:1::0;9898:2;9878:18;;;9871:30;-1:-1:-1;;;9917:18:1;;;9910:49;9976:18;;13757:77:0::1;9657:343:1::0;13757:77:0::1;-1:-1:-1::0;;;;;13864:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;13864:20:0::1;13880:4;13864:20;::::0;;13919:15:::1;13899:17;:35:::0;13619:327:::1;13542:411:::0;;:::o;15663:171::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;15748:15;;15736:27;::::1;;15728:63;;;;-1:-1:-1::0;;;15728:63:0::1;;;;;;;:::i;:::-;15803:12:::0;:23;15663:171::o;10946:84::-;10996:13;11020:7;11013:14;;;;;:::i;14463:142::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14543:46:0::1;14592:5;14543:46:::0;;;:30:::1;:46;::::0;;;;:54;;-1:-1:-1;;14543:54:0::1;::::0;;14463:142::o;12800:225::-;517:10;12893:4;12942:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12942:34:0;;;;;;;;;;12893:4;;12910:85;;12933:7;;12942:52;;12979:15;;12942:52;:::i;11474:167::-;11552:4;11569:42;517:10;11593:9;11604:6;11569:9;:42::i;:::-;-1:-1:-1;11629:4:0;;11474:167;-1:-1:-1;;;11474:167:0:o;17457:171::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;17534:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;17534:32:0::1;-1:-1:-1::0;;;;17534:32:0;;::::1;;::::0;;17582:38:::1;::::0;::::1;::::0;::::1;::::0;17558:8;1679:14:1;1672:22;1654:41;;1642:2;1627:18;;1514:187;17582:38:0::1;;;;;;;;17457:171:::0;:::o;14308:147::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14394:46:0::1;;::::0;;;:30:::1;:46;::::0;;;;:53;;-1:-1:-1;;14394:53:0::1;14443:4;14394:53;::::0;;14308:147::o;17069:224::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;17186:15:::1;:41:::0;;-1:-1:-1;;;;;17186:41:0;;::::1;-1:-1:-1::0;;;;;;17186:41:0;;::::1;;::::0;;;17238:18:::1;:47:::0;;;;;::::1;::::0;::::1;;::::0;;17069:224::o;14727:148::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;14782:13:::1;::::0;:18;14773:38:::1;;;::::0;-1:-1:-1;;;14773:38:0;;10207:2:1;14773:38:0::1;::::0;::::1;10189:21:1::0;10246:1;10226:18;;;10219:29;-1:-1:-1;;;10264:18:1;;;10257:36;10310:18;;14773:38:0::1;10005:329:1::0;14773:38:0::1;14838:1;14822:13;:17:::0;14866:1:::1;14850:13;:17:::0;14727:148::o;15842:397::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;15957:7:::1;:14:::0;15946:25;::::1;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;16004:15:0;;15992:27;::::1;;15946:73;:129;;;;-1:-1:-1::0;16056:19:0;;16040:35;::::1;;15946:129;15938:182;;;;-1:-1:-1::0;;;15938:182:0::1;;;;;;;:::i;:::-;16132:4;:21:::0;;;;16165:12;:23;16200:16;:31;15842:397::o;13033:501::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;13104:29:::1;13155:9;13104:61;;13176:16;13213:10;-1:-1:-1::0;;;;;13213:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13195:47:0::1;;13251:4;13258:10;-1:-1:-1::0;;;;;13258:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13195:81;::::0;-1:-1:-1;;;;;;13195:81:0::1;::::0;;;;;;-1:-1:-1;;;;;10825:15:1;;;13195:81:0::1;::::0;::::1;10807:34:1::0;10877:15;;10857:18;;;10850:43;10742:18;;13195:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13176:100:::0;-1:-1:-1;;;;;;13291:22:0;::::1;13287:207;;13357:10;-1:-1:-1::0;;;;;13357:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13339:50:0::1;;13398:4;13405:10;-1:-1:-1::0;;;;;13405:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13339:84;::::0;-1:-1:-1;;;;;;13339:84:0::1;::::0;;;;;;-1:-1:-1;;;;;10825:15:1;;;13339:84:0::1;::::0;::::1;10807:34:1::0;10877:15;;10857:18;;;10850:43;10742:18;;13339:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13330:6;:93:::0;;-1:-1:-1;;;;;;13330:93:0::1;-1:-1:-1::0;;;;;13330:93:0;;;::::1;::::0;;;::::1;::::0;;13287:207:::1;;;13465:6;:17:::0;;-1:-1:-1;;;;;;13465:17:0::1;-1:-1:-1::0;;;;;13465:17:0;::::1;;::::0;;13287:207:::1;-1:-1:-1::0;13504:9:0::1;:22:::0;;-1:-1:-1;;;;;;13504:22:0::1;-1:-1:-1::0;;;;;13504:22:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;13033:501:0:o;14883:128::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14975:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:28;;-1:-1:-1;;14975:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14883:128::o;16772:289::-;7840:6;;-1:-1:-1;;;;;7840:6:0;517:10;7840:22;7832:51;;;;-1:-1:-1;;;7832:51:0;;;;;;;:::i;:::-;16972:16:::1;16952;16942:7;;:26;;;;:::i;:::-;16941:47;;;;:::i;:::-;16925:13;:63:::0;17013:7:::1;::::0;17040:13;;17013:23:::1;::::0;17023:13;;17013:23:::1;:::i;:::-;17012:41;;;;:::i;:::-;16999:10;:54:::0;-1:-1:-1;;;;16772:289:0:o;11818:309::-;-1:-1:-1;;;;;11912:20:0;;11904:52;;;;-1:-1:-1;;;11904:52:0;;11106:2:1;11904:52:0;;;11088:21:1;11145:2;11125:18;;;11118:30;-1:-1:-1;;;11164:18:1;;;11157:49;11223:18;;11904:52:0;10904:343:1;11904:52:0;-1:-1:-1;;;;;11975:21:0;;11967:53;;;;-1:-1:-1;;;11967:53:0;;11106:2:1;11967:53:0;;;11088:21:1;11145:2;11125:18;;;11118:30;-1:-1:-1;;;11164:18:1;;;11157:49;11223:18;;11967:53:0;10904:343:1;11967:53:0;-1:-1:-1;;;;;12033:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12086:33;;2679:25:1;;;12086:33:0;;2652:18:1;12086:33:0;;;;;;;11818:309;;;:::o;17967:1414::-;18046:4;-1:-1:-1;;;;;18071:18:0;;18063:51;;;;-1:-1:-1;;;18063:51:0;;11454:2:1;18063:51:0;;;11436:21:1;11493:2;11473:18;;;11466:30;-1:-1:-1;;;11512:18:1;;;11505:50;11572:18;;18063:51:0;11252:344:1;18063:51:0;-1:-1:-1;;;;;18133:16:0;;18125:49;;;;-1:-1:-1;;;18125:49:0;;11454:2:1;18125:49:0;;;11436:21:1;11493:2;11473:18;;;11466:30;-1:-1:-1;;;11512:18:1;;;11505:50;11572:18;;18125:49:0;11252:344:1;18125:49:0;18202:1;18193:6;:10;18185:31;;;;-1:-1:-1;;;18185:31:0;;11803:2:1;18185:31:0;;;11785:21:1;11842:1;11822:18;;;11815:29;-1:-1:-1;;;11860:18:1;;;11853:38;11908:18;;18185:31:0;11601:331:1;18185:31:0;18230:20;18241:4;18247:2;18230:10;:20::i;:::-;18227:484;;;-1:-1:-1;;;;;18274:36:0;;;;;;:30;:36;;;;;;;;;:74;;-1:-1:-1;;;;;;18314:34:0;;;;;;:30;:34;;;;;;;;18274:74;18269:429;;-1:-1:-1;;;;;18373:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;18390:11:0;;;;;;:7;:11;;;;;;;;18373:28;18370:130;;;18439:12;;18429:6;:22;;18421:59;;;;-1:-1:-1;;;18421:59:0;;12139:2:1;18421:59:0;;;12121:21:1;12178:2;12158:18;;;12151:30;12217:26;12197:18;;;12190:54;12261:18;;18421:59:0;11937:348:1;18421:59:0;-1:-1:-1;;;;;18521:20:0;;5882:42;18521:20;;;;:36;;-1:-1:-1;;;;;;18546:11:0;;;;;;:7;:11;;;;;;;;18545:12;18521:36;18518:163;;;18616:14;;18606:6;18590:13;18600:2;-1:-1:-1;;;;;11442:16:0;11415:7;11442:16;;;:7;:16;;;;;;;11349:117;18590:13;:22;;;;:::i;:::-;:40;;18582:79;;;;-1:-1:-1;;;18582:79:0;;12492:2:1;18582:79:0;;;12474:21:1;12531:2;12511:18;;;12504:30;12570:28;12550:18;;;12543:56;12616:18;;18582:79:0;12290:350:1;18582:79:0;-1:-1:-1;;;;;18754:25:0;;18721:12;18754:25;;;:19;:25;;;;;;18736:4;;18754:25;;;:52;;-1:-1:-1;;;;;;18783:23:0;;;;;;:19;:23;;;;;;;;18754:52;18751:98;;;-1:-1:-1;18832:5:0;18751:98;-1:-1:-1;;;;;18865:11:0;;;;;;:7;:11;;;;;;;;18861:451;;;18898:16;;-1:-1:-1;;;18898:16:0;;;;18897:17;:59;;;;-1:-1:-1;18935:21:0;;-1:-1:-1;;;18935:21:0;;;;18897:59;18893:408;;;19040:4;18991:28;11442:16;;;:7;:16;;;;;;19093:13;;19069:37;;19065:221;;19158:10;;19134:20;:34;19131:77;;-1:-1:-1;19195:10:0;;19131:77;19230:36;19245:20;19230:14;:36::i;:::-;18972:329;18893:408;19329:44;19347:4;19353:2;19357:6;19365:7;19329:17;:44::i;:::-;19322:51;17967:1414;-1:-1:-1;;;;;17967:1414:0:o;17636:323::-;17704:4;9565:6;;-1:-1:-1;;;;;17728:15:0;;;9565:6;;17728:15;;;;:45;;-1:-1:-1;9538:7:0;9565:6;-1:-1:-1;;;;;17760:13:0;;;9565:6;;17760:13;;17728:45;:84;;;;-1:-1:-1;;;;;;17791:21:0;;;;;;:17;:21;;;;;;;;17790:22;17728:84;:125;;;;-1:-1:-1;;;;;;17830:23:0;;;;;;:17;:23;;;;;;;;17829:24;17728:125;:152;;;;-1:-1:-1;;;;;;17870:10:0;;5964:42;17870:10;;17728:152;:185;;;;-1:-1:-1;;;;;;17897:16:0;;;;17728:185;:223;;;;-1:-1:-1;;;;;;17930:21:0;;17946:4;17930:21;;17728:223;17721:230;17636:323;-1:-1:-1;;;17636:323:0:o;19389:1260::-;7714:16;:23;;-1:-1:-1;;;;7714:23:0;-1:-1:-1;;;7714:23:0;;;19518:21;;19497:18;;19518:6:::1;19478:16:::0;:37:::1;::::0;19497:18;19478:37:::1;:::i;:::-;:61;;;;:::i;:::-;19474:92;;19559:7;;19474:92;19682:21:::0;;19661:18;;19682:6:::1;19642:16:::0;19576:17:::1;::::0;19709:1:::1;::::0;19682:21;;19642:37:::1;::::0;19661:18;19642:37:::1;:::i;:::-;:61;;;;:::i;:::-;19621:6;:16:::0;19598:39:::1;::::0;:20;:39:::1;:::i;:::-;19597:107;;;;:::i;:::-;19596:114;;;;:::i;:::-;19576:134:::0;-1:-1:-1;19723:20:0::1;19746:32;19576:134:::0;19746:20;:32:::1;:::i;:::-;19723:55;;19789:30;19806:12;19789:16;:30::i;:::-;19996:21:::0;;19975:18;;19996:6:::1;19956:16:::0;19857:21:::1;::::0;19832:22:::1;::::0;20023:1:::1;::::0;19956:37:::1;::::0;19975:18;19956:37:::1;:::i;:::-;:61;;;;:::i;:::-;19935:6;:16:::0;19918:33:::1;::::0;:14;:33:::1;:::i;:::-;19917:101;;;;:::i;:::-;19916:108;;;;:::i;:::-;19889:135:::0;-1:-1:-1;20037:12:0::1;20066:13:::0;;20062:161:::1;;20096:41;20109:9;20120:16;20096:12;:41::i;:::-;20157:54;::::0;;4304:25:1;;;4360:2;4345:18;;4338:34;;;4388:18;;;4381:34;;;20157:54:0::1;::::0;4292:2:1;4277:18;20157:54:0::1;;;;;;;20062:161;20272:1;20237:32;20260:9:::0;20237:20;:32:::1;:::i;:::-;:36;20233:409;;;20422:21:::0;;20401:18;;20304:21:::1;::::0;20290:11:::1;::::0;20401:42:::1;::::0;20422:21;20401:42:::1;:::i;:::-;20378:18:::0;;20369:27:::1;::::0;:6;:27:::1;:::i;:::-;20368:76;;;;:::i;:::-;20483:15;::::0;20475:61:::1;::::0;20340:105;;-1:-1:-1;;;;;;20483:15:0::1;::::0;20340:105;;20475:61:::1;::::0;;;20340:105;20483:15;20475:61:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;20572:18:0::1;::::0;20564:66:::1;::::0;20462:74;;-1:-1:-1;;;;;;20572:18:0::1;::::0;20604:21:::1;::::0;20564:66:::1;::::0;;;20604:21;20572:18;20564:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;20551:79:0;;-1:-1:-1;;;;20233:409:0::1;19463:1186;;;;;7748:1;-1:-1:-1::0;7760:16:0;:24;;-1:-1:-1;;;;7760:24:0;;;19389:1260::o;22066:1179::-;22187:16;;22166:4;;22187:16;;22183:817;;;-1:-1:-1;;;;;14693:18:0;;14669:4;14693:18;;;:9;:18;;;;;;;;22223:30;;;-1:-1:-1;;;;;;14693:18:0;;14669:4;14693:18;;;:9;:18;;;;;;;;22241:12;22219:97;;;22274:26;;-1:-1:-1;;;22274:26:0;;13057:2:1;22274:26:0;;;13039:21:1;13096:2;13076:18;;;13069:30;-1:-1:-1;;;13115:18:1;;;13108:46;13171:18;;22274:26:0;12855:340:1;22219:97:0;22337:16;;;;;;;22332:657;;22374:28;22393:4;22399:2;22374:18;:28::i;:::-;22426:16;;;;;;;22425:17;:41;;;;;22446:20;22457:4;22463:2;22446:10;:20::i;:::-;22421:137;;;22491:47;;-1:-1:-1;;;22491:47:0;;13402:2:1;22491:47:0;;;13384:21:1;13441:2;13421:18;;;13414:30;13480:34;13460:18;;;13453:62;-1:-1:-1;;;13531:18:1;;;13524:35;13576:19;;22491:47:0;13200:401:1;22421:137:0;22332:657;;;22617:1;22602:12;;:16;:54;;;;-1:-1:-1;;;;;;22643:13:0;;;;;;:7;:13;;;;;;;;22602:54;:99;;;;;22681:20;22692:4;22698:2;22681:10;:20::i;:::-;22598:376;;;22778:13;;22763:12;;22748:27;;:12;:27;:::i;:::-;:43;22744:211;;;-1:-1:-1;;;;;22820:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;22820:20:0;22836:4;22820:20;;;22867:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;22915:16:0;;-1:-1:-1;;;;;178:32:1;;160:51;;22915:16:0;;148:2:1;133:18;22915:16:0;;;;;;;22744:211;-1:-1:-1;;;;;23012:13:0;;;;;;:7;:13;;;;;:23;;23029:6;;23012:13;:23;;23029:6;;23012:23;:::i;:::-;;;;-1:-1:-1;23046:22:0;;-1:-1:-1;23072:7:0;23071:48;;23113:6;23071:48;;;23083:27;23093:4;23099:2;23103:6;23083:9;:27::i;:::-;-1:-1:-1;;;;;23134:11:0;;;;;;:7;:11;;;;;:29;;23046:73;;-1:-1:-1;23046:73:0;;23134:11;;;:29;;23046:73;;23134:29;:::i;:::-;;;;;;;;23196:2;-1:-1:-1;;;;;23181:34:0;23190:4;-1:-1:-1;;;;;23181:34:0;;23200:14;23181:34;;;;2679:25:1;;2667:2;2652:18;;2533:177;23181:34:0;;;;;;;;-1:-1:-1;23233:4:0;;22066:1179;-1:-1:-1;;;;;22066:1179:0:o;20657:417::-;20748:16;;;20762:1;20748:16;;;;;;;;20724:21;;20748:16;;;;;;;;;;-1:-1:-1;20748:16:0;20724:40;;20793:4;20775;20780:1;20775:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20775:23:0;;;:7;;;;;;;;;;:23;;;;20819:9;;:16;;;-1:-1:-1;;;20819:16:0;;;;:9;;;;;:14;;:16;;;;;20775:7;;20819:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20809:4;20814:1;20809:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20809:26:0;;;:7;;;;;;;;;:26;20848:9;;:218;;-1:-1:-1;;;20848:218:0;;:9;;;:60;;:218;;20923:11;;20848:9;;20993:4;;21020;;21040:15;;20848:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20713:361;20657:417;:::o;21082:344::-;21163:9;;21361:16;;21163:255;;-1:-1:-1;;;21163:255:0;;21229:4;21163:255;;;15344:34:1;15394:18;;;15387:34;;;21163:9:0;15437:18:1;;;15430:34;;;15480:18;;;15473:34;-1:-1:-1;;;;;21361:16:0;;;15523:19:1;;;15516:44;21392:15:0;15576:19:1;;;15569:35;21163:9:0;;;:25;;21196:9;;15278:19:1;;21163:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21082:344;;:::o;21434:624::-;21516:16;;;;;;;21515:17;21507:65;;;;-1:-1:-1;;;21507:65:0;;16128:2:1;21507:65:0;;;16110:21:1;16167:2;16147:18;;;16140:30;16206:34;16186:18;;;16179:62;-1:-1:-1;;;16257:18:1;;;16250:33;16300:19;;21507:65:0;15926:399:1;21507:65:0;21588:20;21599:4;21605:2;21588:10;:20::i;:::-;21587:21;:37;;;;-1:-1:-1;21618:6:0;;-1:-1:-1;;;;;21612:12:0;;;21618:6;;21612:12;21587:37;21583:468;;;21645:13;;:18;21641:172;;21699:12;21684;:27;21641:172;;;21785:12;21770;:27;21641:172;-1:-1:-1;;;;;21827:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;21827:30:0;21853:4;21827:30;;;;;;21872:16;:23;;-1:-1:-1;;21872:23:0;21827:30;21872:23;;;21925:15;21910:12;:30;21957:21;:28;;-1:-1:-1;;;;21957:28:0;-1:-1:-1;;;21957:28:0;;;22005:34;;;;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;;1514:187;22005:34:0;;;;;;;;21434:624;;:::o;23253:1003::-;23393:6;;23332:7;;;;-1:-1:-1;;;;;23387:12:0;;;23393:6;;23387:12;23383:159;;;-1:-1:-1;23415:12:0;;23383:159;;;23458:6;;-1:-1:-1;;;;;23450:14:0;;;23458:6;;23450:14;23446:96;;;-1:-1:-1;23480:4:0;:11;23446:96;;;-1:-1:-1;23524:16:0;;23446:96;23558:20;23569:4;23575:2;23558:10;:20::i;:::-;23554:142;;;23598:13;;:18;;:42;;;23620:13;;23638:1;23620:20;;23598:42;23594:91;;;23661:8;;;23594:91;23841:21;;23820:18;;23841:6;23801:16;23779:19;;23706:23;;5564:5;;23841:21;;23820:18;;23779:38;;23801:16;23779:38;:::i;:::-;:59;;;;:::i;:::-;:83;;;;:::i;:::-;23755:19;;23733;23742:10;23733:6;:19;:::i;:::-;:41;;;;:::i;:::-;23732:132;;;;:::i;:::-;:151;;;;:::i;:::-;23706:177;-1:-1:-1;23894:17:0;23706:177;5564:5;23915:19;23924:10;23915:6;:19;:::i;:::-;:38;;;;:::i;:::-;23914:58;;;;:::i;:::-;23991:15;;-1:-1:-1;;;;;23991:15:0;23983:24;;;;:7;:24;;;;;:43;;23894:78;;-1:-1:-1;24011:15:0;;23983:24;;;:43;;24011:15;;23983:43;:::i;:::-;;;;-1:-1:-1;;24053:4:0;24037:22;;;;:7;:22;;;;;:37;;24064:9;;24037:22;:37;;24064:9;;24037:37;:::i;:::-;;;;-1:-1:-1;;24105:15:0;;24090:48;;2679:25:1;;;-1:-1:-1;;;;;24105:15:0;;;;24090:48;;;;;2667:2:1;2652:18;24090:48:0;;;;;;;24154:40;;2679:25:1;;;24177:4:0;;-1:-1:-1;;;;;24154:40:0;;;;;2667:2:1;2652:18;24154:40:0;;;;;;;24233:15;24212:18;24221:9;24212:6;:18;:::i;:::-;:36;;;;:::i;:::-;24205:43;23253:1003;-1:-1:-1;;;;;;;23253:1003:0:o;222:597:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:131::-;-1:-1:-1;;;;;1133:31:1;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1058:131;:::o;1194:315::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1378:9;1365:23;1397:31;1422:5;1397:31;:::i;:::-;1447:5;1499:2;1484:18;;;;1471:32;;-1:-1:-1;;;1194:315:1:o;1706:180::-;1765:6;1818:2;1806:9;1797:7;1793:23;1789:32;1786:52;;;1834:1;1831;1824:12;1786:52;-1:-1:-1;1857:23:1;;1706:180;-1:-1:-1;1706:180:1:o;1891:247::-;1950:6;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;2058:9;2045:23;2077:31;2102:5;2077:31;:::i;2143:385::-;2229:6;2237;2245;2253;2306:3;2294:9;2285:7;2281:23;2277:33;2274:53;;;2323:1;2320;2313:12;2274:53;-1:-1:-1;;2346:23:1;;;2416:2;2401:18;;2388:32;;-1:-1:-1;2467:2:1;2452:18;;2439:32;;2518:2;2503:18;2490:32;;-1:-1:-1;2143:385:1;-1:-1:-1;2143:385:1:o;2715:456::-;2792:6;2800;2808;2861:2;2849:9;2840:7;2836:23;2832:32;2829:52;;;2877:1;2874;2867:12;2829:52;2916:9;2903:23;2935:31;2960:5;2935:31;:::i;:::-;2985:5;-1:-1:-1;3042:2:1;3027:18;;3014:32;3055:33;3014:32;3055:33;:::i;:::-;2715:456;;3107:7;;-1:-1:-1;;;3161:2:1;3146:18;;;;3133:32;;2715:456::o;3400:248::-;3468:6;3476;3529:2;3517:9;3508:7;3504:23;3500:32;3497:52;;;3545:1;3542;3535:12;3497:52;-1:-1:-1;;3568:23:1;;;3638:2;3623:18;;;3610:32;;-1:-1:-1;3400:248:1:o;4426:160::-;4491:20;;4547:13;;4540:21;4530:32;;4520:60;;4576:1;4573;4566:12;4520:60;4426:160;;;:::o;4591:315::-;4656:6;4664;4717:2;4705:9;4696:7;4692:23;4688:32;4685:52;;;4733:1;4730;4723:12;4685:52;4772:9;4759:23;4791:31;4816:5;4791:31;:::i;:::-;4841:5;-1:-1:-1;4865:35:1;4896:2;4881:18;;4865:35;:::i;:::-;4855:45;;4591:315;;;;;:::o;5307:180::-;5363:6;5416:2;5404:9;5395:7;5391:23;5387:32;5384:52;;;5432:1;5429;5422:12;5384:52;5455:26;5471:9;5455:26;:::i;5492:404::-;5576:6;5584;5637:2;5625:9;5616:7;5612:23;5608:32;5605:52;;;5653:1;5650;5643:12;5605:52;5692:9;5679:23;5711:31;5736:5;5711:31;:::i;:::-;5761:5;-1:-1:-1;5818:2:1;5803:18;;5790:32;5831:33;5790:32;5831:33;:::i;:::-;5883:7;5873:17;;;5492:404;;;;;:::o;6294:316::-;6371:6;6379;6387;6440:2;6428:9;6419:7;6415:23;6411:32;6408:52;;;6456:1;6453;6446:12;6408:52;-1:-1:-1;;6479:23:1;;;6549:2;6534:18;;6521:32;;-1:-1:-1;6600:2:1;6585:18;;;6572:32;;6294:316;-1:-1:-1;6294:316:1:o;6615:380::-;6694:1;6690:12;;;;6737;;;6758:61;;6812:4;6804:6;6800:17;6790:27;;6758:61;6865:2;6857:6;6854:14;6834:18;6831:38;6828:161;;;6911:10;6906:3;6902:20;6899:1;6892:31;6946:4;6943:1;6936:15;6974:4;6971:1;6964:15;6828:161;;6615:380;;;:::o;7000:340::-;7202:2;7184:21;;;7241:2;7221:18;;;7214:30;-1:-1:-1;;;7275:2:1;7260:18;;7253:46;7331:2;7316:18;;7000:340::o;7345:347::-;7547:2;7529:21;;;7586:2;7566:18;;;7559:30;7625:25;7620:2;7605:18;;7598:53;7683:2;7668:18;;7345:347::o;7697:127::-;7758:10;7753:3;7749:20;7746:1;7739:31;7789:4;7786:1;7779:15;7813:4;7810:1;7803:15;7829:128;7869:3;7900:1;7896:6;7893:1;7890:13;7887:39;;;7906:18;;:::i;:::-;-1:-1:-1;7942:9:1;;7829:128::o;8296:125::-;8336:4;8364:1;8361;8358:8;8355:34;;;8369:18;;:::i;:::-;-1:-1:-1;8406:9:1;;8296:125::o;8426:168::-;8466:7;8532:1;8528;8524:6;8520:14;8517:1;8514:21;8509:1;8502:9;8495:17;8491:45;8488:71;;;8539:18;;:::i;:::-;-1:-1:-1;8579:9:1;;8426:168::o;8599:217::-;8639:1;8665;8655:132;;8709:10;8704:3;8700:20;8697:1;8690:31;8744:4;8741:1;8734:15;8772:4;8769:1;8762:15;8655:132;-1:-1:-1;8801:9:1;;8599:217::o;8821:401::-;9023:2;9005:21;;;9062:2;9042:18;;;9035:30;9101:34;9096:2;9081:18;;9074:62;-1:-1:-1;;;9167:2:1;9152:18;;9145:35;9212:3;9197:19;;8821:401::o;9227:425::-;9429:2;9411:21;;;9468:2;9448:18;;;9441:30;9507:34;9502:2;9487:18;;9480:62;9578:31;9573:2;9558:18;;9551:59;9642:3;9627:19;;9227:425::o;10339:251::-;10409:6;10462:2;10450:9;10441:7;10437:23;10433:32;10430:52;;;10478:1;10475;10468:12;10430:52;10510:9;10504:16;10529:31;10554:5;10529:31;:::i;13606:135::-;13645:3;-1:-1:-1;;13666:17:1;;13663:43;;;13686:18;;:::i;:::-;-1:-1:-1;13733:1:1;13722:13;;13606:135::o;13878:127::-;13939:10;13934:3;13930:20;13927:1;13920:31;13970:4;13967:1;13960:15;13994:4;13991:1;13984:15;14010:980;14272:4;14320:3;14309:9;14305:19;14351:6;14340:9;14333:25;14377:2;14415:6;14410:2;14399:9;14395:18;14388:34;14458:3;14453:2;14442:9;14438:18;14431:31;14482:6;14517;14511:13;14548:6;14540;14533:22;14586:3;14575:9;14571:19;14564:26;;14625:2;14617:6;14613:15;14599:29;;14646:1;14656:195;14670:6;14667:1;14664:13;14656:195;;;14735:13;;-1:-1:-1;;;;;14731:39:1;14719:52;;14826:15;;;;14791:12;;;;14767:1;14685:9;14656:195;;;-1:-1:-1;;;;;;;14907:32:1;;;;14902:2;14887:18;;14880:60;-1:-1:-1;;;14971:3:1;14956:19;14949:35;14868:3;14010:980;-1:-1:-1;;;14010:980:1:o;15615:306::-;15703:6;15711;15719;15772:2;15760:9;15751:7;15747:23;15743:32;15740:52;;;15788:1;15785;15778:12;15740:52;15817:9;15811:16;15801:26;;15867:2;15856:9;15852:18;15846:25;15836:35;;15911:2;15900:9;15896:18;15890:25;15880:35;;15615:306;;;;;:::o

Swarm Source

ipfs://5236b89bdecee2d2879e9661fa57bbd275e58af8ee0fd661b8cce8d5004ef7dd

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

AltCTRL is an all-in-one cryptocurrency platform that helps investors make more informed decisions and maximize their returns. We offer low-fee trades, high-yield farms, exclusive airdrops, and essential DYOR tools.

Validator Index Block Amount
View All Withdrawals

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

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