ETH Price: $3,336.35 (-1.72%)
Gas: 41 Gwei

Contract

0xe8616218e54fc97941369622CcB968dae2BcC94D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve203562192024-07-21 16:51:238 days ago1721580683IN
0xe8616218...ae2BcC94D
0 ETH0.000127455.23593384
Approve191341432024-02-01 14:21:59179 days ago1706797319IN
0xe8616218...ae2BcC94D
0 ETH0.0012365826.55544618
Approve181958162023-09-23 3:24:11311 days ago1695439451IN
0xe8616218...ae2BcC94D
0 ETH0.000183027.51870957
Approve178302292023-08-02 22:14:23362 days ago1691014463IN
0xe8616218...ae2BcC94D
0 ETH0.0011583524.87545563
Transfer175867892023-06-29 18:38:47396 days ago1688063927IN
0xe8616218...ae2BcC94D
0 ETH0.0021831844.60386818
Approve171886212023-05-04 16:54:59452 days ago1683219299IN
0xe8616218...ae2BcC94D
0 ETH0.00496276106.57483704
Approve171819252023-05-03 18:19:23453 days ago1683137963IN
0xe8616218...ae2BcC94D
0 ETH0.0040253986.44487697
Approve171663842023-05-01 13:50:35455 days ago1682949035IN
0xe8616218...ae2BcC94D
0 ETH0.0031458167.55612505
Approve171654942023-05-01 10:50:11455 days ago1682938211IN
0xe8616218...ae2BcC94D
0 ETH0.0025167554.04698501
Transfer171238472023-04-25 14:24:11461 days ago1682432651IN
0xe8616218...ae2BcC94D
0 ETH0.0036378443.0865512
Transfer171096342023-04-23 14:33:47463 days ago1682260427IN
0xe8616218...ae2BcC94D
0 ETH0.0032869448.80031448
Transfer170955432023-04-21 15:06:47465 days ago1682089607IN
0xe8616218...ae2BcC94D
0 ETH0.0028857642.85940322
Transfer170916292023-04-21 1:52:11466 days ago1682041931IN
0xe8616218...ae2BcC94D
0 ETH0.0028098441.71698034
Transfer170861492023-04-20 7:08:11467 days ago1681974491IN
0xe8616218...ae2BcC94D
0 ETH0.0048729757.71548657
Approve170732732023-04-18 11:28:23468 days ago1681817303IN
0xe8616218...ae2BcC94D
0 ETH0.0016482235.3954042
Transfer170689712023-04-17 20:51:47469 days ago1681764707IN
0xe8616218...ae2BcC94D
0 ETH0.0033094739.18626869
Transfer170612062023-04-16 18:27:11470 days ago1681669631IN
0xe8616218...ae2BcC94D
0 ETH0.0021435525.38104221
Transfer170611822023-04-16 18:21:59470 days ago1681669319IN
0xe8616218...ae2BcC94D
0 ETH0.0015867623.5666603
Transfer170611712023-04-16 18:19:47470 days ago1681669187IN
0xe8616218...ae2BcC94D
0 ETH0.0015152922.50514174
Transfer170611512023-04-16 18:15:35470 days ago1681668935IN
0xe8616218...ae2BcC94D
0 ETH0.0015671423.26692874
Transfer170611412023-04-16 18:13:35470 days ago1681668815IN
0xe8616218...ae2BcC94D
0 ETH0.0016889225.07493695
Transfer170611372023-04-16 18:12:47470 days ago1681668767IN
0xe8616218...ae2BcC94D
0 ETH0.0005385224.18921174
Transfer170568992023-04-16 3:46:59471 days ago1681616819IN
0xe8616218...ae2BcC94D
0 ETH0.0009471222.79360858
Approve170568942023-04-16 3:45:59471 days ago1681616759IN
0xe8616218...ae2BcC94D
0 ETH0.0010877223.35884022
Transfer170534722023-04-15 16:06:11471 days ago1681574771IN
0xe8616218...ae2BcC94D
0 ETH0.0023953128.37013274
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
191341622024-02-01 14:25:47179 days ago1706797547
0xe8616218...ae2BcC94D
0.00007547 ETH
191341622024-02-01 14:25:47179 days ago1706797547
0xe8616218...ae2BcC94D
0.00007547 ETH
191341572024-02-01 14:24:47179 days ago1706797487
0xe8616218...ae2BcC94D
0.00032251 ETH
191341572024-02-01 14:24:47179 days ago1706797487
0xe8616218...ae2BcC94D
0.00032251 ETH
191341502024-02-01 14:23:23179 days ago1706797403
0xe8616218...ae2BcC94D
0.00293429 ETH
191341502024-02-01 14:23:23179 days ago1706797403
0xe8616218...ae2BcC94D
0.00293429 ETH
171663862023-05-01 13:50:59455 days ago1682949059
0xe8616218...ae2BcC94D
0.00302969 ETH
171663862023-05-01 13:50:59455 days ago1682949059
0xe8616218...ae2BcC94D
0.00302969 ETH
171137242023-04-24 4:18:47463 days ago1682309927
0xe8616218...ae2BcC94D
0.00296015 ETH
171137242023-04-24 4:18:47463 days ago1682309927
0xe8616218...ae2BcC94D
0.00296015 ETH
170775162023-04-19 1:50:59468 days ago1681869059
0xe8616218...ae2BcC94D
0.00301386 ETH
170775162023-04-19 1:50:59468 days ago1681869059
0xe8616218...ae2BcC94D
0.00301386 ETH
170612192023-04-16 18:29:47470 days ago1681669787
0xe8616218...ae2BcC94D
0.00321624 ETH
170612192023-04-16 18:29:47470 days ago1681669787
0xe8616218...ae2BcC94D
0.00321624 ETH
170569112023-04-16 3:49:23471 days ago1681616963
0xe8616218...ae2BcC94D
0.00341708 ETH
170569112023-04-16 3:49:23471 days ago1681616963
0xe8616218...ae2BcC94D
0.00341708 ETH
170532882023-04-15 15:28:35471 days ago1681572515
0xe8616218...ae2BcC94D
0.00416789 ETH
170532882023-04-15 15:28:35471 days ago1681572515
0xe8616218...ae2BcC94D
0.00416789 ETH
170529382023-04-15 14:16:47471 days ago1681568207
0xe8616218...ae2BcC94D
0.00455434 ETH
170529382023-04-15 14:16:47471 days ago1681568207
0xe8616218...ae2BcC94D
0.00455434 ETH
170490042023-04-15 0:48:35472 days ago1681519715
0xe8616218...ae2BcC94D
0.00338633 ETH
170490042023-04-15 0:48:35472 days ago1681519715
0xe8616218...ae2BcC94D
0.00338633 ETH
170351052023-04-12 23:24:11474 days ago1681341851
0xe8616218...ae2BcC94D
0.00362963 ETH
170351052023-04-12 23:24:11474 days ago1681341851
0xe8616218...ae2BcC94D
0.00362963 ETH
170206852023-04-10 22:19:11476 days ago1681165151
0xe8616218...ae2BcC94D
0.00365763 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Okami

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-14
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

interface Protections {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
}

contract Okami is IERC20 {
    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 _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 100_000_000;
    string constant private _name = "Okami";
    string constant private _symbol = "OKM";
    uint8 constant private _decimals = 18;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 totalSwap;
    }

    Fees public _taxRates = Fees({
        buyFee: 700,
        sellFee: 1400,
        transferFee: 700
    });

    Ratios public _ratios = Ratios({
        liquidity: 200,
        marketing: 500,
        totalSwap: 700
    });

    uint256 constant public maxBuyTaxes = 1400;
    uint256 constant public maxSellTaxes = 1400;
    uint256 constant public maxTransferTaxes = 1400;
    uint256 constant public maxRoundtripTax = 2500;
    uint256 constant masterTaxDivisor = 10000;

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable public marketingWallet = payable(0xD041bc030Db10B1a08755DB36A6d9FD0c9d74455);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Protections protections;
    uint256 public launchStamp;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

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

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

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

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.

    address private _owner;

    modifier onlyOwner() { require(_owner == msg.sender, "Caller =/= owner."); _; }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    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 pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { if (_tTotal == 0) { revert(); } 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 approveContractContingency() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    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 setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            lpPairs[pair] = false;
            protections.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.");
            }
            require(!lpPairs[pair], "Pair already added to list.");
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            protections.setLpPair(pair, true);
        }
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!tradingEnabled);
        require(initializer != address(this), "Can't be self.");
        protections = Protections(initializer);
    }

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

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

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

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

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

    function removeSniper(address account) external onlyOwner {
        protections.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        protections.setProtections(_antiSnipe, _antiBlock);
    }
    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

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

    function setWallets(address payable marketing) external onlyOwner {
        require(marketing != address(0), "Cannot be zero address.");
        marketingWallet = payable(marketing);
    }

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

    function setSwapSettings(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 PI.");
        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 setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion);
        require(router != address(this) 
                && presale != address(this) 
                && lpPair != router 
                && lpPair != presale, "Just don't.");
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
        }
    }

    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)
            && from != address(protections)
            && to != address(protections);
    }

    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");
        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 (sell) {
            if (!inSwap) {
                if (contractSwapEnabled
                   && !presaleAddresses[to]
                   && !presaleAddresses[from]
                ) {
                    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 liquidityBalance = (address(this).balance * toLiquify) / swapAmt;

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

        bool success;
        (success,) = marketingWallet.call{value: address(this).balance, gas: 55000}("");
    }

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(protections) == address(0)){
            protections = Protections(address(this));
        }
        try protections.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        allowedPresaleExclusion = false;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
        launchStamp = block.timestamp;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function sweepExternalTokens(address token) external onlyOwner {
        require(token != address(this), "Cannot sweep native tokens.");
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]*10**_decimals, "Not enough tokens.");
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

    function finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (_hasLimits(from, to)) { bool checked;
            try protections.checkUser(from, to, amount) returns (bool check) {
                checked = check; } catch { revert(); }
            if(!checked) { revert(); }
        }
        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);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        if (address(protections) == address(this)
            && (block.chainid == 1
            || block.chainid == 56)) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }
}

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":"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":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","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":[{"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":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","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":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","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":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","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":"pure","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"}]

60006002556008805460ff191660011790556102bc608081905261057860a05260c0819052600980546502bc057802bc65ffffffffffff199182161790915561014060405260c860e0526101f46101005261012091909152600a80546502bc01f400c89216919091178155600d8054600161ff0160a01b03191673d041bc030db10b1a08755db36a6d9fd0c9d7445517905560118190556012805461ffff19168155601480546001600160a01b03191633179055620000be91620006fd565b620000ce906305f5e10062000715565b601480546001600160a01b03908116600090815260208190526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001226012600a620006fd565b62000132906305f5e10062000715565b60405190815260200160405180910390a3466038036200017a57600b8054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000275565b46606103620001b157600b8054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000275565b4660011480620001c15750466004145b80620001cd5750466003145b156200020157600b8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000275565b4661a86a036200023957600b8054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000275565b4660fa036200027057600b8054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000275565b600080fd5b600b60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ef91906200072f565b6001600160a01b031663c9c65396600b60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037791906200072f565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620003c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ea91906200072f565b600c80546001600160a01b0319166001600160a01b039283169081179091556000908152600160208190526040909120805460ff19169091179055601454600b5462000444929182169161010090910416600019620004e7565b600b546200046590309061010090046001600160a01b0316600019620004e7565b601480546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e228054821683179055955490941683526004909152902080549092161790556200075a565b6001600160a01b038316620005395760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620005875760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000530565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200063f578160001904821115620006235762000623620005e8565b808516156200063157918102915b93841c939080029062000603565b509250929050565b6000826200065857506001620006f7565b816200066757506000620006f7565b81600181146200068057600281146200068b57620006ab565b6001915050620006f7565b60ff8411156200069f576200069f620005e8565b50506001821b620006f7565b5060208310610133831016604e8410600b8410161715620006d0575081810a620006f7565b620006dc8383620005fe565b8060001904821115620006f357620006f3620005e8565b0290505b92915050565b60006200070e60ff84168362000647565b9392505050565b8082028115828204841417620006f757620006f7620005e8565b6000602082840312156200074257600080fd5b81516001600160a01b03811681146200070e57600080fd5b613d58806200076a6000396000f3fe6080604052600436106103645760003560e01c806350a8e016116101c6578063ab558e4d116100f7578063dd62ed3e11610095578063ee5d9c2d1161006f578063ee5d9c2d14610a14578063fb78680d14610a29578063fdb78c0e14610a49578063feadde9c14610a6a57600080fd5b8063dd62ed3e1461098e578063eafb5a3c146109d4578063eb50e70e146109f457600080fd5b8063b7df8b36116100d1578063b7df8b3614610903578063bcd96a251461091d578063bfc2fc351461093d578063cf8477061461095d57600080fd5b8063ab558e4d146108e3578063b1b08f71146105be578063b3d514fb146105be57600080fd5b806378648edf116101645780638a63bd9b1161013e5780638a63bd9b1461086d5780638a8c523c1461088257806395d89b4114610897578063a9059cbb146108c357600080fd5b806378648edf1461081a57806380c581d11461082f578063893d20e81461084f57600080fd5b80635c24b074116101a05780635c24b0741461078f57806370a08231146107af578063715018a6146107e557806375f0a874146107fa57600080fd5b806350a8e0161461073a578063590ffdce146107595780635a6f09181461077957600080fd5b806328577751116102a0578063452ed4f11161023e5780634bbb93eb116102185780634bbb93eb146106a15780634e718e48146106c15780634fb2e45d146106e15780634fbee1931461070157600080fd5b8063452ed4f11461065157806346ea7ac8146106715780634ada218b1461068757600080fd5b80632e8fa8211161027a5780632e8fa821146105d4578063313ce567146105ea57806332cde6641461061157806333251a0b1461063157600080fd5b806328577751146105935780632b112e49146105a95780632b28fc7a146105be57600080fd5b806307dd79e01161030d57806313b4a7f4116102e757806313b4a7f41461051e57806318160ddd1461053e57806323b872dd146105535780632610eaca1461057357600080fd5b806307dd79e01461049b578063095ea7b3146104c55780630dcbcf1c146104e557600080fd5b8063069d955f1161033e578063069d955f146103e957806306fdde031461043f5780630758d9241461047657600080fd5b806303fd2a45146103705780630445b667146103a3578063044df726146103c757600080fd5b3661036b57005b600080fd5b34801561037c57600080fd5b5061038661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103af57600080fd5b506103b9600e5481565b60405190815260200161039a565b3480156103d357600080fd5b506103e76103e236600461366d565b610a8a565b005b3480156103f557600080fd5b5060095461041a9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161039a565b34801561044b57600080fd5b506040805180820190915260058152644f6b616d6960d81b60208201525b60405161039a91906136a6565b34801561048257600080fd5b50600b546103869061010090046001600160a01b031681565b3480156104a757600080fd5b50600b546104b59060ff1681565b604051901515815260200161039a565b3480156104d157600080fd5b506104b56104e0366004613709565b610b48565b3480156104f157600080fd5b506104b5610500366004613735565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561052a57600080fd5b506103e7610539366004613752565b610b5f565b34801561054a57600080fd5b506103b9610d1d565b34801561055f57600080fd5b506104b561056e366004613780565b610d64565b34801561057f57600080fd5b506103e761058e366004613897565b610ddc565b34801561059f57600080fd5b506103b960115481565b3480156105b557600080fd5b506103b9610f91565b3480156105ca57600080fd5b506103b961057881565b3480156105e057600080fd5b506103b9600f5481565b3480156105f657600080fd5b506105ff61100f565b60405160ff909116815260200161039a565b34801561061d57600080fd5b506103e761062c366004613970565b61103d565b34801561063d57600080fd5b506103e761064c366004613735565b6111f0565b34801561065d57600080fd5b50600c54610386906001600160a01b031681565b34801561067d57600080fd5b506103b96109c481565b34801561069357600080fd5b506012546104b59060ff1681565b3480156106ad57600080fd5b506103b96106bc3660046139b3565b6112a1565b3480156106cd57600080fd5b506103e76106dc3660046139b3565b6112d5565b3480156106ed57600080fd5b506103e76106fc366004613735565b611373565b34801561070d57600080fd5b506104b561071c366004613735565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561074657600080fd5b506012546104b590610100900460ff1681565b34801561076557600080fd5b506103e76107743660046139cc565b611575565b34801561078557600080fd5b506103b960135481565b34801561079b57600080fd5b506103e76107aa366004613735565b6115e8565b3480156107bb57600080fd5b506103b96107ca366004613735565b6001600160a01b031660009081526020819052604090205490565b3480156107f157600080fd5b506103e76116c2565b34801561080657600080fd5b50600d54610386906001600160a01b031681565b34801561082657600080fd5b506103e761176f565b34801561083b57600080fd5b506103e761084a3660046139cc565b6117c6565b34801561085b57600080fd5b506014546001600160a01b0316610386565b34801561087957600080fd5b506104b56119b0565b34801561088e57600080fd5b506103e7611a20565b3480156108a357600080fd5b506040805180820190915260038152624f4b4d60e81b6020820152610469565b3480156108cf57600080fd5b506104b56108de366004613709565b611c55565b3480156108ef57600080fd5b506103e76108fe366004613735565b611c6c565b34801561090f57600080fd5b506010546104b59060ff1681565b34801561092957600080fd5b506103e76109383660046139ea565b611df6565b34801561094957600080fd5b506103e761095836600461366d565b611f10565b34801561096957600080fd5b50600a5461041a9061ffff808216916201000081048216916401000000009091041683565b34801561099a57600080fd5b506103b96109a9366004613752565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109e057600080fd5b506103e76109ef366004613735565b611fbb565b348015610a0057600080fd5b506103e7610a0f366004613735565b6123bc565b348015610a2057600080fd5b506103e761247c565b348015610a3557600080fd5b506103e7610a44366004613a1d565b612558565b348015610a5557600080fd5b50600d546104b590600160a81b900460ff1681565b348015610a7657600080fd5b506103e7610a853660046139cc565b61281a565b6014546001600160a01b03163314610ad75760405162461bcd60e51b81526020600482015260116024820152600080516020613d0383398151915260448201526064015b60405180910390fd5b60125460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610b2c57600080fd5b505af1158015610b40573d6000803e3d6000fd5b505050505050565b6000610b5533848461288d565b5060015b92915050565b6014546001600160a01b03163314610ba75760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b60085460ff16610bb657600080fd5b6001600160a01b0382163014801590610bd857506001600160a01b0381163014155b8015610bf25750600c546001600160a01b03838116911614155b8015610c0c5750600c546001600160a01b03828116911614155b610c465760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610ace565b806001600160a01b0316826001600160a01b031603610ca8576001600160a01b03811660009081526004602090815260408083208054600160ff19918216811790925560079093529220805490911682179055610ca4908290611575565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526007909252808320805486168317905592825291902080549092168117909155610d12908390611575565b610ca4816001611575565b6000610d2b6012600a613b49565b610d39906305f5e100613b58565b600003610d4557600080fd5b610d516012600a613b49565b610d5f906305f5e100613b58565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610dc9576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610dc3908490613b6f565b90915550505b610dd4848484612986565b949350505050565b6014546001600160a01b03163314610e245760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b8051825114610e755760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ace565b60005b82518161ffff161015610f8c57610e916012600a613b49565b828261ffff1681518110610ea757610ea7613b82565b6020026020010151610eb99190613b58565b336000908152602081905260409020541015610f175760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610ace565b610f7933848361ffff1681518110610f3157610f31613b82565b60200260200101516012600a610f479190613b49565b858561ffff1681518110610f5d57610f5d613b82565b6020026020010151610f6f9190613b58565b6000806001612c70565b5080610f8481613b98565b915050610e78565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354610feb9190613bb9565b610ff76012600a613b49565b611005906305f5e100613b58565b610d5f9190613b6f565b600061101d6012600a613b49565b61102b906305f5e100613b58565b60000361103757600080fd5b50601290565b6014546001600160a01b031633146110855760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600b5460ff16156110d85760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610ace565b6105788361ffff16111580156110f457506105788261ffff1611155b801561110657506105788161ffff1611155b6111525760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ace565b6109c461115f8385613bcc565b61ffff1611156111b15760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610ace565b6009805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6014546001600160a01b031633146112385760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6012546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b5050505050565b600c546001600160a01b0316600090815260208190526040812054612710906112cb908490613b58565b610b599190613bee565b6014546001600160a01b0316331461131d5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b609681111561136e5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610ace565b601155565b6014546001600160a01b031633146113bb5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6001600160a01b0381166114375760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ace565b61deac196001600160a01b038216016114b85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ace565b6014546114cf906001600160a01b03166000611575565b6114da816001611575565b6014546001600160a01b031660009081526020819052604090205415611523576014546001600160a01b031660008181526020819052604090205461152191908390610f6f565b505b601480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6014546001600160a01b031633146115bd5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6014546001600160a01b031633146116305760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b60125460ff161561164057600080fd5b306001600160a01b038216036116985760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ace565b601280546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6014546001600160a01b0316331461170a5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b601454611721906001600160a01b03166000611575565b601480546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6014546001600160a01b031633146117b75760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600b805460ff19166001179055565b6014546001600160a01b0316331461180e5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b80611881576001600160a01b03828116600081815260016020526040808220805460ff1916905560125490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610b2c57600080fd5b600254156118e8576203f4806002544261189b9190613b6f565b116118e85760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610ace565b6001600160a01b03821660009081526001602052604090205460ff16156119515760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610ace565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560125491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610b12565b6014546000906001600160a01b031633146119fb5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600b54611a1a90309061010090046001600160a01b031660001961288d565b50600190565b6014546001600160a01b03163314611a685760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b60125460ff1615611abb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ace565b601254610100900460ff16611b125760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ace565b6012546201000090046001600160a01b0316611b42576012805462010000600160b01b0319163062010000021790555b60128054600c54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526064810193909352620100009091041690636c115c3490608401600060405180830381600087803b158015611bb657600080fd5b505af1925050508015611bc7575060015b5060128054600160ff1991821617909155600880549091169055600c546001600160a01b031660009081526020819052604090205461271090611c0b90600a613b58565b611c159190613bee565b600e55600c546001600160a01b031660009081526020819052604090205461271090611c4290601e613b58565b611c4c9190613bee565b600f5542601355565b6000611c62338484612986565b5060019392505050565b6014546001600160a01b03163314611cb45760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b306001600160a01b03821603611d0c5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610ace565b6014546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d879190613c10565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8c9190613c29565b6014546001600160a01b03163314611e3e5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600a805461ffff838116620100000263ffffffff1990921690851617179055611e678183613bcc565b600a805465ffff00000000191664010000000061ffff93841602179055600954600091611e9d9162010000810482169116613bcc565b600a5461ffff9182169250640100000000900416811015610f8c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610ace565b6014546001600160a01b03163314611f585760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600d805460ff60a81b1916600160a81b841515908102919091179091556010805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6014546001600160a01b031633146120035760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b601254610100900460ff161561205b5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610ace565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c49190613c46565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121359190613c46565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a49190613c46565b600c546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661233a57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561220f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122339190613c46565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a49190613c46565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190613c46565b600c80546001600160a01b0319166001600160a01b0392909216919091179055612356565b600c80546001600160a01b0319166001600160a01b0383161790555b600b805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600c5482166000908152600160208190526040909120805460ff191690911790559154610f8c92309291041660001961288d565b6014546001600160a01b031633146124045760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6001600160a01b03811661245a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610ace565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031633146124c45760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b601254610100900460ff161561251c5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ace565b6014546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612555573d6000803e3d6000fd5b50565b6014546001600160a01b031633146125a05760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b82846125ae6012600a613b49565b6125bc906305f5e100613b58565b6125c69190613b58565b6125d09190613bee565b600e5580826125e16012600a613b49565b6125ef906305f5e100613b58565b6125f99190613b58565b6126039190613bee565b600f819055600e5411156126635760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610ace565b600c546001600160a01b03166000908152602081905260409020546127109061268d906096613b58565b6126979190613bee565b600f5411156126f45760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610ace565b620f42406127046012600a613b49565b612712906305f5e100613b58565b61271c9190613bee565b600f5410156127845760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610ace565b620f42406127946012600a613b49565b6127a2906305f5e100613b58565b6127ac9190613bee565b600e5410156128145760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610ace565b50505050565b6014546001600160a01b031633146128625760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166128d95760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ace565b6001600160a01b0382166129255760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ace565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166129ec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ace565b6001600160a01b038316612a4e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ace565b60008211612ab05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ace565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612ade5760019250612b0c565b6001600160a01b03861660009081526001602052604090205460ff1615612b085760019150612b0c565b5060015b612b168787612f23565b15612b6d5760125460ff16612b6d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ace565b8115612c5757600d54600160a01b900460ff16612c5757600d54600160a81b900460ff168015612bb657506001600160a01b03861660009081526007602052604090205460ff16155b8015612bdb57506001600160a01b03871660009081526007602052604090205460ff16155b15612c575730600090815260208190526040902054600e548110612c5557600f5460105460ff1615612c3f57601154600c546001600160a01b031660009081526020819052604090205461271091612c3291613b58565b612c3c9190613bee565b90505b808210612c4a578091505b612c538261303a565b505b505b612c65878787868686612c70565b979650505050505050565b6000612c7c8787612f23565b15612d165760125460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015612cff575060408051601f3d908101601f19168201909252612cfc91810190613c29565b60015b612d0857600080fd5b905080612d1457600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680612d5857506001600160a01b03871660009081526006602052604090205460ff165b15612d61575060005b6001600160a01b03881660009081526020819052604081208054889290612d89908490613b6f565b909155506000905081612d9c5786612da8565b612da88987878a613406565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612dde9190613bb9565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e2a91815260200190565b60405180910390a3601254610100900460ff16612f1457612e4b898961351b565b601254610100900460ff16158015612e685750612e688989612f23565b8015612e8d57506001600160a01b03891660009081526005602052604090205460ff16155b8015612eb257506001600160a01b03881660009081526005602052604090205460ff16155b8015612ebc575083155b15612f145760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610ace565b50600198975050505050505050565b6014546000906001600160a01b03848116911614801590612f5257506014546001600160a01b03838116911614155b8015612f6957506014546001600160a01b03163214155b8015612f8e57506001600160a01b03821660009081526004602052604090205460ff16155b8015612fb357506001600160a01b03831660009081526004602052604090205460ff16155b8015612fca57506001600160a01b03821661dead14155b8015612fde57506001600160a01b03821615155b8015612ff357506001600160a01b0383163014155b801561301357506012546001600160a01b03848116620100009092041614155b801561303357506012546001600160a01b03838116620100009092041614155b9392505050565b600d805460ff60a01b1916600160a01b17905560408051606081018252600a5461ffff808216835262010000820481166020840152640100000000909104169181018290529060000361308d57506133f6565b306000908152600360209081526040808320600b5461010090046001600160a01b03168452909152902054600019146130f057306000908152600360209081526040808320600b5461010090046001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856131119190613b58565b61311b9190613bee565b6131259190613bee565b905060006131338285613b6f565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061316d5761316d613b82565b60200260200101906001600160a01b031690816001600160a01b031681525050600b60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132049190613c46565b8160018151811061321757613217613b82565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b81526101009091049091169063791ac94790613264908590600090869030904290600401613c63565b600060405180830381600087803b15801561327e57600080fd5b505af192505050801561328f575060015b61329c57505050506133f6565b6000826132a98547613b58565b6132b39190613bee565b9050831561339557600b5460405163f305d71960e01b815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af19350505050801561334a575060408051601f3d908101601f1916820190925261334791810190613cd4565b60015b6133585750505050506133f6565b505060408051838152602081018790527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b600d546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d80600081146133e7576040519150601f19603f3d011682016040523d82523d6000602084013e6133ec565b606091505b5050505050505050505b50600d805460ff60a01b19169055565b600080841561341c575060095461ffff16613446565b8315613435575060095462010000900461ffff16613446565b50600954640100000000900461ffff165b806000036134575782915050610dd4565b6012546201000090046001600160a01b031630148015613481575046600114806134815750466038145b1561348b57506111945b600061271061349a8386613b58565b6134a49190613bee565b905080156135115730600090815260208190526040812080548392906134cb908490613bb9565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612c658185613b6f565b601254610100900460ff161561357f5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610ace565b6135898282612f23565b1580156135a35750600c546001600160a01b038281169116145b15610ca4576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556012805461ff00191661010017908190556201000090041661361b576012805462010000600160b01b0319163062010000021790555b600d805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001611faf565b801515811461255557600080fd5b6000806040838503121561368057600080fd5b823561368b8161365f565b9150602083013561369b8161365f565b809150509250929050565b600060208083528351808285015260005b818110156136d3578581018301518582016040015282016136b7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461255557600080fd5b6000806040838503121561371c57600080fd5b8235613727816136f4565b946020939093013593505050565b60006020828403121561374757600080fd5b8135613033816136f4565b6000806040838503121561376557600080fd5b8235613770816136f4565b9150602083013561369b816136f4565b60008060006060848603121561379557600080fd5b83356137a0816136f4565b925060208401356137b0816136f4565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613800576138006137c1565b604052919050565b600067ffffffffffffffff821115613822576138226137c1565b5060051b60200190565b600082601f83011261383d57600080fd5b8135602061385261384d83613808565b6137d7565b82815260059290921b8401810191818101908684111561387157600080fd5b8286015b8481101561388c5780358352918301918301613875565b509695505050505050565b600080604083850312156138aa57600080fd5b823567ffffffffffffffff808211156138c257600080fd5b818501915085601f8301126138d657600080fd5b813560206138e661384d83613808565b82815260059290921b8401810191818101908984111561390557600080fd5b948201945b8386101561392c57853561391d816136f4565b8252948201949082019061390a565b9650508601359250508082111561394257600080fd5b5061394f8582860161382c565b9150509250929050565b803561ffff8116811461396b57600080fd5b919050565b60008060006060848603121561398557600080fd5b61398e84613959565b925061399c60208501613959565b91506139aa60408501613959565b90509250925092565b6000602082840312156139c557600080fd5b5035919050565b600080604083850312156139df57600080fd5b823561368b816136f4565b600080604083850312156139fd57600080fd5b613a0683613959565b9150613a1460208401613959565b90509250929050565b60008060008060808587031215613a3357600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613aa0578160001904821115613a8657613a86613a4f565b80851615613a9357918102915b93841c9390800290613a6a565b509250929050565b600082613ab757506001610b59565b81613ac457506000610b59565b8160018114613ada5760028114613ae457613b00565b6001915050610b59565b60ff841115613af557613af5613a4f565b50506001821b610b59565b5060208310610133831016604e8410600b8410161715613b23575081810a610b59565b613b2d8383613a65565b8060001904821115613b4157613b41613a4f565b029392505050565b600061303360ff841683613aa8565b8082028115828204841417610b5957610b59613a4f565b81810381811115610b5957610b59613a4f565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103613baf57613baf613a4f565b6001019392505050565b80820180821115610b5957610b59613a4f565b61ffff818116838216019080821115613be757613be7613a4f565b5092915050565b600082613c0b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613c2257600080fd5b5051919050565b600060208284031215613c3b57600080fd5b81516130338161365f565b600060208284031215613c5857600080fd5b8151613033816136f4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613cb35784516001600160a01b031683529383019391830191600101613c8e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ce957600080fd5b835192506020840151915060408401519050925092509256fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212203368409b95ec66194f4fcaa3dc1ac86826afa71fdee18005b5190a59fa7f564a64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103645760003560e01c806350a8e016116101c6578063ab558e4d116100f7578063dd62ed3e11610095578063ee5d9c2d1161006f578063ee5d9c2d14610a14578063fb78680d14610a29578063fdb78c0e14610a49578063feadde9c14610a6a57600080fd5b8063dd62ed3e1461098e578063eafb5a3c146109d4578063eb50e70e146109f457600080fd5b8063b7df8b36116100d1578063b7df8b3614610903578063bcd96a251461091d578063bfc2fc351461093d578063cf8477061461095d57600080fd5b8063ab558e4d146108e3578063b1b08f71146105be578063b3d514fb146105be57600080fd5b806378648edf116101645780638a63bd9b1161013e5780638a63bd9b1461086d5780638a8c523c1461088257806395d89b4114610897578063a9059cbb146108c357600080fd5b806378648edf1461081a57806380c581d11461082f578063893d20e81461084f57600080fd5b80635c24b074116101a05780635c24b0741461078f57806370a08231146107af578063715018a6146107e557806375f0a874146107fa57600080fd5b806350a8e0161461073a578063590ffdce146107595780635a6f09181461077957600080fd5b806328577751116102a0578063452ed4f11161023e5780634bbb93eb116102185780634bbb93eb146106a15780634e718e48146106c15780634fb2e45d146106e15780634fbee1931461070157600080fd5b8063452ed4f11461065157806346ea7ac8146106715780634ada218b1461068757600080fd5b80632e8fa8211161027a5780632e8fa821146105d4578063313ce567146105ea57806332cde6641461061157806333251a0b1461063157600080fd5b806328577751146105935780632b112e49146105a95780632b28fc7a146105be57600080fd5b806307dd79e01161030d57806313b4a7f4116102e757806313b4a7f41461051e57806318160ddd1461053e57806323b872dd146105535780632610eaca1461057357600080fd5b806307dd79e01461049b578063095ea7b3146104c55780630dcbcf1c146104e557600080fd5b8063069d955f1161033e578063069d955f146103e957806306fdde031461043f5780630758d9241461047657600080fd5b806303fd2a45146103705780630445b667146103a3578063044df726146103c757600080fd5b3661036b57005b600080fd5b34801561037c57600080fd5b5061038661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103af57600080fd5b506103b9600e5481565b60405190815260200161039a565b3480156103d357600080fd5b506103e76103e236600461366d565b610a8a565b005b3480156103f557600080fd5b5060095461041a9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161039a565b34801561044b57600080fd5b506040805180820190915260058152644f6b616d6960d81b60208201525b60405161039a91906136a6565b34801561048257600080fd5b50600b546103869061010090046001600160a01b031681565b3480156104a757600080fd5b50600b546104b59060ff1681565b604051901515815260200161039a565b3480156104d157600080fd5b506104b56104e0366004613709565b610b48565b3480156104f157600080fd5b506104b5610500366004613735565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561052a57600080fd5b506103e7610539366004613752565b610b5f565b34801561054a57600080fd5b506103b9610d1d565b34801561055f57600080fd5b506104b561056e366004613780565b610d64565b34801561057f57600080fd5b506103e761058e366004613897565b610ddc565b34801561059f57600080fd5b506103b960115481565b3480156105b557600080fd5b506103b9610f91565b3480156105ca57600080fd5b506103b961057881565b3480156105e057600080fd5b506103b9600f5481565b3480156105f657600080fd5b506105ff61100f565b60405160ff909116815260200161039a565b34801561061d57600080fd5b506103e761062c366004613970565b61103d565b34801561063d57600080fd5b506103e761064c366004613735565b6111f0565b34801561065d57600080fd5b50600c54610386906001600160a01b031681565b34801561067d57600080fd5b506103b96109c481565b34801561069357600080fd5b506012546104b59060ff1681565b3480156106ad57600080fd5b506103b96106bc3660046139b3565b6112a1565b3480156106cd57600080fd5b506103e76106dc3660046139b3565b6112d5565b3480156106ed57600080fd5b506103e76106fc366004613735565b611373565b34801561070d57600080fd5b506104b561071c366004613735565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561074657600080fd5b506012546104b590610100900460ff1681565b34801561076557600080fd5b506103e76107743660046139cc565b611575565b34801561078557600080fd5b506103b960135481565b34801561079b57600080fd5b506103e76107aa366004613735565b6115e8565b3480156107bb57600080fd5b506103b96107ca366004613735565b6001600160a01b031660009081526020819052604090205490565b3480156107f157600080fd5b506103e76116c2565b34801561080657600080fd5b50600d54610386906001600160a01b031681565b34801561082657600080fd5b506103e761176f565b34801561083b57600080fd5b506103e761084a3660046139cc565b6117c6565b34801561085b57600080fd5b506014546001600160a01b0316610386565b34801561087957600080fd5b506104b56119b0565b34801561088e57600080fd5b506103e7611a20565b3480156108a357600080fd5b506040805180820190915260038152624f4b4d60e81b6020820152610469565b3480156108cf57600080fd5b506104b56108de366004613709565b611c55565b3480156108ef57600080fd5b506103e76108fe366004613735565b611c6c565b34801561090f57600080fd5b506010546104b59060ff1681565b34801561092957600080fd5b506103e76109383660046139ea565b611df6565b34801561094957600080fd5b506103e761095836600461366d565b611f10565b34801561096957600080fd5b50600a5461041a9061ffff808216916201000081048216916401000000009091041683565b34801561099a57600080fd5b506103b96109a9366004613752565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109e057600080fd5b506103e76109ef366004613735565b611fbb565b348015610a0057600080fd5b506103e7610a0f366004613735565b6123bc565b348015610a2057600080fd5b506103e761247c565b348015610a3557600080fd5b506103e7610a44366004613a1d565b612558565b348015610a5557600080fd5b50600d546104b590600160a81b900460ff1681565b348015610a7657600080fd5b506103e7610a853660046139cc565b61281a565b6014546001600160a01b03163314610ad75760405162461bcd60e51b81526020600482015260116024820152600080516020613d0383398151915260448201526064015b60405180910390fd5b60125460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610b2c57600080fd5b505af1158015610b40573d6000803e3d6000fd5b505050505050565b6000610b5533848461288d565b5060015b92915050565b6014546001600160a01b03163314610ba75760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b60085460ff16610bb657600080fd5b6001600160a01b0382163014801590610bd857506001600160a01b0381163014155b8015610bf25750600c546001600160a01b03838116911614155b8015610c0c5750600c546001600160a01b03828116911614155b610c465760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610ace565b806001600160a01b0316826001600160a01b031603610ca8576001600160a01b03811660009081526004602090815260408083208054600160ff19918216811790925560079093529220805490911682179055610ca4908290611575565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526007909252808320805486168317905592825291902080549092168117909155610d12908390611575565b610ca4816001611575565b6000610d2b6012600a613b49565b610d39906305f5e100613b58565b600003610d4557600080fd5b610d516012600a613b49565b610d5f906305f5e100613b58565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610dc9576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610dc3908490613b6f565b90915550505b610dd4848484612986565b949350505050565b6014546001600160a01b03163314610e245760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b8051825114610e755760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ace565b60005b82518161ffff161015610f8c57610e916012600a613b49565b828261ffff1681518110610ea757610ea7613b82565b6020026020010151610eb99190613b58565b336000908152602081905260409020541015610f175760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610ace565b610f7933848361ffff1681518110610f3157610f31613b82565b60200260200101516012600a610f479190613b49565b858561ffff1681518110610f5d57610f5d613b82565b6020026020010151610f6f9190613b58565b6000806001612c70565b5080610f8481613b98565b915050610e78565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354610feb9190613bb9565b610ff76012600a613b49565b611005906305f5e100613b58565b610d5f9190613b6f565b600061101d6012600a613b49565b61102b906305f5e100613b58565b60000361103757600080fd5b50601290565b6014546001600160a01b031633146110855760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600b5460ff16156110d85760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610ace565b6105788361ffff16111580156110f457506105788261ffff1611155b801561110657506105788161ffff1611155b6111525760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ace565b6109c461115f8385613bcc565b61ffff1611156111b15760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610ace565b6009805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6014546001600160a01b031633146112385760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6012546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b5050505050565b600c546001600160a01b0316600090815260208190526040812054612710906112cb908490613b58565b610b599190613bee565b6014546001600160a01b0316331461131d5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b609681111561136e5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610ace565b601155565b6014546001600160a01b031633146113bb5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6001600160a01b0381166114375760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ace565b61deac196001600160a01b038216016114b85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ace565b6014546114cf906001600160a01b03166000611575565b6114da816001611575565b6014546001600160a01b031660009081526020819052604090205415611523576014546001600160a01b031660008181526020819052604090205461152191908390610f6f565b505b601480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6014546001600160a01b031633146115bd5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6014546001600160a01b031633146116305760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b60125460ff161561164057600080fd5b306001600160a01b038216036116985760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ace565b601280546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6014546001600160a01b0316331461170a5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b601454611721906001600160a01b03166000611575565b601480546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6014546001600160a01b031633146117b75760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600b805460ff19166001179055565b6014546001600160a01b0316331461180e5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b80611881576001600160a01b03828116600081815260016020526040808220805460ff1916905560125490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610b2c57600080fd5b600254156118e8576203f4806002544261189b9190613b6f565b116118e85760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610ace565b6001600160a01b03821660009081526001602052604090205460ff16156119515760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610ace565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560125491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610b12565b6014546000906001600160a01b031633146119fb5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600b54611a1a90309061010090046001600160a01b031660001961288d565b50600190565b6014546001600160a01b03163314611a685760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b60125460ff1615611abb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ace565b601254610100900460ff16611b125760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ace565b6012546201000090046001600160a01b0316611b42576012805462010000600160b01b0319163062010000021790555b60128054600c54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526064810193909352620100009091041690636c115c3490608401600060405180830381600087803b158015611bb657600080fd5b505af1925050508015611bc7575060015b5060128054600160ff1991821617909155600880549091169055600c546001600160a01b031660009081526020819052604090205461271090611c0b90600a613b58565b611c159190613bee565b600e55600c546001600160a01b031660009081526020819052604090205461271090611c4290601e613b58565b611c4c9190613bee565b600f5542601355565b6000611c62338484612986565b5060019392505050565b6014546001600160a01b03163314611cb45760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b306001600160a01b03821603611d0c5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610ace565b6014546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d879190613c10565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8c9190613c29565b6014546001600160a01b03163314611e3e5760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600a805461ffff838116620100000263ffffffff1990921690851617179055611e678183613bcc565b600a805465ffff00000000191664010000000061ffff93841602179055600954600091611e9d9162010000810482169116613bcc565b600a5461ffff9182169250640100000000900416811015610f8c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610ace565b6014546001600160a01b03163314611f585760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b600d805460ff60a81b1916600160a81b841515908102919091179091556010805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6014546001600160a01b031633146120035760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b601254610100900460ff161561205b5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610ace565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c49190613c46565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121359190613c46565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a49190613c46565b600c546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661233a57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561220f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122339190613c46565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a49190613c46565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190613c46565b600c80546001600160a01b0319166001600160a01b0392909216919091179055612356565b600c80546001600160a01b0319166001600160a01b0383161790555b600b805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600c5482166000908152600160208190526040909120805460ff191690911790559154610f8c92309291041660001961288d565b6014546001600160a01b031633146124045760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6001600160a01b03811661245a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610ace565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031633146124c45760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b601254610100900460ff161561251c5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ace565b6014546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612555573d6000803e3d6000fd5b50565b6014546001600160a01b031633146125a05760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b82846125ae6012600a613b49565b6125bc906305f5e100613b58565b6125c69190613b58565b6125d09190613bee565b600e5580826125e16012600a613b49565b6125ef906305f5e100613b58565b6125f99190613b58565b6126039190613bee565b600f819055600e5411156126635760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610ace565b600c546001600160a01b03166000908152602081905260409020546127109061268d906096613b58565b6126979190613bee565b600f5411156126f45760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610ace565b620f42406127046012600a613b49565b612712906305f5e100613b58565b61271c9190613bee565b600f5410156127845760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610ace565b620f42406127946012600a613b49565b6127a2906305f5e100613b58565b6127ac9190613bee565b600e5410156128145760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610ace565b50505050565b6014546001600160a01b031633146128625760405162461bcd60e51b81526020600482015260116024820152600080516020613d038339815191526044820152606401610ace565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166128d95760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ace565b6001600160a01b0382166129255760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ace565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166129ec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ace565b6001600160a01b038316612a4e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ace565b60008211612ab05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ace565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612ade5760019250612b0c565b6001600160a01b03861660009081526001602052604090205460ff1615612b085760019150612b0c565b5060015b612b168787612f23565b15612b6d5760125460ff16612b6d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ace565b8115612c5757600d54600160a01b900460ff16612c5757600d54600160a81b900460ff168015612bb657506001600160a01b03861660009081526007602052604090205460ff16155b8015612bdb57506001600160a01b03871660009081526007602052604090205460ff16155b15612c575730600090815260208190526040902054600e548110612c5557600f5460105460ff1615612c3f57601154600c546001600160a01b031660009081526020819052604090205461271091612c3291613b58565b612c3c9190613bee565b90505b808210612c4a578091505b612c538261303a565b505b505b612c65878787868686612c70565b979650505050505050565b6000612c7c8787612f23565b15612d165760125460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015612cff575060408051601f3d908101601f19168201909252612cfc91810190613c29565b60015b612d0857600080fd5b905080612d1457600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680612d5857506001600160a01b03871660009081526006602052604090205460ff165b15612d61575060005b6001600160a01b03881660009081526020819052604081208054889290612d89908490613b6f565b909155506000905081612d9c5786612da8565b612da88987878a613406565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612dde9190613bb9565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e2a91815260200190565b60405180910390a3601254610100900460ff16612f1457612e4b898961351b565b601254610100900460ff16158015612e685750612e688989612f23565b8015612e8d57506001600160a01b03891660009081526005602052604090205460ff16155b8015612eb257506001600160a01b03881660009081526005602052604090205460ff16155b8015612ebc575083155b15612f145760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610ace565b50600198975050505050505050565b6014546000906001600160a01b03848116911614801590612f5257506014546001600160a01b03838116911614155b8015612f6957506014546001600160a01b03163214155b8015612f8e57506001600160a01b03821660009081526004602052604090205460ff16155b8015612fb357506001600160a01b03831660009081526004602052604090205460ff16155b8015612fca57506001600160a01b03821661dead14155b8015612fde57506001600160a01b03821615155b8015612ff357506001600160a01b0383163014155b801561301357506012546001600160a01b03848116620100009092041614155b801561303357506012546001600160a01b03838116620100009092041614155b9392505050565b600d805460ff60a01b1916600160a01b17905560408051606081018252600a5461ffff808216835262010000820481166020840152640100000000909104169181018290529060000361308d57506133f6565b306000908152600360209081526040808320600b5461010090046001600160a01b03168452909152902054600019146130f057306000908152600360209081526040808320600b5461010090046001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856131119190613b58565b61311b9190613bee565b6131259190613bee565b905060006131338285613b6f565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061316d5761316d613b82565b60200260200101906001600160a01b031690816001600160a01b031681525050600b60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132049190613c46565b8160018151811061321757613217613b82565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b81526101009091049091169063791ac94790613264908590600090869030904290600401613c63565b600060405180830381600087803b15801561327e57600080fd5b505af192505050801561328f575060015b61329c57505050506133f6565b6000826132a98547613b58565b6132b39190613bee565b9050831561339557600b5460405163f305d71960e01b815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af19350505050801561334a575060408051601f3d908101601f1916820190925261334791810190613cd4565b60015b6133585750505050506133f6565b505060408051838152602081018790527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b600d546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d80600081146133e7576040519150601f19603f3d011682016040523d82523d6000602084013e6133ec565b606091505b5050505050505050505b50600d805460ff60a01b19169055565b600080841561341c575060095461ffff16613446565b8315613435575060095462010000900461ffff16613446565b50600954640100000000900461ffff165b806000036134575782915050610dd4565b6012546201000090046001600160a01b031630148015613481575046600114806134815750466038145b1561348b57506111945b600061271061349a8386613b58565b6134a49190613bee565b905080156135115730600090815260208190526040812080548392906134cb908490613bb9565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612c658185613b6f565b601254610100900460ff161561357f5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610ace565b6135898282612f23565b1580156135a35750600c546001600160a01b038281169116145b15610ca4576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556012805461ff00191661010017908190556201000090041661361b576012805462010000600160b01b0319163062010000021790555b600d805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001611faf565b801515811461255557600080fd5b6000806040838503121561368057600080fd5b823561368b8161365f565b9150602083013561369b8161365f565b809150509250929050565b600060208083528351808285015260005b818110156136d3578581018301518582016040015282016136b7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461255557600080fd5b6000806040838503121561371c57600080fd5b8235613727816136f4565b946020939093013593505050565b60006020828403121561374757600080fd5b8135613033816136f4565b6000806040838503121561376557600080fd5b8235613770816136f4565b9150602083013561369b816136f4565b60008060006060848603121561379557600080fd5b83356137a0816136f4565b925060208401356137b0816136f4565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613800576138006137c1565b604052919050565b600067ffffffffffffffff821115613822576138226137c1565b5060051b60200190565b600082601f83011261383d57600080fd5b8135602061385261384d83613808565b6137d7565b82815260059290921b8401810191818101908684111561387157600080fd5b8286015b8481101561388c5780358352918301918301613875565b509695505050505050565b600080604083850312156138aa57600080fd5b823567ffffffffffffffff808211156138c257600080fd5b818501915085601f8301126138d657600080fd5b813560206138e661384d83613808565b82815260059290921b8401810191818101908984111561390557600080fd5b948201945b8386101561392c57853561391d816136f4565b8252948201949082019061390a565b9650508601359250508082111561394257600080fd5b5061394f8582860161382c565b9150509250929050565b803561ffff8116811461396b57600080fd5b919050565b60008060006060848603121561398557600080fd5b61398e84613959565b925061399c60208501613959565b91506139aa60408501613959565b90509250925092565b6000602082840312156139c557600080fd5b5035919050565b600080604083850312156139df57600080fd5b823561368b816136f4565b600080604083850312156139fd57600080fd5b613a0683613959565b9150613a1460208401613959565b90509250929050565b60008060008060808587031215613a3357600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613aa0578160001904821115613a8657613a86613a4f565b80851615613a9357918102915b93841c9390800290613a6a565b509250929050565b600082613ab757506001610b59565b81613ac457506000610b59565b8160018114613ada5760028114613ae457613b00565b6001915050610b59565b60ff841115613af557613af5613a4f565b50506001821b610b59565b5060208310610133831016604e8410600b8410161715613b23575081810a610b59565b613b2d8383613a65565b8060001904821115613b4157613b41613a4f565b029392505050565b600061303360ff841683613aa8565b8082028115828204841417610b5957610b59613a4f565b81810381811115610b5957610b59613a4f565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103613baf57613baf613a4f565b6001019392505050565b80820180821115610b5957610b59613a4f565b61ffff818116838216019080821115613be757613be7613a4f565b5092915050565b600082613c0b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613c2257600080fd5b5051919050565b600060208284031215613c3b57600080fd5b81516130338161365f565b600060208284031215613c5857600080fd5b8151613033816136f4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613cb35784516001600160a01b031683529383019391830191600101613c8e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ce957600080fd5b835192506020840151915060408401519050925092509256fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212203368409b95ec66194f4fcaa3dc1ac86826afa71fdee18005b5190a59fa7f564a64736f6c63430008110033

Deployed Bytecode Sourcemap

3951:21320:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5569:73;;;;;;;;;;;;5600:42;5569:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5569:73:0;;;;;;;;5818:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;5818:28:0;245:177:1;14054:153:0;;;;;;;;;;-1:-1:-1;14054:153:0;;;;;:::i;:::-;;:::i;:::-;;4977:110;;;;;;;;;;-1:-1:-1;4977:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:1;1170:15;;;1152:34;;1222:15;;;1217:2;1202:18;;1195:43;1274:15;;1254:18;;;1247:43;;;;1115:2;1100:18;4977:110:0;931:365:1;10124:80:0;;;;;;;;;;-1:-1:-1;10196:5:0;;;;;;;;;;;;-1:-1:-1;;;10196:5:0;;;;10124:80;;;;;;;:::i;5508:26::-;;;;;;;;;;-1:-1:-1;5508:26:0;;;;;;;-1:-1:-1;;;;;5508:26:0;;;5475;;;;;;;;;;-1:-1:-1;5475:26:0;;;;;;;;;;;2267:14:1;;2260:22;2242:41;;2230:2;2215:18;5475:26:0;2102:187:1;10732:161:0;;;;;;;;;;-1:-1:-1;10732:161:0;;;;;:::i;:::-;;:::i;13483:140::-;;;;;;;;;;-1:-1:-1;13483:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;13581:34:0;13557:4;13581:34;;;:25;:34;;;;;;;;;13483:140;16928:809;;;;;;;;;;-1:-1:-1;16928:809:0;;;;;:::i;:::-;;:::i;9795:115::-;;;;;;;;;;;;;:::i;11402:306::-;;;;;;;;;;-1:-1:-1;11402:306:0;;;;;:::i;:::-;;:::i;22946:447::-;;;;;;;;;;-1:-1:-1;22946:447:0;;;;;:::i;:::-;;:::i;5926:33::-;;;;;;;;;;;;;;;;13787:141;;;;;;;;;;;;;:::i;5219:42::-;;;;;;;;;;;;5257:4;5219:42;;5853:25;;;;;;;;;;;;;;;;9916:112;;;;;;;;;;;;;:::i;:::-;;;6538:4:1;6526:17;;;6508:36;;6496:2;6481:18;9916:112:0;6366:184:1;14403:544:0;;;;;;;;;;-1:-1:-1;14403:544:0;;;;;:::i;:::-;;:::i;13936:110::-;;;;;;;;;;-1:-1:-1;13936:110:0;;;;;:::i;:::-;;:::i;5541:21::-;;;;;;;;;;-1:-1:-1;5541:21:0;;;;-1:-1:-1;;;;;5541:21:0;;;5372:46;;;;;;;;;;;;5414:4;5372:46;;5968:34;;;;;;;;;;-1:-1:-1;5968:34:0;;;;;;;;15528:189;;;;;;;;;;-1:-1:-1;15528:189:0;;;;;:::i;:::-;;:::i;16432:217::-;;;;;;;;;;-1:-1:-1;16432:217:0;;;;;:::i;:::-;;:::i;8553:654::-;;;;;;;;;;-1:-1:-1;8553:654:0;;;;;:::i;:::-;;:::i;13206:127::-;;;;;;;;;;-1:-1:-1;13206:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;13297:28:0;13273:4;13297:28;;;:19;:28;;;;;;;;;13206:127;6009:36;;;;;;;;;;-1:-1:-1;6009:36:0;;;;;;;;;;;13341:134;;;;;;;;;;-1:-1:-1;13341:134:0;;;;;:::i;:::-;;:::i;6082:26::-;;;;;;;;;;;;;;;;12976:222;;;;;;;;;;-1:-1:-1;12976:222:0;;;;;:::i;:::-;;:::i;10434:117::-;;;;;;;;;;-1:-1:-1;10434:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;10527:16:0;10500:7;10527:16;;;;;;;;;;;;10434:117;9215:225;;;;;;;;;;;;;:::i;5649:92::-;;;;;;;;;;-1:-1:-1;5649:92:0;;;;-1:-1:-1;;;;;5649:92:0;;;14213:182;;;;;;;;;;;;;:::i;12404:564::-;;;;;;;;;;-1:-1:-1;12404:564:0;;;;;:::i;:::-;;:::i;10210:79::-;;;;;;;;;;-1:-1:-1;10280:6:0;;-1:-1:-1;;;;;10280:6:0;10210:79;;11219:175;;;;;;;;;;;;;:::i;21857:635::-;;;;;;;;;;;;;:::i;10034:84::-;;;;;;;;;;-1:-1:-1;10108:7:0;;;;;;;;;;;;-1:-1:-1;;;10108:7:0;;;;10034:84;;10559:165;;;;;;;;;;-1:-1:-1;10559:165:0;;;;;:::i;:::-;;:::i;22690:248::-;;;;;;;;;;-1:-1:-1;22690:248:0;;;;;:::i;:::-;;:::i;5885:34::-;;;;;;;;;;-1:-1:-1;5885:34:0;;;;;;;;14955:366;;;;;;;;;;-1:-1:-1;14955:366:0;;;;;:::i;:::-;;:::i;16657:263::-;;;;;;;;;;-1:-1:-1;16657:263:0;;;;;:::i;:::-;;:::i;5096:114::-;;;;;;;;;;-1:-1:-1;5096:114:0;;;;;;;;;;;;;;;;;;;;;;10295:133;;;;;;;;;;-1:-1:-1;10295:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10397:19:0;;;10379:7;10397:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10295:133;11716:680;;;;;;;;;;-1:-1:-1;11716:680:0;;;;;:::i;:::-;;:::i;15329:191::-;;;;;;;;;;-1:-1:-1;15329:191:0;;;;;:::i;:::-;;:::i;22500:182::-;;;;;;;;;;;;;:::i;15725:699::-;;;;;;;;;;-1:-1:-1;15725:699:0;;;;;:::i;:::-;;:::i;5772:39::-;;;;;;;;;;-1:-1:-1;5772:39:0;;;;-1:-1:-1;;;5772:39:0;;;;;;13631:148;;;;;;;;;;-1:-1:-1;13631:148:0;;;;;:::i;:::-;;:::i;14054:153::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;;;;;;;;;14149:11:::1;::::0;:50:::1;::::0;-1:-1:-1;;;14149:50:0;;9315:14:1;;9308:22;14149:50:0::1;::::0;::::1;9290:41:1::0;9374:14;;9367:22;9347:18;;;9340:50;14149:11:0;;;::::1;-1:-1:-1::0;;;;;14149:11:0::1;::::0;:26:::1;::::0;9263:18:1;;14149:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14054:153:::0;;:::o;10732:161::-;10809:4;10826:37;10835:10;10847:7;10856:6;10826:8;:37::i;:::-;-1:-1:-1;10881:4:0;10732:161;;;;;:::o;16928:809::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;17032:23:::1;::::0;::::1;;17024:32;;;::::0;::::1;;-1:-1:-1::0;;;;;17075:23:0;::::1;17093:4;17075:23;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;17120:24:0;::::1;17139:4;17120:24;;17075:69;:107;;;;-1:-1:-1::0;17166:6:0::1;::::0;-1:-1:-1;;;;;17166:16:0;;::::1;:6:::0;::::1;:16;;17075:107;:146;;;;-1:-1:-1::0;17204:6:0::1;::::0;-1:-1:-1;;;;;17204:17:0;;::::1;:6:::0;::::1;:17;;17075:146;17067:170;;;::::0;-1:-1:-1;;;17067:170:0;;9603:2:1;17067:170:0::1;::::0;::::1;9585:21:1::0;9642:2;9622:18;;;9615:30;-1:-1:-1;;;9661:18:1;;;9654:41;9712:18;;17067:170:0::1;9401:335:1::0;17067:170:0::1;17262:7;-1:-1:-1::0;;;;;17252:17:0::1;:6;-1:-1:-1::0;;;;;17252:17:0::1;::::0;17248:482:::1;;-1:-1:-1::0;;;;;17286:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;17315:4:::1;-1:-1:-1::0;;17286:33:0;;::::1;::::0;::::1;::::0;;;17334:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;17381:34:::1;::::0;17286:26;;17381:19:::1;:34::i;:::-;16928:809:::0;;:::o;17248:482::-:1;-1:-1:-1::0;;;;;17448:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;17476:4:::1;-1:-1:-1::0;;17448:32:0;;::::1;::::0;::::1;::::0;;;17495:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;17543:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;17589:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;17636:33:::1;::::0;17448:25;;17636:19:::1;:33::i;:::-;17684:34;17704:7;17713:4;17684:19;:34::i;9795:115::-:0;9850:7;4738:13;4677:2;4738;:13;:::i;:::-;4721:30;;4532:11;4721:30;:::i;:::-;9876:1;9865:12;9861:31;;9881:8;;;9861:31;4738:13;4677:2;4738;:13;:::i;:::-;4721:30;;4532:11;4721:30;:::i;:::-;9893:14;;9795:115;:::o;11402:306::-;-1:-1:-1;;;;;11523:19:0;;11502:4;11523:19;;;:11;:19;;;;;;;;11543:10;11523:31;;;;;;;;-1:-1:-1;;11523:52:0;11519:126;;-1:-1:-1;;;;;11592:19:0;;;;;;:11;:19;;;;;;;;11612:10;11592:31;;;;;;;:41;;11627:6;;11592:19;:41;;11627:6;;11592:41;:::i;:::-;;;;-1:-1:-1;;11519:126:0;11664:36;11674:6;11682:9;11693:6;11664:9;:36::i;:::-;11657:43;11402:306;-1:-1:-1;;;;11402:306:0:o;22946:447::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;23081:7:::1;:14;23062:8;:15;:33;23054:67;;;::::0;-1:-1:-1;;;23054:67:0;;11764:2:1;23054:67:0::1;::::0;::::1;11746:21:1::0;11803:2;11783:18;;;11776:30;11842:23;11822:18;;;11815:51;11883:18;;23054:67:0::1;11562:345:1::0;23054:67:0::1;23137:8;23132:254;23155:8;:15;23151:1;:19;;;23132:254;;;23236:13;4677:2;23236;:13;:::i;:::-;23225:7;23233:1;23225:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;23210:10;10500:7:::0;10527:16;;;;;;;;;;;23200:49:::1;;23192:80;;;::::0;-1:-1:-1;;;23192:80:0;;12246:2:1;23192:80:0::1;::::0;::::1;12228:21:1::0;12285:2;12265:18;;;12258:30;12324:20;12304:18;;;12297:48;12362:18;;23192:80:0::1;12044:342:1::0;23192:80:0::1;23287:87;23304:10;23316:8;23325:1;23316:11;;;;;;;;;;:::i;:::-;;;;;;;4677:2;23340;:13;;;;:::i;:::-;23329:7;23337:1;23329:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;23355:5;23362::::0;23369:4:::1;23287:16;:87::i;:::-;-1:-1:-1::0;23172:3:0;::::1;::::0;::::1;:::i;:::-;;;;23132:254;;;;22946:447:::0;;:::o;13787:141::-;13840:7;10527:16;;;;;;5600:42;10527:16;;;;13879:39;;10527:16;13879:39;:::i;:::-;4738:13;4677:2;4738;:13;:::i;:::-;4721:30;;4532:11;4721:30;:::i;:::-;13868:51;;;;:::i;9916:112::-;9968:5;4738:13;4677:2;4738;:13;:::i;:::-;4721:30;;4532:11;4721:30;:::i;:::-;9992:1;9981:12;9977:31;;9997:8;;;9977:31;-1:-1:-1;4677:2:0;;9916:112::o;14403:544::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;14511:14:::1;::::0;::::1;;14510:15;14502:45;;;::::0;-1:-1:-1;;;14502:45:0;;12925:2:1;14502:45:0::1;::::0;::::1;12907:21:1::0;12964:2;12944:18;;;12937:30;13003:19;12983:18;;;12976:47;13040:18;;14502:45:0::1;12723:341:1::0;14502:45:0::1;5257:4;14566:6;:21;;;;:65;;;;;5307:4;14608:7;:23;;;;14566:65;:117;;;;;5361:4;14652:11;:31;;;;14566:117;14558:170;;;::::0;-1:-1:-1;;;14558:170:0;;13271:2:1;14558:170:0::1;::::0;::::1;13253:21:1::0;13310:2;13290:18;;;13283:30;13349:25;13329:18;;;13322:53;13392:18;;14558:170:0::1;13069:347:1::0;14558:170:0::1;5414:4;14747:16;14756:7:::0;14747:6;:16:::1;:::i;:::-;:35;;;;14739:80;;;::::0;-1:-1:-1;;;14739:80:0;;13796:2:1;14739:80:0::1;::::0;::::1;13778:21:1::0;;;13815:18;;;13808:30;13874:34;13854:18;;;13847:62;13926:18;;14739:80:0::1;13594:356:1::0;14739:80:0::1;14830:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;14866:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;14904:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;14403:544::o;13936:110::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;14005:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;14005:33:0;;-1:-1:-1;;;;;178:55:1;;;14005:33:0::1;::::0;::::1;160:74:1::0;14005:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;14005:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13936:110:::0;:::o;15528:189::-;15657:6;;-1:-1:-1;;;;;15657:6:0;15619:7;10527:16;;;;;;;;;;;5461:5;;15647:41;;15667:21;;15647:41;:::i;:::-;15646:62;;;;:::i;16432:217::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;16562:3:::1;16536:22;:29;;16528:64;;;::::0;-1:-1:-1;;;16528:64:0;;14379:2:1;16528:64:0::1;::::0;::::1;14361:21:1::0;14418:2;14398:18;;;14391:30;14457:24;14437:18;;;14430:52;14499:18;;16528:64:0::1;14177:346:1::0;16528:64:0::1;16603:13;:38:::0;16432:217::o;8553:654::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;-1:-1:-1;;;;;8632:22:0;::::1;8624:96;;;::::0;-1:-1:-1;;;8624:96:0;;14730:2:1;8624:96:0::1;::::0;::::1;14712:21:1::0;14769:2;14749:18;;;14742:30;14808:34;14788:18;;;14781:62;14879:31;14859:18;;;14852:59;14928:19;;8624:96:0::1;14528:425:1::0;8624:96:0::1;-1:-1:-1::0;;;;;;;8739:16:0;::::1;::::0;8731:90:::1;;;::::0;-1:-1:-1;;;8731:90:0;;14730:2:1;8731:90:0::1;::::0;::::1;14712:21:1::0;14769:2;14749:18;;;14742:30;14808:34;14788:18;;;14781:62;14879:31;14859:18;;;14852:59;14928:19;;8731:90:0::1;14528:425:1::0;8731:90:0::1;8852:6;::::0;8832:34:::1;::::0;-1:-1:-1;;;;;8852:6:0::1;;8832:19;:34::i;:::-;8877:35;8897:8;8907:4;8877:19;:35::i;:::-;8947:6;::::0;-1:-1:-1;;;;;8947:6:0::1;8957:1;10527:16:::0;;;;;;;;;;;8937:21;8933:127:::1;;8992:6;::::0;-1:-1:-1;;;;;8992:6:0::1;10500:7:::0;10527:16;;;;;;;;;;;8975:73:::1;::::0;8992:6;9000:8;;9010:17:::1;10434:117:::0;8975:73:::1;;8933:127;9099:6;::::0;;-1:-1:-1;;;;;9116:17:0;;::::1;-1:-1:-1::0;;;;;;9116:17:0;::::1;::::0;::::1;::::0;;;9149:40:::1;::::0;9099:6;::::1;::::0;9116:17;9099:6;;9149:40:::1;::::0;9080:16:::1;::::0;9149:40:::1;8613:594;8553:654:::0;:::o;13341:134::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;-1:-1:-1;;;;;13429:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;13429:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13341:134::o;12976:222::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;13060:14:::1;::::0;::::1;;13059:15;13051:24;;;::::0;::::1;;13117:4;-1:-1:-1::0;;;;;13094:28:0;::::1;::::0;13086:55:::1;;;::::0;-1:-1:-1;;;13086:55:0;;15160:2:1;13086:55:0::1;::::0;::::1;15142:21:1::0;15199:2;15179:18;;;15172:30;15238:16;15218:18;;;15211:44;15272:18;;13086:55:0::1;14958:338:1::0;13086:55:0::1;13152:11;:38:::0;;-1:-1:-1;;;;;13152:38:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;13152:38:0;;::::1;::::0;;;::::1;::::0;;12976:222::o;9215:225::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;9294:6:::1;::::0;9274:34:::1;::::0;-1:-1:-1;;;;;9294:6:0::1;;9274:19;:34::i;:::-;9338:6;::::0;;-1:-1:-1;;;;;;9355:19:0;::::1;::::0;;;9390:42:::1;::::0;-1:-1:-1;;;;;9338:6:0;;::::1;::::0;9319:16:::1;::::0;9338:6;;9390:42:::1;::::0;9319:16;;9390:42:::1;9263:177;9215:225::o:0;14213:182::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;14366:14:::1;:21:::0;;-1:-1:-1;;14366:21:0::1;14383:4;14366:21;::::0;;14213:182::o;12404:564::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;12486:7:::1;12481:480;;-1:-1:-1::0;;;;;12510:13:0;;::::1;12526:5;12510:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12510:21:0::1;::::0;;12546:11:::1;::::0;:34;;-1:-1:-1;;;12546:34:0;;::::1;::::0;::::1;15469:74:1::0;;;;15559:18;;;15552:50;;;;12546:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;15442:18:1;;12546:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;12481:480;12617:17;::::0;:22;12613:135:::1;;12706:6;12686:17;;12668:15;:35;;;;:::i;:::-;:44;12660:72;;;::::0;-1:-1:-1;;;12660:72:0;;15815:2:1;12660:72:0::1;::::0;::::1;15797:21:1::0;15854:2;15834:18;;;15827:30;15893:17;15873:18;;;15866:45;15928:18;;12660:72:0::1;15613:339:1::0;12660:72:0::1;-1:-1:-1::0;;;;;12771:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;12770:14;12762:54;;;::::0;-1:-1:-1;;;12762:54:0;;16159:2:1;12762:54:0::1;::::0;::::1;16141:21:1::0;16198:2;16178:18;;;16171:30;16237:29;16217:18;;;16210:57;16284:18;;12762:54:0::1;15957:351:1::0;12762:54:0::1;-1:-1:-1::0;;;;;12831:13:0;;::::1;;::::0;;;12847:4:::1;12831:13;::::0;;;;;;;;:20;;-1:-1:-1;;12831:20:0::1;::::0;::::1;::::0;;12886:15:::1;12866:17;:35:::0;12916:11:::1;::::0;:33;;-1:-1:-1;;;12916:33:0;;::::1;::::0;::::1;15469:74:1::0;;;;15559:18;;;15552:50;12916:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;15442:18:1;;12916:33:0::1;15301:307:1::0;11219:175:0;8407:6;;11285:4;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;11334:9:::1;::::0;11302:62:::1;::::0;11319:4:::1;::::0;11334:9:::1;::::0;::::1;-1:-1:-1::0;;;;;11334:9:0::1;-1:-1:-1::0;;11302:8:0::1;:62::i;:::-;-1:-1:-1::0;11382:4:0::1;11219:175:::0;:::o;21857:635::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;21919:14:::1;::::0;::::1;;21918:15;21910:52;;;::::0;-1:-1:-1;;;21910:52:0;;16515:2:1;21910:52:0::1;::::0;::::1;16497:21:1::0;16554:2;16534:18;;;16527:30;16593:26;16573:18;;;16566:54;16637:18;;21910:52:0::1;16313:348:1::0;21910:52:0::1;21981:16;::::0;::::1;::::0;::::1;;;21973:53;;;::::0;-1:-1:-1;;;21973:53:0;;16868:2:1;21973:53:0::1;::::0;::::1;16850:21:1::0;16907:2;16887:18;;;16880:30;16946:26;16926:18;;;16919:54;16990:18;;21973:53:0::1;16666:348:1::0;21973:53:0::1;22049:11;::::0;;;::::1;-1:-1:-1::0;;;;;22049:11:0::1;22037:106;;22091:11;:40:::0;;-1:-1:-1;;;;;;22091:40:0::1;22125:4;22091:40:::0;::::1;;::::0;;22037:106:::1;22157:11;::::0;;22179:6:::1;::::0;22157:87:::1;::::0;-1:-1:-1;;;22157:87:0;;-1:-1:-1;;;;;22179:6:0;;::::1;22157:87;::::0;::::1;17242:74:1::0;17364:10;22194:12:0::1;17352:23:1::0;17332:18;;;17325:51;17424:18;22216:15:0::1;17412:31:1::0;17392:18;;;17385:59;17460:18;;;17453:45;;;;22157:11:0;;;::::1;;::::0;:21:::1;::::0;17214:19:1;;22157:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22153:103:::0;22266:14:::1;:21:::0;;22283:4:::1;-1:-1:-1::0;;22266:21:0;;::::1;;::::0;;;22298:23:::1;:31:::0;;;;::::1;::::0;;22367:6:::1;::::0;-1:-1:-1;;;;;22367:6:0::1;-1:-1:-1::0;10527:16:0;;;;;;;;;;;22383:5:::1;::::0;22357:22:::1;::::0;22377:2:::1;22357:22;:::i;:::-;22356:32;;;;:::i;:::-;22340:13;:48:::0;22423:6:::1;::::0;-1:-1:-1;;;;;22423:6:0::1;10500:7:::0;10527:16;;;;;;;;;;;22439:5:::1;::::0;22413:22:::1;::::0;22433:2:::1;22413:22;:::i;:::-;22412:32;;;;:::i;:::-;22399:10;:45:::0;22469:15:::1;22455:11;:29:::0;21857:635::o;10559:165::-;10637:4;10654:40;10664:10;10676:9;10687:6;10654:9;:40::i;:::-;-1:-1:-1;10712:4:0;;10559:165;-1:-1:-1;;;10559:165:0:o;22690:248::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;22789:4:::1;-1:-1:-1::0;;;;;22772:22:0;::::1;::::0;22764:62:::1;;;::::0;-1:-1:-1;;;22764:62:0;;17711:2:1;22764:62:0::1;::::0;::::1;17693:21:1::0;17750:2;17730:18;;;17723:30;17789:29;17769:18;;;17762:57;17836:18;;22764:62:0::1;17509:351:1::0;22764:62:0::1;22891:6;::::0;22899:30:::1;::::0;-1:-1:-1;;;22899:30:0;;22923:4:::1;22899:30;::::0;::::1;160:74:1::0;22859:5:0;;-1:-1:-1;;;;;22876:14:0;;::::1;::::0;::::1;::::0;22891:6;;;::::1;::::0;22876:14;;22899:15:::1;::::0;133:18:1;;22899:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22876:54;::::0;-1:-1:-1;;;;;;22876:54:0::1;::::0;;;;;;-1:-1:-1;;;;;18246:55:1;;;22876:54:0::1;::::0;::::1;18228:74:1::0;18318:18;;;18311:34;18201:18;;22876:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14955:366::-:0;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;15040:7:::1;:29:::0;;::::1;15080::::0;;::::1;::::0;::::1;-1:-1:-1::0;;15080:29:0;;;15040;;::::1;15080::::0;::::1;::::0;;15140:21:::1;15100:9:::0;15060;15140:21:::1;:::i;:::-;15120:7;:41:::0;;-1:-1:-1;;15120:41:0::1;::::0;::::1;::::0;;::::1;;;::::0;;15207:9:::1;:17:::0;-1:-1:-1;;15188:36:0::1;::::0;15207:17;;::::1;::::0;::::1;::::0;15188:16:::1;:36;:::i;:::-;15243:7;:17:::0;15172:52:::1;::::0;;::::1;::::0;-1:-1:-1;15243:17:0;;::::1;;:26:::0;-1:-1:-1;15243:26:0::1;15235:78;;;::::0;-1:-1:-1;;;15235:78:0;;18808:2:1;15235:78:0::1;::::0;::::1;18790:21:1::0;18847:2;18827:18;;;18820:30;18886:34;18866:18;;;18859:62;-1:-1:-1;;;18937:18:1;;;18930:37;18984:19;;15235:78:0::1;18606:403:1::0;16657:263:0;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;16766:19:::1;:33:::0;;-1:-1:-1;;;;16766:33:0::1;-1:-1:-1::0;;;16766:33:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;16810:22:::1;:47:::0;;-1:-1:-1;;16810:47:0::1;::::0;::::1;;;::::0;;16873:39:::1;::::0;2242:41:1;;;16873:39:0::1;::::0;2230:2:1;2215:18;16873:39:0::1;;;;;;;;16657:263:::0;;:::o;11716:680::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;11796:16:::1;::::0;::::1;::::0;::::1;;;11795:17;11787:60;;;::::0;-1:-1:-1;;;11787:60:0;;19216:2:1;11787:60:0::1;::::0;::::1;19198:21:1::0;19255:2;19235:18;;;19228:30;19294:32;19274:18;;;19267:60;19344:18;;11787:60:0::1;19014:354:1::0;11787:60:0::1;11858:20;11891:9;11858:43;;11912:16;11942:10;-1:-1:-1::0;;;;;11942:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11931:40:0::1;;11980:4;11987:10;-1:-1:-1::0;;;;;11987:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11931:74;::::0;-1:-1:-1;;;;;;11931:74:0::1;::::0;;;;;;-1:-1:-1;;;;;19882:15:1;;;11931:74:0::1;::::0;::::1;19864:34:1::0;19934:15;;19914:18;;;19907:43;19776:18;;11931:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12024:6;::::0;-1:-1:-1;;;;;12024:6:0;;::::1;12034:5;12016:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;12016:23:0::1;::::0;;11912:93;;-1:-1:-1;12054:22:0;::::1;12050:200;;12113:10;-1:-1:-1::0;;;;;12113:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12102:43:0::1;;12154:4;12161:10;-1:-1:-1::0;;;;;12161:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12102:77;::::0;-1:-1:-1;;;;;;12102:77:0::1;::::0;;;;;;-1:-1:-1;;;;;19882:15:1;;;12102:77:0::1;::::0;::::1;19864:34:1::0;19934:15;;19914:18;;;19907:43;19776:18;;12102:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12093:6;:86:::0;;-1:-1:-1;;;;;;12093:86:0::1;-1:-1:-1::0;;;;;12093:86:0;;;::::1;::::0;;;::::1;::::0;;12050:200:::1;;;12221:6;:17:::0;;-1:-1:-1;;;;;;12221:17:0::1;-1:-1:-1::0;;;;;12221:17:0;::::1;;::::0;;12050:200:::1;12260:9;:22:::0;;-1:-1:-1;;12260:22:0::1;;-1:-1:-1::0;;;;;12260:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12301:6:::1;::::0;;::::1;-1:-1:-1::0;12293:15:0;;;-1:-1:-1;12293:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;12293:22:0::1;::::0;;::::1;::::0;;12358:9;;12326:62:::1;::::0;12343:4:::1;::::0;12358:9;::::1;;-1:-1:-1::0;;12326:8:0::1;:62::i;15329:191::-:0;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;-1:-1:-1;;;;;15414:23:0;::::1;15406:59;;;::::0;-1:-1:-1;;;15406:59:0;;20163:2:1;15406:59:0::1;::::0;::::1;20145:21:1::0;20202:2;20182:18;;;20175:30;20241:25;20221:18;;;20214:53;20284:18;;15406:59:0::1;19961:347:1::0;15406:59:0::1;15476:15;:36:::0;;-1:-1:-1;;;;;;15476:36:0::1;-1:-1:-1::0;;;;;15476:36:0;;;::::1;::::0;;;::::1;::::0;;15329:191::o;22500:182::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;22567:16:::1;::::0;::::1;::::0;::::1;;;22566:17;22558:58;;;::::0;-1:-1:-1;;;22558:58:0;;20515:2:1;22558:58:0::1;::::0;::::1;20497:21:1::0;20554:2;20534:18;;;20527:30;20593;20573:18;;;20566:58;20641:18;;22558:58:0::1;20313:352:1::0;22558:58:0::1;22635:6;::::0;22627:47:::1;::::0;-1:-1:-1;;;;;22635:6:0;;::::1;::::0;22652:21:::1;22627:47:::0;::::1;;;::::0;22635:6:::1;22627:47:::0;22635:6;22627:47;22652:21;22635:6;22627:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22500:182::o:0;15725:699::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;15925:16;15905;4738:13:::1;4677:2;4738;:13;:::i;:::-;4721:30;::::0;4532:11:::1;4721:30;:::i;:::-;15895:26;;;;:::i;:::-;15894:47;;;;:::i;:::-;15878:13;:63:::0;15993:13;15976;4738::::1;4677:2;4738;:13;:::i;:::-;4721:30;::::0;4532:11:::1;4721:30;:::i;:::-;15966:23;;;;:::i;:::-;15965:41;;;;:::i;:::-;15952:10;:54:::0;;;16025:13:::1;::::0;:27:::1;;16017:73;;;::::0;-1:-1:-1;;;16017:73:0;;20872:2:1;16017:73:0::1;::::0;::::1;20854:21:1::0;20911:2;20891:18;;;20884:30;20950:34;20930:18;;;20923:62;-1:-1:-1;;;21001:18:1;;;20994:31;21042:19;;16017:73:0::1;20670:397:1::0;16017:73:0::1;16134:6;::::0;-1:-1:-1;;;;;16134:6:0::1;10500:7:::0;10527:16;;;;;;;;;;;5461:5:::1;::::0;16124:23:::1;::::0;16144:3:::1;16124:23;:::i;:::-;16123:44;;;;:::i;:::-;16109:10;;:58;;16101:106;;;::::0;-1:-1:-1;;;16101:106:0;;21274:2:1;16101:106:0::1;::::0;::::1;21256:21:1::0;21313:2;21293:18;;;21286:30;21352:34;21332:18;;;21325:62;-1:-1:-1;;;21403:18:1;;;21396:33;21446:19;;16101:106:0::1;21072:399:1::0;16101:106:0::1;16250:9;4738:13;4677:2;4738;:13;:::i;:::-;4721:30;::::0;4532:11:::1;4721:30;:::i;:::-;16240:19;;;;:::i;:::-;16226:10;;:33;;16218:92;;;::::0;-1:-1:-1;;;16218:92:0;;21678:2:1;16218:92:0::1;::::0;::::1;21660:21:1::0;21717:2;21697:18;;;21690:30;21756:34;21736:18;;;21729:62;-1:-1:-1;;;21807:18:1;;;21800:44;21861:19;;16218:92:0::1;21476:410:1::0;16218:92:0::1;16356:9;4738:13;4677:2;4738;:13;:::i;:::-;4721:30;::::0;4532:11:::1;4721:30;:::i;:::-;16346:19;;;;:::i;:::-;16329:13;;:36;;16321:95;;;::::0;-1:-1:-1;;;16321:95:0;;21678:2:1;16321:95:0::1;::::0;::::1;21660:21:1::0;21717:2;21697:18;;;21690:30;21756:34;21736:18;;;21729:62;-1:-1:-1;;;21807:18:1;;;21800:44;21861:19;;16321:95:0::1;21476:410:1::0;16321:95:0::1;15725:699:::0;;;;:::o;13631:148::-;8407:6;;-1:-1:-1;;;;;8407:6:0;8417:10;8407:20;8399:50;;;;-1:-1:-1;;;8399:50:0;;8984:2:1;8399:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8399:50:0;8782:341:1;8399:50:0;-1:-1:-1;;;;;13727:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;13727:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13631:148::o;10901:310::-;-1:-1:-1;;;;;10996:20:0;;10988:52;;;;-1:-1:-1;;;10988:52:0;;22093:2:1;10988:52:0;;;22075:21:1;22132:2;22112:18;;;22105:30;-1:-1:-1;;;22151:18:1;;;22144:49;22210:18;;10988:52:0;21891:343:1;10988:52:0;-1:-1:-1;;;;;11059:21:0;;11051:53;;;;-1:-1:-1;;;11051:53:0;;22093:2:1;11051:53:0;;;22075:21:1;22132:2;22112:18;;;22105:30;-1:-1:-1;;;22151:18:1;;;22144:49;22210:18;;11051:53:0;21891:343:1;11051:53:0;-1:-1:-1;;;;;11117:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11170:33;;391:25:1;;;11170:33:0;;364:18:1;11170:33:0;;;;;;;10901:310;;;:::o;18199:1553::-;18278:4;-1:-1:-1;;;;;18303:18:0;;18295:68;;;;-1:-1:-1;;;18295:68:0;;22441:2:1;18295:68:0;;;22423:21:1;22480:2;22460:18;;;22453:30;22519:34;22499:18;;;22492:62;-1:-1:-1;;;22570:18:1;;;22563:35;22615:19;;18295:68:0;22239:401:1;18295:68:0;-1:-1:-1;;;;;18382:16:0;;18374:64;;;;-1:-1:-1;;;18374:64:0;;22847:2:1;18374:64:0;;;22829:21:1;22886:2;22866:18;;;22859:30;22925:34;22905:18;;;22898:62;-1:-1:-1;;;22976:18:1;;;22969:33;23019:19;;18374:64:0;22645:399:1;18374:64:0;18466:1;18457:6;:10;18449:64;;;;-1:-1:-1;;;18449:64:0;;23251:2:1;18449:64:0;;;23233:21:1;23290:2;23270:18;;;23263:30;23329:34;23309:18;;;23302:62;-1:-1:-1;;;23380:18:1;;;23373:39;23429:19;;18449:64:0;23049:405:1;18449:64:0;-1:-1:-1;;;;;18612:13:0;;18524:8;18612:13;;;:7;:13;;;;;;18524:8;;;;18612:13;;18608:162;;;18648:4;18642:10;;18608:162;;;-1:-1:-1;;;;;18674:11:0;;;;;;:7;:11;;;;;;;;18670:100;;;18709:4;18702:11;;18670:100;;;-1:-1:-1;18754:4:0;18670:100;18784:20;18795:4;18801:2;18784:10;:20::i;:::-;18780:141;;;18825:14;;;;18821:89;;18860:34;;-1:-1:-1;;;18860:34:0;;23661:2:1;18860:34:0;;;23643:21:1;23700:2;23680:18;;;23673:30;23739:26;23719:18;;;23712:54;23783:18;;18860:34:0;23459:348:1;18821:89:0;18937:4;18933:742;;;18963:6;;-1:-1:-1;;;18963:6:0;;;;18958:706;;18994:19;;-1:-1:-1;;;18994:19:0;;;;:64;;;;-1:-1:-1;;;;;;19038:20:0;;;;;;:16;:20;;;;;;;;19037:21;18994:64;:111;;;;-1:-1:-1;;;;;;19083:22:0;;;;;;:16;:22;;;;;;;;19082:23;18994:111;18990:659;;;19197:4;19148:28;10527:16;;;;;;;;;;;19254:13;;19230:37;;19226:404;;19314:10;;19355:22;;;;19351:97;;;19412:13;;19402:6;;-1:-1:-1;;;;;19402:6:0;10500:7;10527:16;;;;;;;;;;;5461:5;;19392:33;;;:::i;:::-;19391:54;;;;:::i;:::-;19381:64;;19351:97;19502:7;19478:20;:31;19474:72;;19536:7;19513:30;;19474:72;19572:34;19585:20;19572:12;:34::i;:::-;19269:361;19226:404;19125:524;18990:659;19692:52;19709:4;19715:2;19719:6;19727:3;19732:4;19738:5;19692:16;:52::i;:::-;19685:59;18199:1553;-1:-1:-1;;;;;;;18199:1553:0:o;23401:1055::-;23520:4;23541:20;23552:4;23558:2;23541:10;:20::i;:::-;23537:228;;;23596:11;;:39;;-1:-1:-1;;;23596:39:0;;-1:-1:-1;;;;;24093:15:1;;;23596:39:0;;;24075:34:1;24145:15;;;24125:18;;;24118:43;24177:18;;;24170:34;;;23565:12:0;;23596:11;;;;;:21;;23987:18:1;;23596:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;23596:39:0;;;;;;;;-1:-1:-1;;23596:39:0;;;;;;;;;;;;:::i;:::-;;;23592:122;;23703:8;;;23592:122;23686:5;-1:-1:-1;23732:7:0;23728:26;;23743:8;;;23728:26;23563:202;23537:228;-1:-1:-1;;;;;23809:25:0;;23775:12;23809:25;;;:19;:25;;;;;;23790:4;;23809:25;;;:52;;-1:-1:-1;;;;;;23838:23:0;;;;;;:19;:23;;;;;;;;23809:52;23805:99;;;-1:-1:-1;23887:5:0;23805:99;-1:-1:-1;;;;;23914:13:0;;:7;:13;;;;;;;;;;:23;;23931:6;;23914:7;:23;;23931:6;;23914:23;:::i;:::-;;;;-1:-1:-1;23948:22:0;;-1:-1:-1;23974:7:0;23973:55;;24022:6;23973:55;;;23985:34;23995:4;24001:3;24006:4;24012:6;23985:9;:34::i;:::-;23948:80;;24054:14;24039:7;:11;24047:2;-1:-1:-1;;;;;24039:11:0;-1:-1:-1;;;;;24039:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;24099:2;-1:-1:-1;;;;;24084:34:0;24093:4;-1:-1:-1;;;;;24084:34:0;;24103:14;24084:34;;;;391:25:1;;379:2;364:18;;245:177;24084:34:0;;;;;;;;24134:16;;;;;;;24129:298;;24167:28;24186:4;24192:2;24167:18;:28::i;:::-;24215:16;;;;;;;24214:17;:41;;;;;24235:20;24246:4;24252:2;24235:10;:20::i;:::-;24214:77;;;;-1:-1:-1;;;;;;24260:31:0;;;;;;:25;:31;;;;;;;;24259:32;24214:77;:111;;;;-1:-1:-1;;;;;;24296:29:0;;;;;;:25;:29;;;;;;;;24295:30;24214:111;:121;;;;;24330:5;24329:6;24214:121;24210:206;;;24356:44;;-1:-1:-1;;;24356:44:0;;24417:2:1;24356:44:0;;;24399:21:1;24456:2;24436:18;;;24429:30;24495:34;24475:18;;;24468:62;-1:-1:-1;;;24546:18:1;;;24539:32;24588:19;;24356:44:0;24215:398:1;24210:206:0;-1:-1:-1;24444:4:0;;23401:1055;-1:-1:-1;;;;;;;;23401:1055:0:o;17745:446::-;17846:6;;17814:4;;-1:-1:-1;;;;;17838:14:0;;;17846:6;;17838:14;;;;:43;;-1:-1:-1;17875:6:0;;-1:-1:-1;;;;;17869:12:0;;;17875:6;;17869:12;;17838:43;:79;;;;-1:-1:-1;17911:6:0;;-1:-1:-1;;;;;17911:6:0;17898:9;:19;;17838:79;:118;;;;-1:-1:-1;;;;;;17935:21:0;;;;;;:17;:21;;;;;;;;17934:22;17838:118;:159;;;;-1:-1:-1;;;;;;17974:23:0;;;;;;:17;:23;;;;;;;;17973:24;17838:159;:186;;;;-1:-1:-1;;;;;;18014:10:0;;5600:42;18014:10;;17838:186;:219;;;;-1:-1:-1;;;;;;18041:16:0;;;;17838:219;:257;;;;-1:-1:-1;;;;;;18074:21:0;;18090:4;18074:21;;17838:257;:302;;;;-1:-1:-1;18128:11:0;;-1:-1:-1;;;;;18112:28:0;;;18128:11;;;;;18112:28;;17838:302;:345;;;;-1:-1:-1;18171:11:0;;-1:-1:-1;;;;;18157:26:0;;;18171:11;;;;;18157:26;;17838:345;17831:352;17745:446;-1:-1:-1;;;17745:446:0:o;19760:1518::-;6273:6;:13;;-1:-1:-1;;;;6273:13:0;-1:-1:-1;;;6273:13:0;;;19843:30:::1;::::0;;::::1;::::0;::::1;::::0;;19866:7:::1;19843:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;6273:13;19888:21;19884:60:::1;;19926:7;;;19884:60;19980:4;19960:26;::::0;;;:11:::1;:26;::::0;;;;;;;19995:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;19995:9:0::1;19960:46:::0;;;;;;;;-1:-1:-1;;19960:67:0::1;19956:166;;20064:4;20044:26;::::0;;;:11:::1;:26;::::0;;;;;;;20079:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;20079:9:0::1;20044:46:::0;;;;;;;-1:-1:-1;;20044:66:0;;19956:166:::1;20134:17;20219:1;20199:6;:16;;;20155:60;;20179:6;:16;;;20156:39;;:20;:39;;;;:::i;:::-;20155:60;;;;:::i;:::-;20154:66;;;;:::i;:::-;20134:86:::0;-1:-1:-1;20231:15:0::1;20249:32;20134:86:::0;20249:20;:32:::1;:::i;:::-;20326:16;::::0;;20340:1:::1;20326:16:::0;;;;;::::1;::::0;;20231:50;;-1:-1:-1;20302:21:0::1;::::0;20326:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20326:16:0::1;20302:40;;20371:4;20353;20358:1;20353:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;20353:23:0::1;;;-1:-1:-1::0;;;;;20353:23:0::1;;;::::0;::::1;20397:9;;;;;;;;;-1:-1:-1::0;;;;;20397:9:0::1;-1:-1:-1::0;;;;;20397:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20387:4;20392:1;20387:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20387:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;20430:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;20430:186:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;20505:7;;20527:1:::1;::::0;20543:4;;20570::::1;::::0;20590:15:::1;::::0;20430:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;20426:233;;20641:7;;;;;;20426:233;20671:24;20736:7:::0;20699:33:::1;20723:9:::0;20699:21:::1;:33;:::i;:::-;20698:45;;;;:::i;:::-;20671:72:::0;-1:-1:-1;20760:13:0;;20756:400:::1;;20794:9;::::0;:222:::1;::::0;-1:-1:-1;;;20794:222:0;;20871:4:::1;20794:222;::::0;::::1;26013:34:1::0;26063:18;;;26056:34;;;20923:1:0::1;26106:18:1::0;;;26099:34;;;26149:18;;;26142:34;5600:42:0::1;26192:19:1::0;;;26185:44;20986:15:0::1;26245:19:1::0;;;26238:35;20794:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;20794:9:0::1;::::0;:25:::1;::::0;20827:16;;25924:19:1;;20794:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;20794:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;20794:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;20790:355;;21123:7;;;;;;;20790:355;-1:-1:-1::0;;21041:40:0::1;::::0;;26769:25:1;;;26825:2;26810:18;;26803:34;;;21041:40:0::1;::::0;-1:-1:-1;26742:18:1;21041:40:0::1;;;;;;;20790:355;21204:15;::::0;:66:::1;::::0;21168:12:::1;::::0;-1:-1:-1;;;;;21204:15:0::1;::::0;21260:5:::1;::::0;21232:21:::1;::::0;21168:12;21204:66;21168:12;21204:66;21232:21;21204:15;21260:5;21204:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;6297:1:0::1;-1:-1:-1::0;6309:6:0;:14;;-1:-1:-1;;;;6309:14:0;;;19760:1518::o;24464:804::-;24552:7;24572:18;24605:3;24601:205;;;-1:-1:-1;24638:9:0;:16;;;24601:205;;;24676:4;24672:134;;;-1:-1:-1;24710:9:0;:17;;;;;;24672:134;;;-1:-1:-1;24773:9:0;:21;;;;;;24672:134;24820:10;24834:1;24820:15;24816:39;;24846:6;24839:13;;;;;24816:39;24877:11;;;;;-1:-1:-1;;;;;24877:11:0;24901:4;24869:37;:110;;;;;24924:13;24941:1;24924:18;:54;;;;24959:13;24976:2;24959:19;24924:54;24865:138;;;-1:-1:-1;24996:4:0;24865:138;25013:17;5461:5;25033:19;25042:10;25033:6;:19;:::i;:::-;:38;;;;:::i;:::-;25013:58;-1:-1:-1;25086:13:0;;25082:141;;25132:4;25116:7;:22;;;;;;;;;;:35;;25142:9;;25116:7;:35;;25142:9;;25116:35;:::i;:::-;;;;-1:-1:-1;;25171:40:0;;391:25:1;;;25194:4:0;;-1:-1:-1;;;;;25171:40:0;;;;;379:2:1;364:18;25171:40:0;;;;;;;25082:141;25242:18;25251:9;25242:6;:18;:::i;21286:563::-;21369:16;;;;;;;21368:17;21360:65;;;;-1:-1:-1;;;21360:65:0;;27260:2:1;21360:65:0;;;27242:21:1;27299:2;27279:18;;;27272:30;27338:34;27318:18;;;27311:62;-1:-1:-1;;;27389:18:1;;;27382:33;27432:19;;21360:65:0;27058:399:1;21360:65:0;21441:20;21452:4;21458:2;21441:10;:20::i;:::-;21440:21;:37;;;;-1:-1:-1;21471:6:0;;-1:-1:-1;;;;;21465:12:0;;;21471:6;;21465:12;21440:37;21436:406;;;-1:-1:-1;;;;;21494:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;21494:30:0;;;21520:4;21494:30;;;;;;21539:19;:25;;;;;:32;;;;;;;;;;21586:16;:23;;-1:-1:-1;;21586:23:0;21494:30;21586:23;;;;;21636:11;;;;21624:114;;21682:11;:40;;-1:-1:-1;;;;;;21682:40:0;21716:4;21682:40;;;;;21624:114;21752:19;:26;;-1:-1:-1;;;;21752:26:0;-1:-1:-1;;;21752:26:0;;;21798:32;;-1:-1:-1;2242:41:1;;21798:32:0;;2230:2:1;2215:18;21798:32:0;2102:187:1;427:118;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;1301:548::-;1413:4;1442:2;1471;1460:9;1453:21;1503:6;1497:13;1546:6;1541:2;1530:9;1526:18;1519:34;1571:1;1581:140;1595:6;1592:1;1589:13;1581:140;;;1690:14;;;1686:23;;1680:30;1656:17;;;1675:2;1652:26;1645:66;1610:10;;1581:140;;;1585:3;1770:1;1765:2;1756:6;1745:9;1741:22;1737:31;1730:42;1840:2;1833;1829:7;1824:2;1816:6;1812:15;1808:29;1797:9;1793:45;1789:54;1781:62;;;;1301:548;;;;:::o;2294:154::-;-1:-1:-1;;;;;2373:5:1;2369:54;2362:5;2359:65;2349:93;;2438:1;2435;2428:12;2453:315;2521:6;2529;2582:2;2570:9;2561:7;2557:23;2553:32;2550:52;;;2598:1;2595;2588:12;2550:52;2637:9;2624:23;2656:31;2681:5;2656:31;:::i;:::-;2706:5;2758:2;2743:18;;;;2730:32;;-1:-1:-1;;;2453:315:1:o;2773:247::-;2832:6;2885:2;2873:9;2864:7;2860:23;2856:32;2853:52;;;2901:1;2898;2891:12;2853:52;2940:9;2927:23;2959:31;2984:5;2959:31;:::i;3025:388::-;3093:6;3101;3154:2;3142:9;3133:7;3129:23;3125:32;3122:52;;;3170:1;3167;3160:12;3122:52;3209:9;3196:23;3228:31;3253:5;3228:31;:::i;:::-;3278:5;-1:-1:-1;3335:2:1;3320:18;;3307:32;3348:33;3307:32;3348:33;:::i;3418:456::-;3495:6;3503;3511;3564:2;3552:9;3543:7;3539:23;3535:32;3532:52;;;3580:1;3577;3570:12;3532:52;3619:9;3606:23;3638:31;3663:5;3638:31;:::i;:::-;3688:5;-1:-1:-1;3745:2:1;3730:18;;3717:32;3758:33;3717:32;3758:33;:::i;:::-;3418:456;;3810:7;;-1:-1:-1;;;3864:2:1;3849:18;;;;3836:32;;3418:456::o;3879:127::-;3940:10;3935:3;3931:20;3928:1;3921:31;3971:4;3968:1;3961:15;3995:4;3992:1;3985:15;4011:275;4082:2;4076:9;4147:2;4128:13;;-1:-1:-1;;4124:27:1;4112:40;;4182:18;4167:34;;4203:22;;;4164:62;4161:88;;;4229:18;;:::i;:::-;4265:2;4258:22;4011:275;;-1:-1:-1;4011:275:1:o;4291:183::-;4351:4;4384:18;4376:6;4373:30;4370:56;;;4406:18;;:::i;:::-;-1:-1:-1;4451:1:1;4447:14;4463:4;4443:25;;4291:183::o;4479:662::-;4533:5;4586:3;4579:4;4571:6;4567:17;4563:27;4553:55;;4604:1;4601;4594:12;4553:55;4640:6;4627:20;4666:4;4690:60;4706:43;4746:2;4706:43;:::i;:::-;4690:60;:::i;:::-;4784:15;;;4870:1;4866:10;;;;4854:23;;4850:32;;;4815:12;;;;4894:15;;;4891:35;;;4922:1;4919;4912:12;4891:35;4958:2;4950:6;4946:15;4970:142;4986:6;4981:3;4978:15;4970:142;;;5052:17;;5040:30;;5090:12;;;;5003;;4970:142;;;-1:-1:-1;5130:5:1;4479:662;-1:-1:-1;;;;;;4479:662:1:o;5146:1215::-;5264:6;5272;5325:2;5313:9;5304:7;5300:23;5296:32;5293:52;;;5341:1;5338;5331:12;5293:52;5381:9;5368:23;5410:18;5451:2;5443:6;5440:14;5437:34;;;5467:1;5464;5457:12;5437:34;5505:6;5494:9;5490:22;5480:32;;5550:7;5543:4;5539:2;5535:13;5531:27;5521:55;;5572:1;5569;5562:12;5521:55;5608:2;5595:16;5630:4;5654:60;5670:43;5710:2;5670:43;:::i;5654:60::-;5748:15;;;5830:1;5826:10;;;;5818:19;;5814:28;;;5779:12;;;;5854:19;;;5851:39;;;5886:1;5883;5876:12;5851:39;5910:11;;;;5930:217;5946:6;5941:3;5938:15;5930:217;;;6026:3;6013:17;6043:31;6068:5;6043:31;:::i;:::-;6087:18;;5963:12;;;;6125;;;;5930:217;;;6166:5;-1:-1:-1;;6209:18:1;;6196:32;;-1:-1:-1;;6240:16:1;;;6237:36;;;6269:1;6266;6259:12;6237:36;;6292:63;6347:7;6336:8;6325:9;6321:24;6292:63;:::i;:::-;6282:73;;;5146:1215;;;;;:::o;6555:159::-;6622:20;;6682:6;6671:18;;6661:29;;6651:57;;6704:1;6701;6694:12;6651:57;6555:159;;;:::o;6719:328::-;6793:6;6801;6809;6862:2;6850:9;6841:7;6837:23;6833:32;6830:52;;;6878:1;6875;6868:12;6830:52;6901:28;6919:9;6901:28;:::i;:::-;6891:38;;6948:37;6981:2;6970:9;6966:18;6948:37;:::i;:::-;6938:47;;7004:37;7037:2;7026:9;7022:18;7004:37;:::i;:::-;6994:47;;6719:328;;;;;:::o;7052:180::-;7111:6;7164:2;7152:9;7143:7;7139:23;7135:32;7132:52;;;7180:1;7177;7170:12;7132:52;-1:-1:-1;7203:23:1;;7052:180;-1:-1:-1;7052:180:1:o;7237:382::-;7302:6;7310;7363:2;7351:9;7342:7;7338:23;7334:32;7331:52;;;7379:1;7376;7369:12;7331:52;7418:9;7405:23;7437:31;7462:5;7437:31;:::i;7871:256::-;7937:6;7945;7998:2;7986:9;7977:7;7973:23;7969:32;7966:52;;;8014:1;8011;8004:12;7966:52;8037:28;8055:9;8037:28;:::i;:::-;8027:38;;8084:37;8117:2;8106:9;8102:18;8084:37;:::i;:::-;8074:47;;7871:256;;;;;:::o;8392:385::-;8478:6;8486;8494;8502;8555:3;8543:9;8534:7;8530:23;8526:33;8523:53;;;8572:1;8569;8562:12;8523:53;-1:-1:-1;;8595:23:1;;;8665:2;8650:18;;8637:32;;-1:-1:-1;8716:2:1;8701:18;;8688:32;;8767:2;8752:18;8739:32;;-1:-1:-1;8392:385:1;-1:-1:-1;8392:385:1:o;9741:127::-;9802:10;9797:3;9793:20;9790:1;9783:31;9833:4;9830:1;9823:15;9857:4;9854:1;9847:15;9873:422;9962:1;10005:5;9962:1;10019:270;10040:7;10030:8;10027:21;10019:270;;;10099:4;10095:1;10091:6;10087:17;10081:4;10078:27;10075:53;;;10108:18;;:::i;:::-;10158:7;10148:8;10144:22;10141:55;;;10178:16;;;;10141:55;10257:22;;;;10217:15;;;;10019:270;;;10023:3;9873:422;;;;;:::o;10300:806::-;10349:5;10379:8;10369:80;;-1:-1:-1;10420:1:1;10434:5;;10369:80;10468:4;10458:76;;-1:-1:-1;10505:1:1;10519:5;;10458:76;10550:4;10568:1;10563:59;;;;10636:1;10631:130;;;;10543:218;;10563:59;10593:1;10584:10;;10607:5;;;10631:130;10668:3;10658:8;10655:17;10652:43;;;10675:18;;:::i;:::-;-1:-1:-1;;10731:1:1;10717:16;;10746:5;;10543:218;;10845:2;10835:8;10832:16;10826:3;10820:4;10817:13;10813:36;10807:2;10797:8;10794:16;10789:2;10783:4;10780:12;10776:35;10773:77;10770:159;;;-1:-1:-1;10882:19:1;;;10914:5;;10770:159;10961:34;10986:8;10980:4;10961:34;:::i;:::-;11031:6;11027:1;11023:6;11019:19;11010:7;11007:32;11004:58;;;11042:18;;:::i;:::-;11080:20;;10300:806;-1:-1:-1;;;10300:806:1:o;11111:140::-;11169:5;11198:47;11239:4;11229:8;11225:19;11219:4;11198:47;:::i;11256:168::-;11329:9;;;11360;;11377:15;;;11371:22;;11357:37;11347:71;;11398:18;;:::i;11429:128::-;11496:9;;;11517:11;;;11514:37;;;11531:18;;:::i;11912:127::-;11973:10;11968:3;11964:20;11961:1;11954:31;12004:4;12001:1;11994:15;12028:4;12025:1;12018:15;12391:197;12429:3;12457:6;12498:2;12491:5;12487:14;12525:2;12516:7;12513:15;12510:41;;12531:18;;:::i;:::-;12580:1;12567:15;;12391:197;-1:-1:-1;;;12391:197:1:o;12593:125::-;12658:9;;;12679:10;;;12676:36;;;12692:18;;:::i;13421:168::-;13488:6;13514:10;;;13526;;;13510:27;;13549:11;;;13546:37;;;13563:18;;:::i;:::-;13546:37;13421:168;;;;:::o;13955:217::-;13995:1;14021;14011:132;;14065:10;14060:3;14056:20;14053:1;14046:31;14100:4;14097:1;14090:15;14128:4;14125:1;14118:15;14011:132;-1:-1:-1;14157:9:1;;13955:217::o;17865:184::-;17935:6;17988:2;17976:9;17967:7;17963:23;17959:32;17956:52;;;18004:1;18001;17994:12;17956:52;-1:-1:-1;18027:16:1;;17865:184;-1:-1:-1;17865:184:1:o;18356:245::-;18423:6;18476:2;18464:9;18455:7;18451:23;18447:32;18444:52;;;18492:1;18489;18482:12;18444:52;18524:9;18518:16;18543:28;18565:5;18543:28;:::i;19373:251::-;19443:6;19496:2;19484:9;19475:7;19471:23;19467:32;19464:52;;;19512:1;19509;19502:12;19464:52;19544:9;19538:16;19563:31;19588:5;19563:31;:::i;24618:1026::-;24880:4;24928:3;24917:9;24913:19;24959:6;24948:9;24941:25;24985:2;25023:6;25018:2;25007:9;25003:18;24996:34;25066:3;25061:2;25050:9;25046:18;25039:31;25090:6;25125;25119:13;25156:6;25148;25141:22;25194:3;25183:9;25179:19;25172:26;;25233:2;25225:6;25221:15;25207:29;;25254:1;25264:218;25278:6;25275:1;25272:13;25264:218;;;25343:13;;-1:-1:-1;;;;;25339:62:1;25327:75;;25457:15;;;;25422:12;;;;25300:1;25293:9;25264:218;;;-1:-1:-1;;;;;;;25538:55:1;;;;25533:2;25518:18;;25511:83;-1:-1:-1;;;25625:3:1;25610:19;25603:35;25499:3;24618:1026;-1:-1:-1;;;24618:1026:1:o;26284:306::-;26372:6;26380;26388;26441:2;26429:9;26420:7;26416:23;26412:32;26409:52;;;26457:1;26454;26447:12;26409:52;26486:9;26480:16;26470:26;;26536:2;26525:9;26521:18;26515:25;26505:35;;26580:2;26569:9;26565:18;26559:25;26549:35;;26284:306;;;;;:::o

Swarm Source

ipfs://3368409b95ec66194f4fcaa3dc1ac86826afa71fdee18005b5190a59fa7f564a

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.