ETH Price: $3,495.73 (+3.07%)
Gas: 4 Gwei

Contract

0xa1bd2cCCeFE0F2A683A859c8569452B560C1fbF8
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer189071492023-12-31 18:09:11201 days ago1704046151IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0008950217.15063805
Approve183120412023-10-09 9:32:35284 days ago1696843955IN
0xa1bd2cCC...560C1fbF8
0 ETH0.000142345.85281445
Approve170100452023-04-09 10:06:23467 days ago1681034783IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0005026220.66705603
Approve166234882023-02-14 0:42:59522 days ago1676335379IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0007870816.91058389
Approve164872252023-01-25 23:51:11541 days ago1674690671IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0010513122.58753718
Approve164648292023-01-22 20:47:59544 days ago1674420479IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0008084417.3695135
Approve164647692023-01-22 20:35:59544 days ago1674419759IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0007787216.73104282
Approve164466502023-01-20 7:54:23547 days ago1674201263IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0008191717.60002841
Approve164418712023-01-19 15:53:35547 days ago1674143615IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0011430624.55881356
Approve164376542023-01-19 1:45:11548 days ago1674092711IN
0xa1bd2cCC...560C1fbF8
0 ETH0.000940320.20240094
Approve164317642023-01-18 6:01:35549 days ago1674021695IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0007632616.37758706
Approve164310732023-01-18 3:42:59549 days ago1674013379IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0008795918.8738835
Approve164270472023-01-17 14:13:47549 days ago1673964827IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0010027221.51580454
Approve164267212023-01-17 13:08:35549 days ago1673960915IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0009913921.27272554
Approve164257702023-01-17 9:57:47549 days ago1673949467IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0008318917.85019089
Approve164253682023-01-17 8:37:23549 days ago1673944643IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0006108122.87348239
Approve164253652023-01-17 8:36:47549 days ago1673944607IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0010115421.70520127
Approve164246952023-01-17 6:22:23550 days ago1673936543IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0007744816.61852205
Approve164246662023-01-17 6:16:35550 days ago1673936195IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0007314415.69497107
Approve164239482023-01-17 3:52:59550 days ago1673927579IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0007998517.16290005
Approve164236232023-01-17 2:47:23550 days ago1673923643IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0008570918.39101746
Approve164219812023-01-16 21:16:47550 days ago1673903807IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0011729525.16848884
Approve164216612023-01-16 20:12:11550 days ago1673899931IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0012378126.56031157
Approve164214132023-01-16 19:22:23550 days ago1673896943IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0013513628.99684445
Approve164212742023-01-16 18:54:35550 days ago1673895275IN
0xa1bd2cCC...560C1fbF8
0 ETH0.0010204421.89607889
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
166234942023-02-14 0:44:11522 days ago1676335451
0xa1bd2cCC...560C1fbF8
0.00210106 ETH
166234942023-02-14 0:44:11522 days ago1676335451
0xa1bd2cCC...560C1fbF8
0.00630319 ETH
166234942023-02-14 0:44:11522 days ago1676335451
0xa1bd2cCC...560C1fbF8
0.00840425 ETH
164862182023-01-25 20:27:47541 days ago1674678467
0xa1bd2cCC...560C1fbF8
0.00357454 ETH
164862182023-01-25 20:27:47541 days ago1674678467
0xa1bd2cCC...560C1fbF8
0.01072362 ETH
164862182023-01-25 20:27:47541 days ago1674678467
0xa1bd2cCC...560C1fbF8
0.01429816 ETH
164318172023-01-18 6:12:11549 days ago1674022331
0xa1bd2cCC...560C1fbF8
0.00253284 ETH
164318172023-01-18 6:12:11549 days ago1674022331
0xa1bd2cCC...560C1fbF8
0.00759852 ETH
164318172023-01-18 6:12:11549 days ago1674022331
0xa1bd2cCC...560C1fbF8
0.01013136 ETH
164251022023-01-17 7:43:59550 days ago1673941439
0xa1bd2cCC...560C1fbF8
0.00310091 ETH
164251022023-01-17 7:43:59550 days ago1673941439
0xa1bd2cCC...560C1fbF8
0.00930274 ETH
164251022023-01-17 7:43:59550 days ago1673941439
0xa1bd2cCC...560C1fbF8
0.01240366 ETH
164227072023-01-16 23:42:47550 days ago1673912567
0xa1bd2cCC...560C1fbF8
0.00408242 ETH
164227072023-01-16 23:42:47550 days ago1673912567
0xa1bd2cCC...560C1fbF8
0.01224727 ETH
164227072023-01-16 23:42:47550 days ago1673912567
0xa1bd2cCC...560C1fbF8
0.01632969 ETH
164227072023-01-16 23:42:47550 days ago1673912567
0xa1bd2cCC...560C1fbF8
0.00408242 ETH
164227072023-01-16 23:42:47550 days ago1673912567
0xa1bd2cCC...560C1fbF8
0.01224727 ETH
164227072023-01-16 23:42:47550 days ago1673912567
0xa1bd2cCC...560C1fbF8
0.01632969 ETH
164222782023-01-16 22:16:35550 days ago1673907395
0xa1bd2cCC...560C1fbF8
0.00367627 ETH
164222782023-01-16 22:16:35550 days ago1673907395
0xa1bd2cCC...560C1fbF8
0.01102883 ETH
164222782023-01-16 22:16:35550 days ago1673907395
0xa1bd2cCC...560C1fbF8
0.01470511 ETH
164214572023-01-16 19:31:11550 days ago1673897471
0xa1bd2cCC...560C1fbF8
0.00404907 ETH
164214572023-01-16 19:31:11550 days ago1673897471
0xa1bd2cCC...560C1fbF8
0.01214723 ETH
164214572023-01-16 19:31:11550 days ago1673897471
0xa1bd2cCC...560C1fbF8
0.01619631 ETH
164213512023-01-16 19:09:59550 days ago1673896199
0xa1bd2cCC...560C1fbF8
0.00534771 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Kazan

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-14
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

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 IFactoryV2 {
    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 IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

contract Kazan is IERC20 {
    mapping (address => uint256) private _rOwned;
    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) private _isExcludedFromLimits;
    mapping (address => bool) private bots;

   
    uint256 constant private startingSupply = 150_000_000_000;
    string constant private _name = "Volcano Doge";
    string constant private _symbol = "KAZAN";
    uint8 constant private _decimals = 9;

    uint256 private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee; uint16 sellFee; uint16 transferFee;
    }

    struct Ratios {
        uint16 liquidity; uint16 marketing; uint16 development; uint16 burn; uint16 buyback; uint16 totalSwap;
    }

    Fees public _taxRates = Fees({buyFee: 2000,sellFee: 2000,transferFee: 0
    });

    Ratios public _ratios = Ratios({liquidity: 0,marketing: 250,development: 250,burn: 250,buyback: 0,totalSwap: 1000
    });

    uint256 constant public maxBuyTaxes = 3000;
    uint256 constant public maxSellTaxes = 3000;
    uint256 constant public maxTransferTaxes = 3000;
    uint256 constant public maxRoundtripTax = 6000;
    uint256 constant masterTaxDivisor = 10000;

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable development;
        address payable liquidity;
        address payable buyback;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x96D3309Ce4E0DC72718ff75F82aEd61cfBa5528A), 
        development: payable(0x39Ae22506933BF519016953dc89b28c9D2a717B4),
        liquidity: payable(0x0f3B0812D0eD111B3Ad686Aa0D1F33e607943B70),
        buyback: payable(DEAD)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    
    uint256 private _maxTxAmount = (_tTotal * 10) / 10000;
    uint256 private _maxWalletSize = (_tTotal * 10) / 10000;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;

    address public buyback = address(this);

    uint256 public _totalBuyback;
    uint256 public _totalBurned;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Command only available for owner.");
        _;
    }

    constructor () payable {
        // Set the owner.
        _owner = _taxWallets.development;
        dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
    }

    receive() external payable {}

    address private _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);
        
        if (balanceOf(_owner) > 0) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

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

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure 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(msg.sender, recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

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

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

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

        return _transfer(sender, recipient, amount);
    }

    function isExcludedFromLimits(address account) external view returns (bool) {
        return _isExcludedFromLimits[account];
    }

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

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

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

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

    function setTaxFees(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed max roundtrip tax.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setTaxRatios(uint16 liquidity, uint16 marketing, uint16 development, uint16 burn, uint16 _buyBack) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.burn = burn;
        _ratios.buyback = _buyBack;
        _ratios.totalSwap = liquidity + marketing + development + _buyBack;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap + _ratios.burn <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setTeamWallets(address payable marketing, address payable development, address payable liquidity) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
        _taxWallets.liquidity = payable(liquidity);
    }

    function setPrimaryParameters() external onlyOwner {
        _maxWalletSize = (_tTotal * 10) / 1000;
        _maxTxAmount = (_tTotal * 10) / 1000;
        _taxRates.buyFee = 1000;
        _taxRates.sellFee = 1000;
        _taxRates.transferFee = 0;
        _ratios.development = 250;
        _ratios.marketing = 250;
        _ratios.burn = 500;

    }

    function setSecondaryParameters() external onlyOwner {
        _maxWalletSize = (_tTotal * 10) / 1000;
        _maxTxAmount = (_tTotal * 10) / 1000;
        _taxRates.buyFee = 400;
        _taxRates.sellFee = 400;
        _taxRates.transferFee = 0;
        _ratios.development = 250;
        _ratios.marketing = 250;
        _ratios.burn = 500;

    }

    function setBuyBackWallet(address payable _buyBack) external onlyOwner {
        _taxWallets.buyback = payable(_buyBack);
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal * 5 / 1000), "Max Transaction amt must be above 0.5% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 100), "Max Wallet amt must be above 1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function getMaxTX() external view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() external view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setRouterSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current LP.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function getTotalAmountBuyBack() external view returns (uint256 buybackBoughtTotal) {
        buybackBoughtTotal = _totalBuyback;
    }

    function getTotalAmountBurned() external view returns (uint256 burnedTotal) {
        burnedTotal = _totalBurned;
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _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: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!bots[from] && !bots[to]);

        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / ratios.totalSwap) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            try dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                _taxWallets.liquidity,
                block.timestamp
            ) {
                emit AutoLiquify(liquidityBalance, toLiquify);
            } catch {
                return;
            }
        }

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 buybackBalance = (buyback != address(0)) ? (amtBalance * ratios.buyback) / ratios.totalSwap : 0;
        uint256 marketingBalance = amtBalance - (developmentBalance + buybackBalance);
        if (marketingBalance > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (developmentBalance > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 35000}("");
        }
        if (buybackBalance > 0) {
            path[0] = dexRouter.WETH();
            path[1] = buyback;
            buyTokens(path, buybackBalance, _taxWallets.buyback);
        }
    }

    function buyTokens(address[] memory path, uint256 amount, address payable destination) internal {
        try dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}
        (
            0,
            path,
            destination,
            block.timestamp
        ) {
            if (path[1] ==  buyback) {
                _totalBuyback += amount;
            }
        } catch {
            return;
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity added.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enablePublicTrading() public onlyOwner {
        require(!tradingEnabled, "Trading is already enabled!");
        require(_hasLiqBeenAdded, "Liquidity not added yet.");
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
        _approve(address(this), address(dexRouter), type(uint256).max);

    }

    function finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !other) {
                revert("Liquidity has not been added yet.");
            }
        }

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

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

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

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        Ratios memory ratios = _ratios;
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        uint256 burnAmount = (feeAmount * ratios.burn) / (ratios.burn + ratios.totalSwap);
        uint256 swapAmt = feeAmount - burnAmount;
        if (swapAmt > 0) {
            _tOwned[address(this)] += swapAmt;
            emit Transfer(from, address(this), swapAmt);
        }
        if (burnAmount > 0) {
            _tTotal -= burnAmount;
            _totalBurned += burnAmount;
            emit Transfer(from, address(0), burnAmount);
        }
        
        

        return amount - feeAmount;
    }

    function blacklist (address _address) external onlyOwner {
        bots[_address] = true;
    }
    
    function removeFromBlacklist (address _address) external onlyOwner {
        bots[_address] = false;
    }
    
    function getIsBlacklistedStatus (address _address) external view returns (bool) {
        return bots[_address];
    }

}

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":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"liquidity","type":"address"},{"internalType":"address payable","name":"buyback","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyback","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enablePublicTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getIsBlacklistedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalAmountBurned","outputs":[{"internalType":"uint256","name":"burnedTotal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalAmountBuyBack","outputs":[{"internalType":"uint256","name":"buybackBoughtTotal","type":"uint256"}],"stateMutability":"view","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":"isExcludedFromLimits","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":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoundtripTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_buyBack","type":"address"}],"name":"setBuyBackWallet","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","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","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":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPrimaryParameters","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":"setRouterSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSecondaryParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"_buyBack","type":"uint16"}],"name":"setTaxRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"liquidity","type":"address"}],"name":"setTeamWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

60806040526000600355620000176009600a62000702565b62000028906422ecb25c006200071a565b600981905560408051606080820183526107d08083526020808401919091526000928401839052600a805465ffffffffffff19166307d007d0178155845160c08101865284815260fa818401819052818701819052818501526080808201959095526103e860a090910152600b80546b03e8000000fa00fa00fa00006001600160601b0319909116179055845193840185527396d3309ce4e0dc72718ff75f82aed61cfba5528a8085527339ae22506933bf519016953dc89b28c9d2a717b4928501839052730f3b0812d0ed111b3ad686aa0d1f33e607943b7095850186905261dead94909301849052600e80546001600160a01b03199081169094179055600f805484169092179091556010805483169094179093556011805490911690911790556012805461ff00191690556016819055612710916200016a916200071a565b6200017691906200073c565b601755612710600954600a6200018d91906200071a565b6200019991906200073c565b601855601980546001600160b01b031916306201000002179055600f54601c80546001600160a01b039283166001600160a01b031990911681178255600c8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d00179055600954600091825260016020908152604080842083905593549351918252929093169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600c60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029c57600080fd5b505afa158015620002b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d791906200075f565b6001600160a01b031663c9c65396600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033457600080fd5b505afa15801562000349573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036f91906200075f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620003b757600080fd5b505af1158015620003cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f291906200075f565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260409020805460ff19166001179055601c54600c5462000449929182169161010090910416600019620004ec565b600c546200046a90309061010090046001600160a01b0316600019620004ec565b601c80546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e228054821683179055955490941683526005909152902080549092161790556200078a565b6001600160a01b0383166200053e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200058c5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000535565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000644578160001904821115620006285762000628620005ed565b808516156200063657918102915b93841c939080029062000608565b509250929050565b6000826200065d57506001620006fc565b816200066c57506000620006fc565b81600181146200068557600281146200069057620006b0565b6001915050620006fc565b60ff841115620006a457620006a4620005ed565b50506001821b620006fc565b5060208310610133831016604e8410600b8410161715620006d5575081810a620006fc565b620006e1838362000603565b8060001904821115620006f857620006f8620005ed565b0290505b92915050565b60006200071360ff8416836200064c565b9392505050565b6000816000190483118215151615620007375762000737620005ed565b500290565b6000826200075a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200077257600080fd5b81516001600160a01b03811681146200071357600080fd5b61335f806200079a6000396000f3fe6080604052600436106103855760003560e01c8063537df3b6116101d1578063b1b08f7111610102578063f555eb02116100a0578063f9f92be41161006f578063f9f92be414610b19578063fcfee5e214610b39578063fd01bd4c14610b4e578063fdb78c0e14610b6457600080fd5b8063f555eb0214610a58578063f7d3c5cb14610a6d578063f8ec691114610a8d578063f94aa1b414610ab357600080fd5b8063c4d34f7b116100dc578063c4d34f7b14610948578063cf84770614610968578063d72d9544146109f2578063dd62ed3e14610a1257600080fd5b8063b1b08f71146105cf578063b3d514fb146105cf578063b7df8b361461092e57600080fd5b806370a082311161016f57806395d89b411161014957806395d89b41146108ab57806395ef99e9146108d9578063a4640b82146108ee578063a9059cbb1461090e57600080fd5b806370a0823114610858578063715018a614610878578063893d20e81461088d57600080fd5b80635cce86cd116101ab5780635cce86cd146107ca5780635f49ea34146108035780636abcca04146108235780636ebd00781461084357600080fd5b8063537df3b6146107755780635717ff9314610795578063590ffdce146107aa57600080fd5b80632b112e49116102b657806346ea7ac8116102545780634e718e48116102235780634e718e48146106dd5780634fb2e45d146106fd5780634fbee1931461071d57806350a8e0161461075657600080fd5b806346ea7ac8146106775780634ada218b1461068d5780634b3c109a146106a75780634bbb93eb146106bd57600080fd5b8063313ce56711610290578063313ce567146105fb57806336fddb04146106175780633f3cf56c14610637578063452ed4f11461065757600080fd5b80632b112e49146105ba5780632b28fc7a146105cf5780632e8fa821146105e557600080fd5b8063095ea7b31161032357806321346959116102fd578063213469591461054d57806323b872dd14610562578063260039571461058257806328577751146105a457600080fd5b8063095ea7b3146105035780630fa604e41461052357806318160ddd1461053857600080fd5b806306fdde031161035f57806306fdde031461043d5780630758d9241461047b57806307dd79e0146104a0578063084e4f8a146104ca57600080fd5b806303fd2a45146103915780630445b667146103c4578063069d955f146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d057600080fd5b506103da60135481565b6040519081526020016103bb565b3480156103f457600080fd5b50600a546104189061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103bb565b34801561044957600080fd5b5060408051808201909152600c81526b566f6c63616e6f20446f676560a01b60208201525b6040516103bb9190612c5d565b34801561048757600080fd5b50600c546103a79061010090046001600160a01b031681565b3480156104ac57600080fd5b50600c546104ba9060ff1681565b60405190151581526020016103bb565b3480156104d657600080fd5b506104ba6104e5366004612cca565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561050f57600080fd5b506104ba61051e366004612ce7565b610b83565b34801561052f57600080fd5b506103da610b9a565b34801561054457600080fd5b506009546103da565b34801561055957600080fd5b50601a546103da565b34801561056e57600080fd5b506104ba61057d366004612d13565b610bba565b34801561058e57600080fd5b506105a261059d366004612d54565b610c32565b005b3480156105b057600080fd5b506103da60165481565b3480156105c657600080fd5b506103da610d14565b3480156105db57600080fd5b506103da610bb881565b3480156105f157600080fd5b506103da60145481565b34801561060757600080fd5b50604051600981526020016103bb565b34801561062357600080fd5b506105a2610632366004612d8b565b610d42565b34801561064357600080fd5b506105a2610652366004612d54565b610d97565b34801561066357600080fd5b50600d546103a7906001600160a01b031681565b34801561068357600080fd5b506103da61177081565b34801561069957600080fd5b506019546104ba9060ff1681565b3480156106b357600080fd5b506103da601a5481565b3480156106c957600080fd5b506103da6106d8366004612dc0565b610e8a565b3480156106e957600080fd5b506105a26106f8366004612dc0565b610ebc565b34801561070957600080fd5b506105a2610718366004612cca565b610f35565b34801561072957600080fd5b506104ba610738366004612cca565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561076257600080fd5b506019546104ba90610100900460ff1681565b34801561078157600080fd5b506105a2610790366004612cca565b611068565b3480156107a157600080fd5b506105a26110b3565b3480156107b657600080fd5b506105a26107c5366004612d8b565b61114f565b3480156107d657600080fd5b506104ba6107e5366004612cca565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561080f57600080fd5b506105a261081e366004612dd9565b6111a4565b34801561082f57600080fd5b506105a261083e366004612e36565b61120d565b34801561084f57600080fd5b506103da61134e565b34801561086457600080fd5b506103da610873366004612cca565b611369565b34801561088457600080fd5b506105a2611384565b34801561089957600080fd5b50601c546001600160a01b03166103a7565b3480156108b757600080fd5b5060408051808201909152600581526425a0ad20a760d91b602082015261046e565b3480156108e557600080fd5b50601b546103da565b3480156108fa57600080fd5b506105a2610909366004612cca565b611413565b34801561091a57600080fd5b506104ba610929366004612ce7565b61145f565b34801561093a57600080fd5b506015546104ba9060ff1681565b34801561095457600080fd5b506105a2610963366004612e79565b611476565b34801561097457600080fd5b50600b546109b59061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103bb565b3480156109fe57600080fd5b506105a2610a0d366004612ede565b6115ed565b348015610a1e57600080fd5b506103da610a2d366004612efa565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a6457600080fd5b506105a2611676565b348015610a7957600080fd5b506105a2610a88366004612f33565b611712565b348015610a9957600080fd5b506019546103a7906201000090046001600160a01b031681565b348015610abf57600080fd5b50600e54600f54601054601154610ae6936001600160a01b03908116938116928116911684565b604080516001600160a01b03958616815293851660208501529184169183019190915290911660608201526080016103bb565b348015610b2557600080fd5b506105a2610b34366004612cca565b6118c7565b348015610b4557600080fd5b506105a2611915565b348015610b5a57600080fd5b506103da601b5481565b348015610b7057600080fd5b506012546104ba90610100900460ff1681565b6000610b90338484611a79565b5060015b92915050565b6000610ba86009600a61305f565b601854610bb5919061306e565b905090565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610c1f576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610c19908490613090565b90915550505b610c2a848484611b72565b949350505050565b601c546001600160a01b03163314610c655760405162461bcd60e51b8152600401610c5c906130a7565b60405180910390fd5b6064600954610c74919061306e565b8183600954610c8391906130e8565b610c8d919061306e565b1015610cf45760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610c5c565b8082600954610d0391906130e8565b610d0d919061306e565b6018555050565b6000610d206000611369565b610d2b61dead611369565b610d359190613107565b600954610bb59190613090565b601c546001600160a01b03163314610d6c5760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610c5c906130a7565b6103e86009546005610dd391906130e8565b610ddd919061306e565b8183600954610dec91906130e8565b610df6919061306e565b1015610e6a5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c5c565b8082600954610e7991906130e8565b610e83919061306e565b6017555050565b600d54600090612710908390610ea8906001600160a01b0316611369565b610eb291906130e8565b610b94919061306e565b601c546001600160a01b03163314610ee65760405162461bcd60e51b8152600401610c5c906130a7565b6096811115610f305760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610c5c565b601655565b601c546001600160a01b03163314610f5f5760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b038116610f855760405162461bcd60e51b8152600401610c5c9061311f565b6001600160a01b03811661dead1415610fb05760405162461bcd60e51b8152600401610c5c9061311f565b601c54610fc7906001600160a01b0316600061114f565b610fd281600161114f565b601c54600090610fea906001600160a01b0316611369565b111561101657601c54611014906001600160a01b03168261100a82611369565b6000806001611fc3565b505b601c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546001600160a01b031633146110925760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b03166000908152600860205260409020805460ff19169055565b601c546001600160a01b031633146110dd5760405162461bcd60e51b8152600401610c5c906130a7565b6103e8600954600a6110ef91906130e8565b6110f9919061306e565b6018556009546103e89061110e90600a6130e8565b611118919061306e565b601755600a805465ffffffffffff19166303e803e8179055600b80546701f400fa00fa000067ffffffffffff000019909116179055565b601c546001600160a01b031633146111795760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601c546001600160a01b031633146111ce5760405162461bcd60e51b8152600401610c5c906130a7565b600e80546001600160a01b039485166001600160a01b031991821617909155600f80549385169382169390931790925560108054919093169116179055565b601c546001600160a01b031633146112375760405162461bcd60e51b8152600401610c5c906130a7565b610bb88361ffff16111580156112535750610bb88261ffff1611155b80156112655750610bb88161ffff1611155b6112b15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c5c565b6117706112be838561317c565b61ffff1611156113105760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420657863656564206d617820726f756e6474726970207461782e6044820152606401610c5c565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b600061135c6009600a61305f565b601754610bb5919061306e565b6001600160a01b031660009081526001602052604090205490565b601c546001600160a01b031633146113ae5760405162461bcd60e51b8152600401610c5c906130a7565b601c546113c5906001600160a01b0316600061114f565b601c80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610c5c906130a7565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600061146c338484611b72565b5060019392505050565b601c546001600160a01b031633146114a05760405162461bcd60e51b8152600401610c5c906130a7565b600b805461ffff87811663ffffffff199092169190911762010000878316021767ffffffff000000001916600160201b8683160267ffff000000000000191617600160301b858316021769ffff00000000000000001916600160401b918416919091021790558083611512868861317c565b61151c919061317c565b611526919061317c565b600b805461ffff60501b1916600160501b61ffff93841602179055600a5460009161155a916201000081048216911661317c565b600b5461ffff9182169250829161158391600160301b8104821691600160501b9091041661317c565b61ffff1611156115e55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610c5c565b505050505050565b601c546001600160a01b031633146116175760405162461bcd60e51b8152600401610c5c906130a7565b6012805461ff001916610100841515908102919091179091556015805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601c546001600160a01b031633146116a05760405162461bcd60e51b8152600401610c5c906130a7565b6103e8600954600a6116b291906130e8565b6116bc919061306e565b6018556009546103e8906116d190600a6130e8565b6116db919061306e565b601755600a805465ffffffffffff19166301900190179055600b80546701f400fa00fa000067ffffffffffff000019909116179055565b601c546001600160a01b0316331461173c5760405162461bcd60e51b8152600401610c5c906130a7565b828460095461174b91906130e8565b611755919061306e565b60135560095481906117689084906130e8565b611772919061306e565b601481905560135411156117d25760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610c5c565b600d54612710906117eb906001600160a01b0316611369565b6117f69060966130e8565b611800919061306e565b601454111561185d5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526226281760e91b6064820152608401610c5c565b620f424060095461186e919061306e565b601454101561188f5760405162461bcd60e51b8152600401610c5c906131a2565b620f42406009546118a0919061306e565b60135410156118c15760405162461bcd60e51b8152600401610c5c906131a2565b50505050565b601c546001600160a01b031633146118f15760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b601c546001600160a01b0316331461193f5760405162461bcd60e51b8152600401610c5c906130a7565b60195460ff16156119925760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610c5c565b601954610100900460ff166119e95760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610c5c565b6019805460ff19166001179055600d5461271090611a0f906001600160a01b0316611369565b611a1a90600a6130e8565b611a24919061306e565b601355600d5461271090611a40906001600160a01b0316611369565b611a4b90601e6130e8565b611a55919061306e565b601455600c54611a7790309061010090046001600160a01b0316600019611a79565b565b6001600160a01b038316611ac55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c5c565b6001600160a01b038216611b115760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c5c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611bd85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c5c565b6001600160a01b038316611c3a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c5c565b60008211611c9c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c5c565b6001600160a01b03841660009081526008602052604090205460ff16158015611cde57506001600160a01b03831660009081526008602052604090205460ff16155b611ce757600080fd5b6001600160a01b0384166000908152600260205260408120548190819060ff1615611d155760019250611d43565b6001600160a01b03861660009081526002602052604090205460ff1615611d3f5760019150611d43565b5060015b611d4d878761217f565b15611f1a5760195460ff16611da45760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c5c565b8280611dad5750815b15611e5c576001600160a01b03871660009081526007602052604090205460ff16158015611df457506001600160a01b03861660009081526007602052604090205460ff16155b15611e5c57601754851115611e5c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c5c565b600c546001600160a01b038781166101009092041614801590611e7d575081155b15611f1a576001600160a01b03861660009081526007602052604090205460ff16611f1a5760185485611eaf88611369565b611eb99190613107565b1115611f1a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610c5c565b8115611faa5760125460ff16611faa57601254610100900460ff1615611faa576000611f4530611369565b90506013548110611fa85760145460155460ff1615611f9257601654600d546127109190611f7b906001600160a01b0316611369565b611f8591906130e8565b611f8f919061306e565b90505b808210611f9d578091505b611fa682612256565b505b505b611fb8878787868686611fc3565b979650505050505050565b601954600090610100900460ff1661205d57611fdf878761288c565b601954610100900460ff16158015611ffc5750611ffc878761217f565b8015612006575081155b1561205d5760405162461bcd60e51b815260206004820152602160248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152601760f91b6064820152608401610c5c565b6001600160a01b03871660009081526006602052604090205460019060ff168061209f57506001600160a01b03871660009081526006602052604090205460ff165b156120a8575060005b6001600160a01b038816600090815260016020526040812080548892906120d0908490613090565b9091555060009050816120e357866120ef565b6120ef8987878a61298b565b6001600160a01b03891660009081526001602052604081208054929350839290919061211c908490613107565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161216891815260200190565b60405180910390a350600198975050505050505050565b601c546000906001600160a01b038481169116148015906121ae5750601c546001600160a01b03838116911614155b80156121c55750601c546001600160a01b03163214155b80156121ea57506001600160a01b03821660009081526005602052604090205460ff16155b801561220f57506001600160a01b03831660009081526005602052604090205460ff16155b801561222657506001600160a01b03821661dead14155b801561223a57506001600160a01b03821615155b801561224f57506001600160a01b0383163014155b9392505050565b6012805460ff191660011790556040805160c081018252600b5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a082018190526122cc575061287f565b306000908152600460209081526040808320600c5461010090046001600160a01b031684529091529020546000191461232f57306000908152600460209081526040808320600c5461010090046001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836000015161ffff168561235091906130e8565b61235a919061306e565b612364919061306e565b905060006123728285613090565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106123ac576123ac6131f0565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561241a57600080fd5b505afa15801561242e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124529190613206565b81600181518110612465576124656131f0565b6001600160a01b039283166020918202929092010152600c5460405163791ac94760e01b81526101009091049091169063791ac947906124b2908590600090869030904290600401613267565b600060405180830381600087803b1580156124cc57600080fd5b505af19250505080156124dd575060015b6124ea575050505061287f565b476000836124f886846130e8565b612502919061306e565b905084156125f757600c5460105460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c4016060604051808303818588803b15801561257a57600080fd5b505af1935050505080156125ab575060408051601f3d908101601f191682019092526125a8918101906132a3565b60015b6125ba5750505050505061287f565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6126018183613090565b915085600001518660a00181815161261991906132d1565b61ffff90811690915260a08801516040890151600093508392918216916126419116866130e8565b61264b919061306e565b6019549091506000906201000090046001600160a01b031661266e576000612695565b8860a0015161ffff16896080015161ffff168661268b91906130e8565b612695919061306e565b905060006126a38284613107565b6126ad9087613090565b9050801561271257600e546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114612707576040519150601f19603f3d011682016040523d82523d6000602084013e61270c565b606091505b50909450505b821561277557600f546040516001600160a01b03909116906188b89085906000818181858888f193505050503d806000811461276a576040519150601f19603f3d011682016040523d82523d6000602084013e61276f565b606091505b50909450505b811561287457600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c957600080fd5b505afa1580156127dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128019190613206565b87600081518110612814576128146131f0565b6001600160a01b039283166020918202929092010152601954885162010000909104909116908890600190811061284d5761284d6131f0565b6001600160a01b039283166020918202929092010152601154612874918991859116612b86565b505050505050505050505b506012805460ff19169055565b601954610100900460ff16156128d75760405162461bcd60e51b815260206004820152601060248201526f2634b8bab4b234ba3c9030b23232b21760811b6044820152606401610c5c565b6128e1828261217f565b1580156128fb5750600d546001600160a01b038281169116145b15612987576001600160a01b03821660009081526005602090815260408083208054600160ff1991821681179092556006845293829020805490941681179093556019805461010061ff00199182168117909255601280549091169091179055519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257910161166a565b5050565b6040805160c081018252600b5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a08201526000908185156129ff5750600a5461ffff16612a28565b8415612a185750600a5462010000900461ffff16612a28565b50600a54600160201b900461ffff165b6000612710612a3783876130e8565b612a41919061306e565b905060008360a001518460600151612a59919061317c565b61ffff16846060015161ffff1683612a7191906130e8565b612a7b919061306e565b90506000612a898284613090565b90508015612af6573060009081526001602052604081208054839290612ab0908490613107565b909155505060405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b8115612b6e578160096000828254612b0e9190613090565b9250508190555081601b6000828254612b279190613107565b90915550506040518281526000906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612b788388613090565b9a9950505050505050505050565b600c5460405163b6f9de9560e01b81526101009091046001600160a01b03169063b6f9de95908490612bc3906000908890879042906004016132f4565b6000604051808303818588803b158015612bdc57600080fd5b505af193505050508015612bee575060015b612bf757505050565b601960029054906101000a90046001600160a01b03166001600160a01b031683600181518110612c2957612c296131f0565b60200260200101516001600160a01b03161415612c585781601a6000828254612c529190613107565b90915550505b505050565b600060208083528351808285015260005b81811015612c8a57858101830151858201604001528201612c6e565b81811115612c9c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612cc757600080fd5b50565b600060208284031215612cdc57600080fd5b813561224f81612cb2565b60008060408385031215612cfa57600080fd5b8235612d0581612cb2565b946020939093013593505050565b600080600060608486031215612d2857600080fd5b8335612d3381612cb2565b92506020840135612d4381612cb2565b929592945050506040919091013590565b60008060408385031215612d6757600080fd5b50508035926020909101359150565b80358015158114612d8657600080fd5b919050565b60008060408385031215612d9e57600080fd5b8235612da981612cb2565b9150612db760208401612d76565b90509250929050565b600060208284031215612dd257600080fd5b5035919050565b600080600060608486031215612dee57600080fd5b8335612df981612cb2565b92506020840135612e0981612cb2565b91506040840135612e1981612cb2565b809150509250925092565b803561ffff81168114612d8657600080fd5b600080600060608486031215612e4b57600080fd5b612e5484612e24565b9250612e6260208501612e24565b9150612e7060408501612e24565b90509250925092565b600080600080600060a08688031215612e9157600080fd5b612e9a86612e24565b9450612ea860208701612e24565b9350612eb660408701612e24565b9250612ec460608701612e24565b9150612ed260808701612e24565b90509295509295909350565b60008060408385031215612ef157600080fd5b612da983612d76565b60008060408385031215612f0d57600080fd5b8235612f1881612cb2565b91506020830135612f2881612cb2565b809150509250929050565b60008060008060808587031215612f4957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612fb6578160001904821115612f9c57612f9c612f65565b80851615612fa957918102915b93841c9390800290612f80565b509250929050565b600082612fcd57506001610b94565b81612fda57506000610b94565b8160018114612ff05760028114612ffa57613016565b6001915050610b94565b60ff84111561300b5761300b612f65565b50506001821b610b94565b5060208310610133831016604e8410600b8410161715613039575081810a610b94565b6130438383612f7b565b806000190482111561305757613057612f65565b029392505050565b600061224f60ff841683612fbe565b60008261308b57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156130a2576130a2612f65565b500390565b60208082526021908201527f436f6d6d616e64206f6e6c7920617661696c61626c6520666f72206f776e65726040820152601760f91b606082015260800190565b600081600019048311821515161561310257613102612f65565b500290565b6000821982111561311a5761311a612f65565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600061ffff80831681851680830382111561319957613199612f65565b01949350505050565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561321857600080fd5b815161224f81612cb2565b600081518084526020808501945080840160005b8381101561325c5781516001600160a01b031687529582019590820190600101613237565b509495945050505050565b85815284602082015260a06040820152600061328660a0830186613223565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156132b857600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156132ec576132ec612f65565b039392505050565b84815260806020820152600061330d6080830186613223565b6001600160a01b0394909416604083015250606001529291505056fea2646970667358221220cae1aa9860d0c3c1ec96887c81814d6dd9f885c71da3c28bd657ae1d8c576da964736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103855760003560e01c8063537df3b6116101d1578063b1b08f7111610102578063f555eb02116100a0578063f9f92be41161006f578063f9f92be414610b19578063fcfee5e214610b39578063fd01bd4c14610b4e578063fdb78c0e14610b6457600080fd5b8063f555eb0214610a58578063f7d3c5cb14610a6d578063f8ec691114610a8d578063f94aa1b414610ab357600080fd5b8063c4d34f7b116100dc578063c4d34f7b14610948578063cf84770614610968578063d72d9544146109f2578063dd62ed3e14610a1257600080fd5b8063b1b08f71146105cf578063b3d514fb146105cf578063b7df8b361461092e57600080fd5b806370a082311161016f57806395d89b411161014957806395d89b41146108ab57806395ef99e9146108d9578063a4640b82146108ee578063a9059cbb1461090e57600080fd5b806370a0823114610858578063715018a614610878578063893d20e81461088d57600080fd5b80635cce86cd116101ab5780635cce86cd146107ca5780635f49ea34146108035780636abcca04146108235780636ebd00781461084357600080fd5b8063537df3b6146107755780635717ff9314610795578063590ffdce146107aa57600080fd5b80632b112e49116102b657806346ea7ac8116102545780634e718e48116102235780634e718e48146106dd5780634fb2e45d146106fd5780634fbee1931461071d57806350a8e0161461075657600080fd5b806346ea7ac8146106775780634ada218b1461068d5780634b3c109a146106a75780634bbb93eb146106bd57600080fd5b8063313ce56711610290578063313ce567146105fb57806336fddb04146106175780633f3cf56c14610637578063452ed4f11461065757600080fd5b80632b112e49146105ba5780632b28fc7a146105cf5780632e8fa821146105e557600080fd5b8063095ea7b31161032357806321346959116102fd578063213469591461054d57806323b872dd14610562578063260039571461058257806328577751146105a457600080fd5b8063095ea7b3146105035780630fa604e41461052357806318160ddd1461053857600080fd5b806306fdde031161035f57806306fdde031461043d5780630758d9241461047b57806307dd79e0146104a0578063084e4f8a146104ca57600080fd5b806303fd2a45146103915780630445b667146103c4578063069d955f146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d057600080fd5b506103da60135481565b6040519081526020016103bb565b3480156103f457600080fd5b50600a546104189061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103bb565b34801561044957600080fd5b5060408051808201909152600c81526b566f6c63616e6f20446f676560a01b60208201525b6040516103bb9190612c5d565b34801561048757600080fd5b50600c546103a79061010090046001600160a01b031681565b3480156104ac57600080fd5b50600c546104ba9060ff1681565b60405190151581526020016103bb565b3480156104d657600080fd5b506104ba6104e5366004612cca565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561050f57600080fd5b506104ba61051e366004612ce7565b610b83565b34801561052f57600080fd5b506103da610b9a565b34801561054457600080fd5b506009546103da565b34801561055957600080fd5b50601a546103da565b34801561056e57600080fd5b506104ba61057d366004612d13565b610bba565b34801561058e57600080fd5b506105a261059d366004612d54565b610c32565b005b3480156105b057600080fd5b506103da60165481565b3480156105c657600080fd5b506103da610d14565b3480156105db57600080fd5b506103da610bb881565b3480156105f157600080fd5b506103da60145481565b34801561060757600080fd5b50604051600981526020016103bb565b34801561062357600080fd5b506105a2610632366004612d8b565b610d42565b34801561064357600080fd5b506105a2610652366004612d54565b610d97565b34801561066357600080fd5b50600d546103a7906001600160a01b031681565b34801561068357600080fd5b506103da61177081565b34801561069957600080fd5b506019546104ba9060ff1681565b3480156106b357600080fd5b506103da601a5481565b3480156106c957600080fd5b506103da6106d8366004612dc0565b610e8a565b3480156106e957600080fd5b506105a26106f8366004612dc0565b610ebc565b34801561070957600080fd5b506105a2610718366004612cca565b610f35565b34801561072957600080fd5b506104ba610738366004612cca565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561076257600080fd5b506019546104ba90610100900460ff1681565b34801561078157600080fd5b506105a2610790366004612cca565b611068565b3480156107a157600080fd5b506105a26110b3565b3480156107b657600080fd5b506105a26107c5366004612d8b565b61114f565b3480156107d657600080fd5b506104ba6107e5366004612cca565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561080f57600080fd5b506105a261081e366004612dd9565b6111a4565b34801561082f57600080fd5b506105a261083e366004612e36565b61120d565b34801561084f57600080fd5b506103da61134e565b34801561086457600080fd5b506103da610873366004612cca565b611369565b34801561088457600080fd5b506105a2611384565b34801561089957600080fd5b50601c546001600160a01b03166103a7565b3480156108b757600080fd5b5060408051808201909152600581526425a0ad20a760d91b602082015261046e565b3480156108e557600080fd5b50601b546103da565b3480156108fa57600080fd5b506105a2610909366004612cca565b611413565b34801561091a57600080fd5b506104ba610929366004612ce7565b61145f565b34801561093a57600080fd5b506015546104ba9060ff1681565b34801561095457600080fd5b506105a2610963366004612e79565b611476565b34801561097457600080fd5b50600b546109b59061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103bb565b3480156109fe57600080fd5b506105a2610a0d366004612ede565b6115ed565b348015610a1e57600080fd5b506103da610a2d366004612efa565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a6457600080fd5b506105a2611676565b348015610a7957600080fd5b506105a2610a88366004612f33565b611712565b348015610a9957600080fd5b506019546103a7906201000090046001600160a01b031681565b348015610abf57600080fd5b50600e54600f54601054601154610ae6936001600160a01b03908116938116928116911684565b604080516001600160a01b03958616815293851660208501529184169183019190915290911660608201526080016103bb565b348015610b2557600080fd5b506105a2610b34366004612cca565b6118c7565b348015610b4557600080fd5b506105a2611915565b348015610b5a57600080fd5b506103da601b5481565b348015610b7057600080fd5b506012546104ba90610100900460ff1681565b6000610b90338484611a79565b5060015b92915050565b6000610ba86009600a61305f565b601854610bb5919061306e565b905090565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610c1f576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610c19908490613090565b90915550505b610c2a848484611b72565b949350505050565b601c546001600160a01b03163314610c655760405162461bcd60e51b8152600401610c5c906130a7565b60405180910390fd5b6064600954610c74919061306e565b8183600954610c8391906130e8565b610c8d919061306e565b1015610cf45760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610c5c565b8082600954610d0391906130e8565b610d0d919061306e565b6018555050565b6000610d206000611369565b610d2b61dead611369565b610d359190613107565b600954610bb59190613090565b601c546001600160a01b03163314610d6c5760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610c5c906130a7565b6103e86009546005610dd391906130e8565b610ddd919061306e565b8183600954610dec91906130e8565b610df6919061306e565b1015610e6a5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c5c565b8082600954610e7991906130e8565b610e83919061306e565b6017555050565b600d54600090612710908390610ea8906001600160a01b0316611369565b610eb291906130e8565b610b94919061306e565b601c546001600160a01b03163314610ee65760405162461bcd60e51b8152600401610c5c906130a7565b6096811115610f305760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610c5c565b601655565b601c546001600160a01b03163314610f5f5760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b038116610f855760405162461bcd60e51b8152600401610c5c9061311f565b6001600160a01b03811661dead1415610fb05760405162461bcd60e51b8152600401610c5c9061311f565b601c54610fc7906001600160a01b0316600061114f565b610fd281600161114f565b601c54600090610fea906001600160a01b0316611369565b111561101657601c54611014906001600160a01b03168261100a82611369565b6000806001611fc3565b505b601c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546001600160a01b031633146110925760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b03166000908152600860205260409020805460ff19169055565b601c546001600160a01b031633146110dd5760405162461bcd60e51b8152600401610c5c906130a7565b6103e8600954600a6110ef91906130e8565b6110f9919061306e565b6018556009546103e89061110e90600a6130e8565b611118919061306e565b601755600a805465ffffffffffff19166303e803e8179055600b80546701f400fa00fa000067ffffffffffff000019909116179055565b601c546001600160a01b031633146111795760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601c546001600160a01b031633146111ce5760405162461bcd60e51b8152600401610c5c906130a7565b600e80546001600160a01b039485166001600160a01b031991821617909155600f80549385169382169390931790925560108054919093169116179055565b601c546001600160a01b031633146112375760405162461bcd60e51b8152600401610c5c906130a7565b610bb88361ffff16111580156112535750610bb88261ffff1611155b80156112655750610bb88161ffff1611155b6112b15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c5c565b6117706112be838561317c565b61ffff1611156113105760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420657863656564206d617820726f756e6474726970207461782e6044820152606401610c5c565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b600061135c6009600a61305f565b601754610bb5919061306e565b6001600160a01b031660009081526001602052604090205490565b601c546001600160a01b031633146113ae5760405162461bcd60e51b8152600401610c5c906130a7565b601c546113c5906001600160a01b0316600061114f565b601c80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610c5c906130a7565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600061146c338484611b72565b5060019392505050565b601c546001600160a01b031633146114a05760405162461bcd60e51b8152600401610c5c906130a7565b600b805461ffff87811663ffffffff199092169190911762010000878316021767ffffffff000000001916600160201b8683160267ffff000000000000191617600160301b858316021769ffff00000000000000001916600160401b918416919091021790558083611512868861317c565b61151c919061317c565b611526919061317c565b600b805461ffff60501b1916600160501b61ffff93841602179055600a5460009161155a916201000081048216911661317c565b600b5461ffff9182169250829161158391600160301b8104821691600160501b9091041661317c565b61ffff1611156115e55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610c5c565b505050505050565b601c546001600160a01b031633146116175760405162461bcd60e51b8152600401610c5c906130a7565b6012805461ff001916610100841515908102919091179091556015805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601c546001600160a01b031633146116a05760405162461bcd60e51b8152600401610c5c906130a7565b6103e8600954600a6116b291906130e8565b6116bc919061306e565b6018556009546103e8906116d190600a6130e8565b6116db919061306e565b601755600a805465ffffffffffff19166301900190179055600b80546701f400fa00fa000067ffffffffffff000019909116179055565b601c546001600160a01b0316331461173c5760405162461bcd60e51b8152600401610c5c906130a7565b828460095461174b91906130e8565b611755919061306e565b60135560095481906117689084906130e8565b611772919061306e565b601481905560135411156117d25760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610c5c565b600d54612710906117eb906001600160a01b0316611369565b6117f69060966130e8565b611800919061306e565b601454111561185d5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526226281760e91b6064820152608401610c5c565b620f424060095461186e919061306e565b601454101561188f5760405162461bcd60e51b8152600401610c5c906131a2565b620f42406009546118a0919061306e565b60135410156118c15760405162461bcd60e51b8152600401610c5c906131a2565b50505050565b601c546001600160a01b031633146118f15760405162461bcd60e51b8152600401610c5c906130a7565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b601c546001600160a01b0316331461193f5760405162461bcd60e51b8152600401610c5c906130a7565b60195460ff16156119925760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610c5c565b601954610100900460ff166119e95760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610c5c565b6019805460ff19166001179055600d5461271090611a0f906001600160a01b0316611369565b611a1a90600a6130e8565b611a24919061306e565b601355600d5461271090611a40906001600160a01b0316611369565b611a4b90601e6130e8565b611a55919061306e565b601455600c54611a7790309061010090046001600160a01b0316600019611a79565b565b6001600160a01b038316611ac55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c5c565b6001600160a01b038216611b115760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c5c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611bd85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c5c565b6001600160a01b038316611c3a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c5c565b60008211611c9c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c5c565b6001600160a01b03841660009081526008602052604090205460ff16158015611cde57506001600160a01b03831660009081526008602052604090205460ff16155b611ce757600080fd5b6001600160a01b0384166000908152600260205260408120548190819060ff1615611d155760019250611d43565b6001600160a01b03861660009081526002602052604090205460ff1615611d3f5760019150611d43565b5060015b611d4d878761217f565b15611f1a5760195460ff16611da45760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c5c565b8280611dad5750815b15611e5c576001600160a01b03871660009081526007602052604090205460ff16158015611df457506001600160a01b03861660009081526007602052604090205460ff16155b15611e5c57601754851115611e5c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c5c565b600c546001600160a01b038781166101009092041614801590611e7d575081155b15611f1a576001600160a01b03861660009081526007602052604090205460ff16611f1a5760185485611eaf88611369565b611eb99190613107565b1115611f1a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610c5c565b8115611faa5760125460ff16611faa57601254610100900460ff1615611faa576000611f4530611369565b90506013548110611fa85760145460155460ff1615611f9257601654600d546127109190611f7b906001600160a01b0316611369565b611f8591906130e8565b611f8f919061306e565b90505b808210611f9d578091505b611fa682612256565b505b505b611fb8878787868686611fc3565b979650505050505050565b601954600090610100900460ff1661205d57611fdf878761288c565b601954610100900460ff16158015611ffc5750611ffc878761217f565b8015612006575081155b1561205d5760405162461bcd60e51b815260206004820152602160248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152601760f91b6064820152608401610c5c565b6001600160a01b03871660009081526006602052604090205460019060ff168061209f57506001600160a01b03871660009081526006602052604090205460ff165b156120a8575060005b6001600160a01b038816600090815260016020526040812080548892906120d0908490613090565b9091555060009050816120e357866120ef565b6120ef8987878a61298b565b6001600160a01b03891660009081526001602052604081208054929350839290919061211c908490613107565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161216891815260200190565b60405180910390a350600198975050505050505050565b601c546000906001600160a01b038481169116148015906121ae5750601c546001600160a01b03838116911614155b80156121c55750601c546001600160a01b03163214155b80156121ea57506001600160a01b03821660009081526005602052604090205460ff16155b801561220f57506001600160a01b03831660009081526005602052604090205460ff16155b801561222657506001600160a01b03821661dead14155b801561223a57506001600160a01b03821615155b801561224f57506001600160a01b0383163014155b9392505050565b6012805460ff191660011790556040805160c081018252600b5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a082018190526122cc575061287f565b306000908152600460209081526040808320600c5461010090046001600160a01b031684529091529020546000191461232f57306000908152600460209081526040808320600c5461010090046001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836000015161ffff168561235091906130e8565b61235a919061306e565b612364919061306e565b905060006123728285613090565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106123ac576123ac6131f0565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561241a57600080fd5b505afa15801561242e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124529190613206565b81600181518110612465576124656131f0565b6001600160a01b039283166020918202929092010152600c5460405163791ac94760e01b81526101009091049091169063791ac947906124b2908590600090869030904290600401613267565b600060405180830381600087803b1580156124cc57600080fd5b505af19250505080156124dd575060015b6124ea575050505061287f565b476000836124f886846130e8565b612502919061306e565b905084156125f757600c5460105460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c4016060604051808303818588803b15801561257a57600080fd5b505af1935050505080156125ab575060408051601f3d908101601f191682019092526125a8918101906132a3565b60015b6125ba5750505050505061287f565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6126018183613090565b915085600001518660a00181815161261991906132d1565b61ffff90811690915260a08801516040890151600093508392918216916126419116866130e8565b61264b919061306e565b6019549091506000906201000090046001600160a01b031661266e576000612695565b8860a0015161ffff16896080015161ffff168661268b91906130e8565b612695919061306e565b905060006126a38284613107565b6126ad9087613090565b9050801561271257600e546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114612707576040519150601f19603f3d011682016040523d82523d6000602084013e61270c565b606091505b50909450505b821561277557600f546040516001600160a01b03909116906188b89085906000818181858888f193505050503d806000811461276a576040519150601f19603f3d011682016040523d82523d6000602084013e61276f565b606091505b50909450505b811561287457600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c957600080fd5b505afa1580156127dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128019190613206565b87600081518110612814576128146131f0565b6001600160a01b039283166020918202929092010152601954885162010000909104909116908890600190811061284d5761284d6131f0565b6001600160a01b039283166020918202929092010152601154612874918991859116612b86565b505050505050505050505b506012805460ff19169055565b601954610100900460ff16156128d75760405162461bcd60e51b815260206004820152601060248201526f2634b8bab4b234ba3c9030b23232b21760811b6044820152606401610c5c565b6128e1828261217f565b1580156128fb5750600d546001600160a01b038281169116145b15612987576001600160a01b03821660009081526005602090815260408083208054600160ff1991821681179092556006845293829020805490941681179093556019805461010061ff00199182168117909255601280549091169091179055519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257910161166a565b5050565b6040805160c081018252600b5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a08201526000908185156129ff5750600a5461ffff16612a28565b8415612a185750600a5462010000900461ffff16612a28565b50600a54600160201b900461ffff165b6000612710612a3783876130e8565b612a41919061306e565b905060008360a001518460600151612a59919061317c565b61ffff16846060015161ffff1683612a7191906130e8565b612a7b919061306e565b90506000612a898284613090565b90508015612af6573060009081526001602052604081208054839290612ab0908490613107565b909155505060405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b8115612b6e578160096000828254612b0e9190613090565b9250508190555081601b6000828254612b279190613107565b90915550506040518281526000906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612b788388613090565b9a9950505050505050505050565b600c5460405163b6f9de9560e01b81526101009091046001600160a01b03169063b6f9de95908490612bc3906000908890879042906004016132f4565b6000604051808303818588803b158015612bdc57600080fd5b505af193505050508015612bee575060015b612bf757505050565b601960029054906101000a90046001600160a01b03166001600160a01b031683600181518110612c2957612c296131f0565b60200260200101516001600160a01b03161415612c585781601a6000828254612c529190613107565b90915550505b505050565b600060208083528351808285015260005b81811015612c8a57858101830151858201604001528201612c6e565b81811115612c9c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612cc757600080fd5b50565b600060208284031215612cdc57600080fd5b813561224f81612cb2565b60008060408385031215612cfa57600080fd5b8235612d0581612cb2565b946020939093013593505050565b600080600060608486031215612d2857600080fd5b8335612d3381612cb2565b92506020840135612d4381612cb2565b929592945050506040919091013590565b60008060408385031215612d6757600080fd5b50508035926020909101359150565b80358015158114612d8657600080fd5b919050565b60008060408385031215612d9e57600080fd5b8235612da981612cb2565b9150612db760208401612d76565b90509250929050565b600060208284031215612dd257600080fd5b5035919050565b600080600060608486031215612dee57600080fd5b8335612df981612cb2565b92506020840135612e0981612cb2565b91506040840135612e1981612cb2565b809150509250925092565b803561ffff81168114612d8657600080fd5b600080600060608486031215612e4b57600080fd5b612e5484612e24565b9250612e6260208501612e24565b9150612e7060408501612e24565b90509250925092565b600080600080600060a08688031215612e9157600080fd5b612e9a86612e24565b9450612ea860208701612e24565b9350612eb660408701612e24565b9250612ec460608701612e24565b9150612ed260808701612e24565b90509295509295909350565b60008060408385031215612ef157600080fd5b612da983612d76565b60008060408385031215612f0d57600080fd5b8235612f1881612cb2565b91506020830135612f2881612cb2565b809150509250929050565b60008060008060808587031215612f4957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612fb6578160001904821115612f9c57612f9c612f65565b80851615612fa957918102915b93841c9390800290612f80565b509250929050565b600082612fcd57506001610b94565b81612fda57506000610b94565b8160018114612ff05760028114612ffa57613016565b6001915050610b94565b60ff84111561300b5761300b612f65565b50506001821b610b94565b5060208310610133831016604e8410600b8410161715613039575081810a610b94565b6130438383612f7b565b806000190482111561305757613057612f65565b029392505050565b600061224f60ff841683612fbe565b60008261308b57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156130a2576130a2612f65565b500390565b60208082526021908201527f436f6d6d616e64206f6e6c7920617661696c61626c6520666f72206f776e65726040820152601760f91b606082015260800190565b600081600019048311821515161561310257613102612f65565b500290565b6000821982111561311a5761311a612f65565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600061ffff80831681851680830382111561319957613199612f65565b01949350505050565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561321857600080fd5b815161224f81612cb2565b600081518084526020808501945080840160005b8381101561325c5781516001600160a01b031687529582019590820190600101613237565b509495945050505050565b85815284602082015260a06040820152600061328660a0830186613223565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156132b857600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156132ec576132ec612f65565b039392505050565b84815260806020820152600061330d6080830186613223565b6001600160a01b0394909416604083015250606001529291505056fea2646970667358221220cae1aa9860d0c3c1ec96887c81814d6dd9f885c71da3c28bd657ae1d8c576da964736f6c63430008090033

Deployed Bytecode Sourcemap

3538:20098:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5139:73;;;;;;;;;;;;5170:42;5139:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;5139:73:0;;;;;;;;5782:28;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;5782:28:0;222:177:1;4571:79:0;;;;;;;;;;-1:-1:-1;4571:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;4571:79:0;;;;;;;;;;610:6:1;643:15;;;625:34;;695:15;;;690:2;675:18;;668:43;747:15;;727:18;;;720:43;;;;588:2;573:18;4571:79:0;404:365:1;8666:80:0;;;;;;;;;;-1:-1:-1;8738:5:0;;;;;;;;;;;;-1:-1:-1;;;8738:5:0;;;;8666:80;;;;;;;:::i;5078:26::-;;;;;;;;;;-1:-1:-1;5078:26:0;;;;;;;-1:-1:-1;;;;;5078:26:0;;;5045;;;;;;;;;;-1:-1:-1;5045:26:0;;;;;;;;;;;1766:14:1;;1759:22;1741:41;;1729:2;1714:18;5045:26:0;1601:187:1;23511:120:0;;;;;;;;;;-1:-1:-1;23511:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23609:14:0;23585:4;23609:14;;;:4;:14;;;;;;;;;23511:120;9274:161;;;;;;;;;;-1:-1:-1;9274:161:0;;;;;:::i;:::-;;:::i;13714:114::-;;;;;;;;;;;;;:::i;8401:83::-;;;;;;;;;;-1:-1:-1;8474:7:0;;8401:83;;15234:137;;;;;;;;;;-1:-1:-1;15350:13:0;;15234:137;;9761:306;;;;;;;;;;-1:-1:-1;9761:306:0;;;;;:::i;:::-;;:::i;13326:264::-;;;;;;;;;;-1:-1:-1;13326:264:0;;;;;:::i;:::-;;:::i;:::-;;5890:33;;;;;;;;;;;;;;;;10640:141;;;;;;;;;;;;;:::i;4789:42::-;;;;;;;;;;;;4827:4;4789:42;;5817:25;;;;;;;;;;;;;;;;8490:80;;;;;;;;;;-1:-1:-1;8490:80:0;;4266:1;3357:36:1;;3345:2;3330:18;8490:80:0;3215:184:1;10350:140:0;;;;;;;;;;-1:-1:-1;10350:140:0;;;;;:::i;:::-;;:::i;13045:273::-;;;;;;;;;;-1:-1:-1;13045:273:0;;;;;:::i;:::-;;:::i;5111:21::-;;;;;;;;;;-1:-1:-1;5111:21:0;;;;-1:-1:-1;;;;;5111:21:0;;;4942:46;;;;;;;;;;;;4984:4;4942:46;;6060:34;;;;;;;;;;-1:-1:-1;6060:34:0;;;;;;;;6193:28;;;;;;;;;;;;;;;;13836:189;;;;;;;;;;-1:-1:-1;13836:189:0;;;;;:::i;:::-;;:::i;14746:217::-;;;;;;;;;;-1:-1:-1;14746:217:0;;;;;:::i;:::-;;:::i;7506:654::-;;;;;;;;;;-1:-1:-1;7506:654:0;;;;;:::i;:::-;;:::i;10215:127::-;;;;;;;;;;-1:-1:-1;10215:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10306:28:0;10282:4;10306:28;;;:19;:28;;;;;;;;;10215:127;6101:36;;;;;;;;;;-1:-1:-1;6101:36:0;;;;;;;;;;;23391:108;;;;;;;;;;-1:-1:-1;23391:108:0;;;;;:::i;:::-;;:::i;12170:361::-;;;;;;;;;;;;;:::i;10498:134::-;;;;;;;;;;-1:-1:-1;10498:134:0;;;;;:::i;:::-;;:::i;10075:132::-;;;;;;;;;;-1:-1:-1;10075:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;10169:30:0;10145:4;10169:30;;;:21;:30;;;;;;;;;10075:132;11865:297;;;;;;;;;;-1:-1:-1;11865:297:0;;;;;:::i;:::-;;:::i;10789:490::-;;;;;;;;;;-1:-1:-1;10789:490:0;;;;;:::i;:::-;;:::i;13598:108::-;;;;;;;;;;;;;:::i;8976:117::-;;;;;;;;;;-1:-1:-1;8976:117:0;;;;;:::i;:::-;;:::i;8168:225::-;;;;;;;;;;;;;:::i;8752:79::-;;;;;;;;;;-1:-1:-1;8822:6:0;;-1:-1:-1;;;;;8822:6:0;8752:79;;8576:84;;;;;;;;;;-1:-1:-1;8650:7:0;;;;;;;;;;;;-1:-1:-1;;;8650:7:0;;;;8576:84;;15379:121;;;;;;;;;;-1:-1:-1;15480:12:0;;15379:121;;12908:129;;;;;;;;;;-1:-1:-1;12908:129:0;;;;;:::i;:::-;;:::i;9101:165::-;;;;;;;;;;-1:-1:-1;9101:165:0;;;;;:::i;:::-;;:::i;5849:34::-;;;;;;;;;;-1:-1:-1;5849:34:0;;;;;;;;11287:570;;;;;;;;;;-1:-1:-1;11287:570:0;;;;;:::i;:::-;;:::i;4659:121::-;;;;;;;;;;-1:-1:-1;4659:121:0;;;;;;;;;;;;;;;-1:-1:-1;;;4659:121:0;;;;;-1:-1:-1;;;4659:121:0;;;;;-1:-1:-1;;;4659:121:0;;;;;-1:-1:-1;;;4659:121:0;;;;;;;;;6153:6:1;6186:15;;;6168:34;;6238:15;;;6233:2;6218:18;;6211:43;6290:15;;;6270:18;;;6263:43;;;;6342:15;;;6337:2;6322:18;;6315:43;6395:15;;6389:3;6374:19;;6367:44;6448:15;;;6442:3;6427:19;;6420:44;6130:3;6115:19;4659:121:0;5868:602:1;14971:255:0;;;;;;;;;;-1:-1:-1;14971:255:0;;;;;:::i;:::-;;:::i;8837:133::-;;;;;;;;;;-1:-1:-1;8837:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;8939:19:0;;;8921:7;8939:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;8837:133;12539:361;;;;;;;;;;;;;:::i;14033:705::-;;;;;;;;;;-1:-1:-1;14033:705:0;;;;;:::i;:::-;;:::i;6146:38::-;;;;;;;;;;-1:-1:-1;6146:38:0;;;;;;;-1:-1:-1;;;;;6146:38:0;;;5399:306;;;;;;;;;;-1:-1:-1;5399:306:0;;;;;;;;;;-1:-1:-1;;;;;5399:306:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7862:15:1;;;7844:34;;7914:15;;;7909:2;7894:18;;7887:43;7966:15;;;7946:18;;;7939:43;;;;8018:15;;;8013:2;7998:18;;7991:43;7793:3;7778:19;5399:306:0;7511:529:1;23282:97:0;;;;;;;;;;-1:-1:-1;23282:97:0;;;;;:::i;:::-;;:::i;21116:408::-;;;;;;;;;;;;;:::i;6228:27::-;;;;;;;;;;;;;;;;5736:39;;;;;;;;;;-1:-1:-1;5736:39:0;;;;;;;;;;;9274:161;9351:4;9368:37;9377:10;9389:7;9398:6;9368:8;:37::i;:::-;-1:-1:-1;9423:4:0;9274:161;;;;;:::o;13714:114::-;13761:7;13806:13;4266:1;13806:2;:13;:::i;:::-;13788:14;;:32;;;;:::i;:::-;13781:39;;13714:114;:::o;9761:306::-;-1:-1:-1;;;;;9882:19:0;;9861:4;9882:19;;;:11;:19;;;;;;;;9902:10;9882:31;;;;;;;;-1:-1:-1;;9882:52:0;9878:126;;-1:-1:-1;;;;;9951:19:0;;;;;;:11;:19;;;;;;;;9971:10;9951:31;;;;;;;:41;;9986:6;;9951:19;:41;;9986:6;;9951:41;:::i;:::-;;;;-1:-1:-1;;9878:126:0;10023:36;10033:6;10041:9;10052:6;10023:9;:36::i;:::-;10016:43;9761:306;-1:-1:-1;;;;9761:306:0:o;13326:264::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;;;;;;;;;13468:3:::1;13458:7;;:13;;;;:::i;:::-;13446:7;13435;13425;;:17;;;;:::i;:::-;13424:29;;;;:::i;:::-;:48;;13416:109;;;::::0;-1:-1:-1;;;13416:109:0;;10689:2:1;13416:109:0::1;::::0;::::1;10671:21:1::0;10728:2;10708:18;;;10701:30;10767:34;10747:18;;;10740:62;-1:-1:-1;;;10818:18:1;;;10811:46;10874:19;;13416:109:0::1;10487:412:1::0;13416:109:0::1;13575:7;13564;13554;;:17;;;;:::i;:::-;13553:29;;;;:::i;:::-;13536:14;:46:::0;-1:-1:-1;;13326:264:0:o;10640:141::-;10693:7;10750:21;10768:1;10750:9;:21::i;:::-;10732:15;5170:42;10732:9;:15::i;:::-;:39;;;;:::i;:::-;10721:7;;:51;;;;:::i;10350:140::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10442:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;10442:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10350:140::o;13045:273::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;13190:4:::1;13176:7;;13186:1;13176:11;;;;:::i;:::-;:18;;;;:::i;:::-;13164:7;13153;13143;;:17;;;;:::i;:::-;13142:29;;;;:::i;:::-;:53;;13134:121;;;::::0;-1:-1:-1;;;13134:121:0;;11239:2:1;13134:121:0::1;::::0;::::1;11221:21:1::0;11278:2;11258:18;;;11251:30;11317:34;11297:18;;;11290:62;11388:25;11368:18;;;11361:53;11431:19;;13134:121:0::1;11037:419:1::0;13134:121:0::1;13303:7;13292;13282;;:17;;;;:::i;:::-;13281:29;;;;:::i;:::-;13266:12;:44:::0;-1:-1:-1;;13045:273:0:o;13836:189::-;13965:6;;13927:7;;5031:5;;13975:21;;13955:17;;-1:-1:-1;;;;;13965:6:0;13955:9;:17::i;:::-;:41;;;;:::i;:::-;13954:62;;;;:::i;14746:217::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;14876:3:::1;14850:22;:29;;14842:64;;;::::0;-1:-1:-1;;;14842:64:0;;11663:2:1;14842:64:0::1;::::0;::::1;11645:21:1::0;11702:2;11682:18;;;11675:30;-1:-1:-1;;;11721:18:1;;;11714:52;11783:18;;14842:64:0::1;11461:346:1::0;14842:64:0::1;14917:13;:38:::0;14746:217::o;7506:654::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7585:22:0;::::1;7577:96;;;;-1:-1:-1::0;;;7577:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7692:16:0;::::1;5170:42;7692:16;;7684:90;;;;-1:-1:-1::0;;;7684:90:0::1;;;;;;;:::i;:::-;7805:6;::::0;7785:34:::1;::::0;-1:-1:-1;;;;;7805:6:0::1;;7785:19;:34::i;:::-;7830:35;7850:8;7860:4;7830:19;:35::i;:::-;7900:6;::::0;7910:1:::1;::::0;7890:17:::1;::::0;-1:-1:-1;;;;;7900:6:0::1;7890:9;:17::i;:::-;:21;7886:127;;;7945:6;::::0;7928:73:::1;::::0;-1:-1:-1;;;;;7945:6:0::1;7953:8:::0;7963:17:::1;7945:6:::0;7963:9:::1;:17::i;:::-;7982:5;7989::::0;7996:4:::1;7928:16;:73::i;:::-;;7886:127;8052:6;::::0;;-1:-1:-1;;;;;8069:17:0;;::::1;-1:-1:-1::0;;;;;;8069:17:0;::::1;::::0;::::1;::::0;;;8102:40:::1;::::0;8052:6;::::1;::::0;8069:17;8052:6;;8102:40:::1;::::0;8033:16:::1;::::0;8102:40:::1;7566:594;7506:654:::0;:::o;23391:108::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23469:14:0::1;23486:5;23469:14:::0;;;:4:::1;:14;::::0;;;;:22;;-1:-1:-1;;23469:22:0::1;::::0;;23391:108::o;12170:361::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;12266:4:::1;12250:7;;12260:2;12250:12;;;;:::i;:::-;12249:21;;;;:::i;:::-;12232:14;:38:::0;12297:7:::1;::::0;12313:4:::1;::::0;12297:12:::1;::::0;12307:2:::1;12297:12;:::i;:::-;12296:21;;;;:::i;:::-;12281:12;:36:::0;12328:9:::1;:23:::0;;-1:-1:-1;;12397:25:0;12362:24;12397:25;;;12433:7:::1;:25:::0;;12503:18;-1:-1:-1;;12503:18:0;;;;;;12170:361::o;10498:134::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10586:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;10586:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10498:134::o;11865:297::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;12002:11:::1;:42:::0;;-1:-1:-1;;;;;12002:42:0;;::::1;-1:-1:-1::0;;;;;;12002:42:0;;::::1;;::::0;;;12055:23;:46;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;12112:21;:42;;;;;::::1;::::0;::::1;;::::0;;11865:297::o;10789:490::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;4827:4:::1;10898:6;:21;;;;:65;;;;;4877:4;10940:7;:23;;;;10898:65;:117;;;;;4931:4;10984:11;:31;;;;10898:117;10890:170;;;::::0;-1:-1:-1;;;10890:170:0;;12444:2:1;10890:170:0::1;::::0;::::1;12426:21:1::0;12483:2;12463:18;;;12456:30;12522:25;12502:18;;;12495:53;12565:18;;10890:170:0::1;12242:347:1::0;10890:170:0::1;4984:4;11079:16;11088:7:::0;11079:6;:16:::1;:::i;:::-;:35;;;;11071:80;;;::::0;-1:-1:-1;;;11071:80:0;;13025:2:1;11071:80:0::1;::::0;::::1;13007:21:1::0;;;13044:18;;;13037:30;13103:34;13083:18;;;13076:62;13155:18;;11071:80:0::1;12823:356:1::0;11071:80:0::1;11162:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;11198:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;11236:35:0::1;-1:-1:-1::0;;;11236:35:0;;;::::1;;::::0;;;::::1;::::0;;10789:490::o;13598:108::-;13641:7;13684:13;4266:1;13684:2;:13;:::i;:::-;13668:12;;:30;;;;:::i;8976:117::-;-1:-1:-1;;;;;9069:16:0;9042:7;9069:16;;;:7;:16;;;;;;;8976:117::o;8168:225::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;8247:6:::1;::::0;8227:34:::1;::::0;-1:-1:-1;;;;;8247:6:0::1;;8227:19;:34::i;:::-;8291:6;::::0;;-1:-1:-1;;;;;;8308:19:0;::::1;::::0;;;8343:42:::1;::::0;-1:-1:-1;;;;;8291:6:0;;::::1;::::0;8272:16:::1;::::0;8291:6;;8343:42:::1;::::0;8272:16;;8343:42:::1;8216:177;8168:225::o:0;12908:129::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;12990:19;:39;;-1:-1:-1;;;;;;12990:39:0::1;-1:-1:-1::0;;;;;12990:39:0;;;::::1;::::0;;;::::1;::::0;;12908:129::o;9101:165::-;9179:4;9196:40;9206:10;9218:9;9229:6;9196:9;:40::i;:::-;-1:-1:-1;9254:4:0;;9101:165;-1:-1:-1;;;9101:165:0:o;11287:570::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;11425:7:::1;:29:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;11465:29:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;11549:19:0;-1:-1:-1;;;11505:33:0;;::::1;;-1:-1:-1::0;;11549:19:0;;-1:-1:-1;;;11549:19:0;;::::1;;;-1:-1:-1::0;;11579:26:0::1;-1:-1:-1::0;;;11579:26:0;;::::1;::::0;;;::::1;;::::0;;;11505:33;11636:21:::1;11465:29:::0;11425;11636:21:::1;:::i;:::-;:35;;;;:::i;:::-;:46;;;;:::i;:::-;11616:7;:66:::0;;-1:-1:-1;;;;11616:66:0::1;-1:-1:-1::0;;;11616:66:0::1;::::0;;::::1;;;::::0;;:17:::1;11728::::0;-1:-1:-1;;11709:36:0::1;::::0;11728:17;;::::1;::::0;::::1;::::0;11709:16:::1;:36;:::i;:::-;11784:7;:12:::0;11693:52:::1;::::0;;::::1;::::0;-1:-1:-1;11693:52:0;;11764:32:::1;::::0;-1:-1:-1;;;11784:12:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;11764:17:0;;::::1;;:32;:::i;:::-;:41;;;;11756:93;;;::::0;-1:-1:-1;;;11756:93:0;;13386:2:1;11756:93:0::1;::::0;::::1;13368:21:1::0;13425:2;13405:18;;;13398:30;13464:34;13444:18;;;13437:62;-1:-1:-1;;;13515:18:1;;;13508:37;13562:19;;11756:93:0::1;13184:403:1::0;11756:93:0::1;11414:443;11287:570:::0;;;;;:::o;14971:255::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;15072:19:::1;:33:::0;;-1:-1:-1;;15072:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;15116:22:::1;:47:::0;;-1:-1:-1;;15116:47:0::1;::::0;::::1;;;::::0;;15179:39:::1;::::0;1741:41:1;;;15179:39:0::1;::::0;1729:2:1;1714:18;15179:39:0::1;;;;;;;;14971:255:::0;;:::o;12539:361::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;12637:4:::1;12621:7;;12631:2;12621:12;;;;:::i;:::-;12620:21;;;;:::i;:::-;12603:14;:38:::0;12668:7:::1;::::0;12684:4:::1;::::0;12668:12:::1;::::0;12678:2:::1;12668:12;:::i;:::-;12667:21;;;;:::i;:::-;12652:12;:36:::0;12699:9:::1;:22:::0;;-1:-1:-1;;12766:25:0;12732:23;12766:25;;;12802:7:::1;:25:::0;;12872:18;-1:-1:-1;;12872:18:0;;;;;;12539:361::o;14033:705::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;14239:16:::1;14219;14209:7;;:26;;;;:::i;:::-;14208:47;;;;:::i;:::-;14192:13;:63:::0;14280:7:::1;::::0;14307:13;;14280:23:::1;::::0;14290:13;;14280:23:::1;:::i;:::-;14279:41;;;;:::i;:::-;14266:10;:54:::0;;;14339:13:::1;::::0;:27:::1;;14331:73;;;::::0;-1:-1:-1;;;14331:73:0;;13794:2:1;14331:73:0::1;::::0;::::1;13776:21:1::0;13833:2;13813:18;;;13806:30;13872:34;13852:18;;;13845:62;-1:-1:-1;;;13923:18:1;;;13916:31;13964:19;;14331:73:0::1;13592:397:1::0;14331:73:0::1;14448:6;::::0;5031:5:::1;::::0;14438:17:::1;::::0;-1:-1:-1;;;;;14448:6:0::1;14438:9;:17::i;:::-;:23;::::0;14458:3:::1;14438:23;:::i;:::-;14437:44;;;;:::i;:::-;14423:10;;:58;;14415:106;;;::::0;-1:-1:-1;;;14415:106:0;;14196:2:1;14415:106:0::1;::::0;::::1;14178:21:1::0;14235:2;14215:18;;;14208:30;14274:34;14254:18;;;14247:62;-1:-1:-1;;;14325:18:1;;;14318:33;14368:19;;14415:106:0::1;13994:399:1::0;14415:106:0::1;14564:9;14554:7;;:19;;;;:::i;:::-;14540:10;;:33;;14532:92;;;;-1:-1:-1::0;;;14532:92:0::1;;;;;;;:::i;:::-;14670:9;14660:7;;:19;;;;:::i;:::-;14643:13;;:36;;14635:95;;;;-1:-1:-1::0;;;14635:95:0::1;;;;;;;:::i;:::-;14033:705:::0;;;;:::o;23282:97::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23350:14:0::1;;::::0;;;:4:::1;:14;::::0;;;;:21;;-1:-1:-1;;23350:21:0::1;23367:4;23350:21;::::0;;23282:97::o;21116:408::-;6620:6;;-1:-1:-1;;;;;6620:6:0;6630:10;6620:20;6612:66;;;;-1:-1:-1;;;6612:66:0;;;;;;;:::i;:::-;21184:14:::1;::::0;::::1;;21183:15;21175:55;;;::::0;-1:-1:-1;;;21175:55:0;;15015:2:1;21175:55:0::1;::::0;::::1;14997:21:1::0;15054:2;15034:18;;;15027:30;15093:29;15073:18;;;15066:57;15140:18;;21175:55:0::1;14813:351:1::0;21175:55:0::1;21249:16;::::0;::::1;::::0;::::1;;;21241:53;;;::::0;-1:-1:-1;;;21241:53:0;;15371:2:1;21241:53:0::1;::::0;::::1;15353:21:1::0;15410:2;15390:18;;;15383:30;15449:26;15429:18;;;15422:54;15493:18;;21241:53:0::1;15169:348:1::0;21241:53:0::1;21305:14;:21:::0;;-1:-1:-1;;21305:21:0::1;21322:4;21305:21;::::0;;21364:6:::1;::::0;21380:5:::1;::::0;21354:17:::1;::::0;-1:-1:-1;;;;;21364:6:0::1;21354:9;:17::i;:::-;:22;::::0;21374:2:::1;21354:22;:::i;:::-;21353:32;;;;:::i;:::-;21337:13;:48:::0;21420:6:::1;::::0;21436:5:::1;::::0;21410:17:::1;::::0;-1:-1:-1;;;;;21420:6:0::1;21410:9;:17::i;:::-;:22;::::0;21430:2:::1;21410:22;:::i;:::-;21409:32;;;;:::i;:::-;21396:10;:45:::0;21484:9:::1;::::0;21452:62:::1;::::0;21469:4:::1;::::0;21484:9:::1;::::0;::::1;-1:-1:-1::0;;;;;21484:9:0::1;-1:-1:-1::0;;21452:8:0::1;:62::i;:::-;21116:408::o:0;9443:310::-;-1:-1:-1;;;;;9538:20:0;;9530:52;;;;-1:-1:-1;;;9530:52:0;;15724:2:1;9530:52:0;;;15706:21:1;15763:2;15743:18;;;15736:30;-1:-1:-1;;;15782:18:1;;;15775:49;15841:18;;9530:52:0;15522:343:1;9530:52:0;-1:-1:-1;;;;;9601:21:0;;9593:53;;;;-1:-1:-1;;;9593:53:0;;15724:2:1;9593:53:0;;;15706:21:1;15763:2;15743:18;;;15736:30;-1:-1:-1;;;15782:18:1;;;15775:49;15841:18;;9593:53:0;15522:343:1;9593:53:0;-1:-1:-1;;;;;9659:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;9712:33;;368:25:1;;;9712:33:0;;341:18:1;9712:33:0;;;;;;;9443:310;;;:::o;15874:1992::-;15953:4;-1:-1:-1;;;;;15978:18:0;;15970:68;;;;-1:-1:-1;;;15970:68:0;;16072:2:1;15970:68:0;;;16054:21:1;16111:2;16091:18;;;16084:30;16150:34;16130:18;;;16123:62;-1:-1:-1;;;16201:18:1;;;16194:35;16246:19;;15970:68:0;15870:401:1;15970:68:0;-1:-1:-1;;;;;16057:16:0;;16049:64;;;;-1:-1:-1;;;16049:64:0;;16478:2:1;16049:64:0;;;16460:21:1;16517:2;16497:18;;;16490:30;16556:34;16536:18;;;16529:62;-1:-1:-1;;;16607:18:1;;;16600:33;16650:19;;16049:64:0;16276:399:1;16049:64:0;16141:1;16132:6;:10;16124:64;;;;-1:-1:-1;;;16124:64:0;;16882:2:1;16124:64:0;;;16864:21:1;16921:2;16901:18;;;16894:30;16960:34;16940:18;;;16933:62;-1:-1:-1;;;17011:18:1;;;17004:39;17060:19;;16124:64:0;16680:405:1;16124:64:0;-1:-1:-1;;;;;16208:10:0;;;;;;:4;:10;;;;;;;;16207:11;:24;;;;-1:-1:-1;;;;;;16223:8:0;;;;;;:4;:8;;;;;;;;16222:9;16207:24;16199:33;;;;;;-1:-1:-1;;;;;16333:13:0;;16245:8;16333:13;;;:7;:13;;;;;;16245:8;;;;16333:13;;16329:162;;;16369:4;16363:10;;16329:162;;;-1:-1:-1;;;;;16395:11:0;;;;;;:7;:11;;;;;;;;16391:100;;;16430:4;16423:11;;16391:100;;;-1:-1:-1;16475:4:0;16391:100;16505:20;16516:4;16522:2;16505:10;:20::i;:::-;16501:644;;;16546:14;;;;16542:89;;16581:34;;-1:-1:-1;;;16581:34:0;;17292:2:1;16581:34:0;;;17274:21:1;17331:2;17311:18;;;17304:30;17370:26;17350:18;;;17343:54;17414:18;;16581:34:0;17090:348:1;16542:89:0;16649:3;:11;;;;16656:4;16649:11;16645:232;;;-1:-1:-1;;;;;16685:27:0;;;;;;:21;:27;;;;;;;;16684:28;:58;;;;-1:-1:-1;;;;;;16717:25:0;;;;;;:21;:25;;;;;;;;16716:26;16684:58;16680:182;;;16785:12;;16775:6;:22;;16767:75;;;;-1:-1:-1;;;16767:75:0;;17645:2:1;16767:75:0;;;17627:21:1;17684:2;17664:18;;;17657:30;17723:34;17703:18;;;17696:62;-1:-1:-1;;;17774:18:1;;;17767:38;17822:19;;16767:75:0;17443:404:1;16767:75:0;16909:9;;-1:-1:-1;;;;;16895:24:0;;;16909:9;;;;;16895:24;;;;:33;;;16924:4;16923:5;16895:33;16891:243;;;-1:-1:-1;;;;;16954:25:0;;;;;;:21;:25;;;;;;;;16949:170;;17038:14;;17028:6;17012:13;17022:2;17012:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;17004:95;;;;-1:-1:-1;;;17004:95:0;;18054:2:1;17004:95:0;;;18036:21:1;18093:2;18073:18;;;18066:30;18132:34;18112:18;;;18105:62;-1:-1:-1;;;18183:18:1;;;18176:40;18233:19;;17004:95:0;17852:406:1;17004:95:0;17161:4;17157:632;;;17187:6;;;;17182:596;;17218:19;;;;;;;17214:549;;;17262:28;17293:24;17311:4;17293:9;:24::i;:::-;17262:55;;17368:13;;17344:20;:37;17340:404;;17428:10;;17469:22;;;;17465:97;;;17526:13;;17516:6;;5031:5;;17526:13;17506:17;;-1:-1:-1;;;;;17516:6:0;17506:9;:17::i;:::-;:33;;;;:::i;:::-;17505:54;;;;:::i;:::-;17495:64;;17465:97;17616:7;17592:20;:31;17588:72;;17650:7;17627:30;;17588:72;17686:34;17699:20;17686:12;:34::i;:::-;17383:361;17340:404;17239:524;17214:549;17806:52;17823:4;17829:2;17833:6;17841:3;17846:4;17852:5;17806:16;:52::i;:::-;17799:59;15874:1992;-1:-1:-1;;;;;;;15874:1992:0:o;21532:752::-;21673:16;;21651:4;;21673:16;;;;;21668:227;;21706:28;21725:4;21731:2;21706:18;:28::i;:::-;21754:16;;;;;;;21753:17;:41;;;;;21774:20;21785:4;21791:2;21774:10;:20::i;:::-;21753:51;;;;;21799:5;21798:6;21753:51;21749:135;;;21825:43;;-1:-1:-1;;;21825:43:0;;18465:2:1;21825:43:0;;;18447:21:1;18504:2;18484:18;;;18477:30;18543:34;18523:18;;;18516:62;-1:-1:-1;;;18594:18:1;;;18587:31;18635:19;;21825:43:0;18263:397:1;21749:135:0;-1:-1:-1;;;;;21941:25:0;;21907:12;21941:25;;;:19;:25;;;;;;21922:4;;21941:25;;;:52;;-1:-1:-1;;;;;;21970:23:0;;;;;;:19;:23;;;;;;;;21941:52;21937:99;;;-1:-1:-1;22019:5:0;21937:99;-1:-1:-1;;;;;22048:13:0;;;;;;:7;:13;;;;;:23;;22065:6;;22048:13;:23;;22065:6;;22048:23;:::i;:::-;;;;-1:-1:-1;22082:22:0;;-1:-1:-1;22108:7:0;22107:55;;22156:6;22107:55;;;22119:34;22129:4;22135:3;22140:4;22146:6;22119:9;:34::i;:::-;-1:-1:-1;;;;;22173:11:0;;;;;;:7;:11;;;;;:29;;22082:80;;-1:-1:-1;22082:80:0;;22173:11;;;:29;;22082:80;;22173:29;:::i;:::-;;;;;;;;22235:2;-1:-1:-1;;;;;22220:34:0;22229:4;-1:-1:-1;;;;;22220:34:0;;22239:14;22220:34;;;;368:25:1;;356:2;341:18;;222:177;22220:34:0;;;;;;;;-1:-1:-1;22272:4:0;;21532:752;-1:-1:-1;;;;;;;;21532:752:0:o;15508:358::-;15609:6;;15577:4;;-1:-1:-1;;;;;15601:14:0;;;15609:6;;15601:14;;;;:43;;-1:-1:-1;15638:6:0;;-1:-1:-1;;;;;15632:12:0;;;15638:6;;15632:12;;15601:43;:79;;;;-1:-1:-1;15674:6:0;;-1:-1:-1;;;;;15674:6:0;15661:9;:19;;15601:79;:118;;;;-1:-1:-1;;;;;;15698:21:0;;;;;;:17;:21;;;;;;;;15697:22;15601:118;:159;;;;-1:-1:-1;;;;;;15737:23:0;;;;;;:17;:23;;;;;;;;15736:24;15601:159;:186;;;;-1:-1:-1;;;;;;15777:10:0;;5170:42;15777:10;;15601:186;:219;;;;-1:-1:-1;;;;;;15804:16:0;;;;15601:219;:257;;;;-1:-1:-1;;;;;;15837:21:0;;15853:4;15837:21;;15601:257;15594:264;15508:358;-1:-1:-1;;;15508:358:0:o;17874:2347::-;6514:6;:13;;-1:-1:-1;;6514:13:0;6523:4;6514:13;;;17957:30:::1;::::0;;::::1;::::0;::::1;::::0;;17980:7:::1;17957:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;17957:30:0;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;17957:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17957:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17957:30:0;::::1;::::0;;::::1;::::0;;;;;;17998:60:::1;;18040:7;;;17998:60;18094:4;18074:26;::::0;;;:11:::1;:26;::::0;;;;;;;18109:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;18109:9:0::1;18074:46:::0;;;;;;;;-1:-1:-1;;18074:67:0::1;18070:166;;18178:4;18158:26;::::0;;;:11:::1;:26;::::0;;;;;;;18193:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;18193:9:0::1;18158:46:::0;;;;;;;-1:-1:-1;;18158:66:0;;18070:166:::1;18248:17;18333:1;18313:6;:16;;;18269:60;;18293:6;:16;;;18270:39;;:20;:39;;;;:::i;:::-;18269:60;;;;:::i;:::-;18268:66;;;;:::i;:::-;18248:86:::0;-1:-1:-1;18345:15:0::1;18363:32;18248:86:::0;18363:20;:32:::1;:::i;:::-;18440:16;::::0;;18454:1:::1;18440:16:::0;;;;;::::1;::::0;;18345:50;;-1:-1:-1;18416:21:0::1;::::0;18440:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;18440:16:0::1;18416:40;;18485:4;18467;18472:1;18467:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;18467:23:0::1;;;-1:-1:-1::0;;;;;18467:23:0::1;;;::::0;::::1;18511:9;;;;;;;;;-1:-1:-1::0;;;;;18511:9:0::1;-1:-1:-1::0;;;;;18511:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18501:4;18506:1;18501:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18501:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;18544:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;18544:186:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;18619:7;;18641:1:::1;::::0;18657:4;;18684::::1;::::0;18704:15:::1;::::0;18544:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;18540:233;;18755:7;;;;;;18540:233;18806:21;18785:18;18892:7:::0;18866:22:::1;18879:9:::0;18806:21;18866:22:::1;:::i;:::-;18865:34;;;;:::i;:::-;18838:61:::0;-1:-1:-1;18916:13:0;;18912:417:::1;;18950:9;::::0;19119:21;;18950:239:::1;::::0;-1:-1:-1;;;18950:239:0;;19027:4:::1;18950:239;::::0;::::1;20587:34:1::0;20637:18;;;20630:34;;;19079:1:0::1;20680:18:1::0;;;20673:34;;;20723:18;;;20716:34;-1:-1:-1;;;;;19119:21:0;;::::1;20766:19:1::0;;;20759:44;19159:15:0::1;20819:19:1::0;;;20812:35;18950:9:0::1;::::0;;::::1;;::::0;:25:::1;::::0;18983:16;;20521:19:1;;18950:239:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;-1:-1:-1::0;18950:239:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;18950:239:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;18946:372;;19296:7;;;;;;;;18946:372;-1:-1:-1::0;;19214:40:0::1;::::0;;21343:25:1;;;21399:2;21384:18;;21377:34;;;19214:40:0::1;::::0;-1:-1:-1;21316:18:1;19214:40:0::1;;;;;;;18946:372;19341:30;19355:16:::0;19341:30;::::1;:::i;:::-;;;19402:6;:16;;;19382:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;19517:16:::1;::::0;::::1;::::0;19495:18:::1;::::0;::::1;::::0;19429:12:::1;::::0;-1:-1:-1;19429:12:0;;19481:52;;::::1;::::0;19482:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;19481:52;;;;:::i;:::-;19570:7;::::0;19452:81;;-1:-1:-1;19544:22:0::1;::::0;19570:7;;::::1;-1:-1:-1::0;;;;;19570:7:0::1;19569:78;;19646:1;19569:78;;;19627:6;:16;;;19595:48;;19609:6;:14;;;19596:27;;:10;:27;;;;:::i;:::-;19595:48;;;;:::i;:::-;19544:103:::0;-1:-1:-1;19658:24:0::1;19699:35;19544:103:::0;19699:18;:35:::1;:::i;:::-;19685:50;::::0;:10;:50:::1;:::i;:::-;19658:77:::0;-1:-1:-1;19750:20:0;;19746:133:::1;;19800:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;19800:21:0;;::::1;::::0;19857:5:::1;::::0;19834:16;;19800:67:::1;::::0;;;19834:16;19800:21;19857:5;19800:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;19787:80:0;;-1:-1:-1;;19746:133:0::1;19893:22:::0;;19889:139:::1;;19945:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;19945:23:0;;::::1;::::0;20006:5:::1;::::0;19981:18;;19945:71:::1;::::0;;;19981:18;19945:23;20006:5;19945:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;19932:84:0;;-1:-1:-1;;19889:139:0::1;20042:18:::0;;20038:176:::1;;20087:9;;;;;;;;;-1:-1:-1::0;;;;;20087:9:0::1;-1:-1:-1::0;;;;;20087:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20077:4;20082:1;20077:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20077:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;20128:7:::1;::::0;20118;;20128;;;::::1;::::0;;::::1;::::0;20118:4;;20123:1:::1;::::0;20118:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;20118:17:0;;::::1;:7;::::0;;::::1;::::0;;;;;:17;20182:19;;20150:52:::1;::::0;20160:4;;20166:14;;20182:19:::1;20150:9;:52::i;:::-;17946:2275;;;;;;;;;;6538:1;-1:-1:-1::0;6550:6:0;:14;;-1:-1:-1;;6550:14:0;;;17874:2347::o;20692:416::-;20775:16;;;;;;;20774:17;20766:46;;;;-1:-1:-1;;;20766:46:0;;22056:2:1;20766:46:0;;;22038:21:1;22095:2;22075:18;;;22068:30;-1:-1:-1;;;22114:18:1;;;22107:46;22170:18;;20766:46:0;21854:340:1;20766:46:0;20828:20;20839:4;20845:2;20828:10;:20::i;:::-;20827:21;:37;;;;-1:-1:-1;20858:6:0;;-1:-1:-1;;;;;20852:12:0;;;20858:6;;20852:12;20827:37;20823:278;;;-1:-1:-1;;;;;20881:23:0;;;;;;:17;:23;;;;;;;;:30;;20907:4;-1:-1:-1;;20881:30:0;;;;;;;;20926:19;:25;;;;;;:32;;;;;;;;;;20973:16;:23;;20881:30;-1:-1:-1;;20973:23:0;;;;;;;;21011:19;:26;;;;;;;;;;21057:32;1741:41:1;;;21057:32:0;;1714:18:1;21057:32:0;1601:187:1;20823:278:0;20692:416;;:::o;22292:982::-;22400:30;;;;;;;;22423:7;22400:30;;;;;;;;;;;;;;;;-1:-1:-1;;;22400:30:0;;;;;;;;;;;-1:-1:-1;;;22400:30:0;;;;;;;;-1:-1:-1;;;22400:30:0;;;;;;;;-1:-1:-1;;;22400:30:0;;;;;;;;;22380:7;;;22470:205;;;;-1:-1:-1;22507:9:0;:16;;;22470:205;;;22545:4;22541:134;;;-1:-1:-1;22579:9:0;:17;;;;;;22541:134;;;-1:-1:-1;22642:9:0;:21;-1:-1:-1;;;22642:21:0;;;;22541:134;22685:17;5031:5;22705:19;22714:10;22705:6;:19;:::i;:::-;:38;;;;:::i;:::-;22685:58;;22754:18;22818:6;:16;;;22804:6;:11;;;:30;;;;:::i;:::-;22775:60;;22788:6;:11;;;22776:23;;:9;:23;;;;:::i;:::-;22775:60;;;;:::i;:::-;22754:81;-1:-1:-1;22846:15:0;22864:22;22754:81;22864:9;:22;:::i;:::-;22846:40;-1:-1:-1;22901:11:0;;22897:135;;22945:4;22929:22;;;;:7;:22;;;;;:33;;22955:7;;22929:22;:33;;22955:7;;22929:33;:::i;:::-;;;;-1:-1:-1;;22982:38:0;;368:25:1;;;23005:4:0;;-1:-1:-1;;;;;22982:38:0;;;;;356:2:1;341:18;22982:38:0;;;;;;;22897:135;23046:14;;23042:167;;23088:10;23077:7;;:21;;;;;;;:::i;:::-;;;;;;;;23129:10;23113:12;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;23159:38:0;;368:25:1;;;23182:1:0;;-1:-1:-1;;;;;23159:38:0;;;;;356:2:1;341:18;23159:38:0;;;;;;;23042:167;23248:18;23257:9;23248:6;:18;:::i;:::-;23241:25;22292:982;-1:-1:-1;;;;;;;;;;22292:982:0:o;20229:455::-;20340:9;;:187;;-1:-1:-1;;;20340:187:0;;:9;;;;-1:-1:-1;;;;;20340:9:0;;:60;;20408:6;;20340:187;;20440:1;;20456:4;;20475:11;;20501:15;;20340:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20336:341;;20229:455;;;:::o;20336:341::-;20559:7;;;;;;;;;-1:-1:-1;;;;;20559:7:0;-1:-1:-1;;;;;20547:19:0;:4;20552:1;20547:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20547:19:0;;20543:83;;;20604:6;20587:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;20543:83:0;20229:455;;;:::o;774:597:1:-;886:4;915:2;944;933:9;926:21;976:6;970:13;1019:6;1014:2;1003:9;999:18;992:34;1044:1;1054:140;1068:6;1065:1;1062:13;1054:140;;;1163:14;;;1159:23;;1153:30;1129:17;;;1148:2;1125:26;1118:66;1083:10;;1054:140;;;1212:6;1209:1;1206:13;1203:91;;;1282:1;1277:2;1268:6;1257:9;1253:22;1249:31;1242:42;1203:91;-1:-1:-1;1355:2:1;1334:15;-1:-1:-1;;1330:29:1;1315:45;;;;1362:2;1311:54;;774:597;-1:-1:-1;;;774:597:1:o;1793:131::-;-1:-1:-1;;;;;1868:31:1;;1858:42;;1848:70;;1914:1;1911;1904:12;1848:70;1793:131;:::o;1929:247::-;1988:6;2041:2;2029:9;2020:7;2016:23;2012:32;2009:52;;;2057:1;2054;2047:12;2009:52;2096:9;2083:23;2115:31;2140:5;2115:31;:::i;2181:315::-;2249:6;2257;2310:2;2298:9;2289:7;2285:23;2281:32;2278:52;;;2326:1;2323;2316:12;2278:52;2365:9;2352:23;2384:31;2409:5;2384:31;:::i;:::-;2434:5;2486:2;2471:18;;;;2458:32;;-1:-1:-1;;;2181:315:1:o;2501:456::-;2578:6;2586;2594;2647:2;2635:9;2626:7;2622:23;2618:32;2615:52;;;2663:1;2660;2653:12;2615:52;2702:9;2689:23;2721:31;2746:5;2721:31;:::i;:::-;2771:5;-1:-1:-1;2828:2:1;2813:18;;2800:32;2841:33;2800:32;2841:33;:::i;:::-;2501:456;;2893:7;;-1:-1:-1;;;2947:2:1;2932:18;;;;2919:32;;2501:456::o;2962:248::-;3030:6;3038;3091:2;3079:9;3070:7;3066:23;3062:32;3059:52;;;3107:1;3104;3097:12;3059:52;-1:-1:-1;;3130:23:1;;;3200:2;3185:18;;;3172:32;;-1:-1:-1;2962:248:1:o;3404:160::-;3469:20;;3525:13;;3518:21;3508:32;;3498:60;;3554:1;3551;3544:12;3498:60;3404:160;;;:::o;3569:315::-;3634:6;3642;3695:2;3683:9;3674:7;3670:23;3666:32;3663:52;;;3711:1;3708;3701:12;3663:52;3750:9;3737:23;3769:31;3794:5;3769:31;:::i;:::-;3819:5;-1:-1:-1;3843:35:1;3874:2;3859:18;;3843:35;:::i;:::-;3833:45;;3569:315;;;;;:::o;3889:180::-;3948:6;4001:2;3989:9;3980:7;3976:23;3972:32;3969:52;;;4017:1;4014;4007:12;3969:52;-1:-1:-1;4040:23:1;;3889:180;-1:-1:-1;3889:180:1:o;4074:553::-;4175:6;4183;4191;4244:2;4232:9;4223:7;4219:23;4215:32;4212:52;;;4260:1;4257;4250:12;4212:52;4299:9;4286:23;4318:31;4343:5;4318:31;:::i;:::-;4368:5;-1:-1:-1;4425:2:1;4410:18;;4397:32;4438:33;4397:32;4438:33;:::i;:::-;4490:7;-1:-1:-1;4549:2:1;4534:18;;4521:32;4562:33;4521:32;4562:33;:::i;:::-;4614:7;4604:17;;;4074:553;;;;;:::o;4632:159::-;4699:20;;4759:6;4748:18;;4738:29;;4728:57;;4781:1;4778;4771:12;4796:328;4870:6;4878;4886;4939:2;4927:9;4918:7;4914:23;4910:32;4907:52;;;4955:1;4952;4945:12;4907:52;4978:28;4996:9;4978:28;:::i;:::-;4968:38;;5025:37;5058:2;5047:9;5043:18;5025:37;:::i;:::-;5015:47;;5081:37;5114:2;5103:9;5099:18;5081:37;:::i;:::-;5071:47;;4796:328;;;;;:::o;5389:474::-;5479:6;5487;5495;5503;5511;5564:3;5552:9;5543:7;5539:23;5535:33;5532:53;;;5581:1;5578;5571:12;5532:53;5604:28;5622:9;5604:28;:::i;:::-;5594:38;;5651:37;5684:2;5673:9;5669:18;5651:37;:::i;:::-;5641:47;;5707:37;5740:2;5729:9;5725:18;5707:37;:::i;:::-;5697:47;;5763:37;5796:2;5785:9;5781:18;5763:37;:::i;:::-;5753:47;;5819:38;5852:3;5841:9;5837:19;5819:38;:::i;:::-;5809:48;;5389:474;;;;;;;;:::o;6475:248::-;6537:6;6545;6598:2;6586:9;6577:7;6573:23;6569:32;6566:52;;;6614:1;6611;6604:12;6566:52;6637:26;6653:9;6637:26;:::i;6728:388::-;6796:6;6804;6857:2;6845:9;6836:7;6832:23;6828:32;6825:52;;;6873:1;6870;6863:12;6825:52;6912:9;6899:23;6931:31;6956:5;6931:31;:::i;:::-;6981:5;-1:-1:-1;7038:2:1;7023:18;;7010:32;7051:33;7010:32;7051:33;:::i;:::-;7103:7;7093:17;;;6728:388;;;;;:::o;7121:385::-;7207:6;7215;7223;7231;7284:3;7272:9;7263:7;7259:23;7255:33;7252:53;;;7301:1;7298;7291:12;7252:53;-1:-1:-1;;7324:23:1;;;7394:2;7379:18;;7366:32;;-1:-1:-1;7445:2:1;7430:18;;7417:32;;7496:2;7481:18;7468:32;;-1:-1:-1;7121:385:1;-1:-1:-1;7121:385:1:o;8045:127::-;8106:10;8101:3;8097:20;8094:1;8087:31;8137:4;8134:1;8127:15;8161:4;8158:1;8151:15;8177:422;8266:1;8309:5;8266:1;8323:270;8344:7;8334:8;8331:21;8323:270;;;8403:4;8399:1;8395:6;8391:17;8385:4;8382:27;8379:53;;;8412:18;;:::i;:::-;8462:7;8452:8;8448:22;8445:55;;;8482:16;;;;8445:55;8561:22;;;;8521:15;;;;8323:270;;;8327:3;8177:422;;;;;:::o;8604:806::-;8653:5;8683:8;8673:80;;-1:-1:-1;8724:1:1;8738:5;;8673:80;8772:4;8762:76;;-1:-1:-1;8809:1:1;8823:5;;8762:76;8854:4;8872:1;8867:59;;;;8940:1;8935:130;;;;8847:218;;8867:59;8897:1;8888:10;;8911:5;;;8935:130;8972:3;8962:8;8959:17;8956:43;;;8979:18;;:::i;:::-;-1:-1:-1;;9035:1:1;9021:16;;9050:5;;8847:218;;9149:2;9139:8;9136:16;9130:3;9124:4;9121:13;9117:36;9111:2;9101:8;9098:16;9093:2;9087:4;9084:12;9080:35;9077:77;9074:159;;;-1:-1:-1;9186:19:1;;;9218:5;;9074:159;9265:34;9290:8;9284:4;9265:34;:::i;:::-;9335:6;9331:1;9327:6;9323:19;9314:7;9311:32;9308:58;;;9346:18;;:::i;:::-;9384:20;;8604:806;-1:-1:-1;;;8604:806:1:o;9415:140::-;9473:5;9502:47;9543:4;9533:8;9529:19;9523:4;9502:47;:::i;9560:217::-;9600:1;9626;9616:132;;9670:10;9665:3;9661:20;9658:1;9651:31;9705:4;9702:1;9695:15;9733:4;9730:1;9723:15;9616:132;-1:-1:-1;9762:9:1;;9560:217::o;9782:125::-;9822:4;9850:1;9847;9844:8;9841:34;;;9855:18;;:::i;:::-;-1:-1:-1;9892:9:1;;9782:125::o;9912:397::-;10114:2;10096:21;;;10153:2;10133:18;;;10126:30;10192:34;10187:2;10172:18;;10165:62;-1:-1:-1;;;10258:2:1;10243:18;;10236:31;10299:3;10284:19;;9912:397::o;10314:168::-;10354:7;10420:1;10416;10412:6;10408:14;10405:1;10402:21;10397:1;10390:9;10383:17;10379:45;10376:71;;;10427:18;;:::i;:::-;-1:-1:-1;10467:9:1;;10314:168::o;10904:128::-;10944:3;10975:1;10971:6;10968:1;10965:13;10962:39;;;10981:18;;:::i;:::-;-1:-1:-1;11017:9:1;;10904:128::o;11812:425::-;12014:2;11996:21;;;12053:2;12033:18;;;12026:30;12092:34;12087:2;12072:18;;12065:62;12163:31;12158:2;12143:18;;12136:59;12227:3;12212:19;;11812:425::o;12594:224::-;12633:3;12661:6;12694:2;12691:1;12687:10;12724:2;12721:1;12717:10;12755:3;12751:2;12747:12;12742:3;12739:21;12736:47;;;12763:18;;:::i;:::-;12799:13;;12594:224;-1:-1:-1;;;;12594:224:1:o;14398:410::-;14600:2;14582:21;;;14639:2;14619:18;;;14612:30;14678:34;14673:2;14658:18;;14651:62;-1:-1:-1;;;14744:2:1;14729:18;;14722:44;14798:3;14783:19;;14398:410::o;18797:127::-;18858:10;18853:3;18849:20;18846:1;18839:31;18889:4;18886:1;18879:15;18913:4;18910:1;18903:15;18929:251;18999:6;19052:2;19040:9;19031:7;19027:23;19023:32;19020:52;;;19068:1;19065;19058:12;19020:52;19100:9;19094:16;19119:31;19144:5;19119:31;:::i;19185:461::-;19238:3;19276:5;19270:12;19303:6;19298:3;19291:19;19329:4;19358:2;19353:3;19349:12;19342:19;;19395:2;19388:5;19384:14;19416:1;19426:195;19440:6;19437:1;19434:13;19426:195;;;19505:13;;-1:-1:-1;;;;;19501:39:1;19489:52;;19561:12;;;;19596:15;;;;19537:1;19455:9;19426:195;;;-1:-1:-1;19637:3:1;;19185:461;-1:-1:-1;;;;;19185:461:1:o;19651:582::-;19950:6;19939:9;19932:25;19993:6;19988:2;19977:9;19973:18;19966:34;20036:3;20031:2;20020:9;20016:18;20009:31;19913:4;20057:57;20109:3;20098:9;20094:19;20086:6;20057:57;:::i;:::-;-1:-1:-1;;;;;20150:32:1;;;;20145:2;20130:18;;20123:60;-1:-1:-1;20214:3:1;20199:19;20192:35;20049:65;19651:582;-1:-1:-1;;;19651:582:1:o;20858:306::-;20946:6;20954;20962;21015:2;21003:9;20994:7;20990:23;20986:32;20983:52;;;21031:1;21028;21021:12;20983:52;21060:9;21054:16;21044:26;;21110:2;21099:9;21095:18;21089:25;21079:35;;21154:2;21143:9;21139:18;21133:25;21123:35;;20858:306;;;;;:::o;21422:217::-;21461:4;21490:6;21546:10;;;;21516;;21568:12;;;21565:38;;;21583:18;;:::i;:::-;21620:13;;21422:217;-1:-1:-1;;;21422:217:1:o;22199:518::-;22478:6;22467:9;22460:25;22521:3;22516:2;22505:9;22501:18;22494:31;22441:4;22542:57;22594:3;22583:9;22579:19;22571:6;22542:57;:::i;:::-;-1:-1:-1;;;;;22635:32:1;;;;22630:2;22615:18;;22608:60;-1:-1:-1;22699:2:1;22684:18;22677:34;22534:65;22199:518;-1:-1:-1;;22199:518:1:o

Swarm Source

ipfs://cae1aa9860d0c3c1ec96887c81814d6dd9f885c71da3c28bd657ae1d8c576da9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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