ETH Price: $3,332.92 (-2.51%)

Contract

0x255DBa44Adc4EA0093D8327423c2eC57952FbF3a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer211109422024-11-04 1:17:1153 days ago1730683031IN
0x255DBa44...7952FbF3a
0 ETH0.000295742.50672453
Approve203192282024-07-16 12:59:47163 days ago1721134787IN
0x255DBa44...7952FbF3a
0 ETH0.000228969.16114909
Approve176398242023-07-07 5:22:35539 days ago1688707355IN
0x255DBa44...7952FbF3a
0 ETH0.000596923.882877
Approve170597142023-04-16 13:23:11620 days ago1681651391IN
0x255DBa44...7952FbF3a
0 ETH0.0005880623.52931585
Approve170117602023-04-09 15:57:11627 days ago1681055831IN
0x255DBa44...7952FbF3a
0 ETH0.0005795723.1896686
Approve161919992022-12-15 18:51:35742 days ago1671130295IN
0x255DBa44...7952FbF3a
0 ETH0.0007544330.1859132
Transfer158828252022-11-02 14:06:47785 days ago1667398007IN
0x255DBa44...7952FbF3a
0 ETH0.0013501911
Approve157354082022-10-12 23:47:35806 days ago1665618455IN
0x255DBa44...7952FbF3a
0 ETH0.0003914315.66167067
Approve156798902022-10-05 5:43:11814 days ago1664948591IN
0x255DBa44...7952FbF3a
0 ETH0.000236144.99483487
Approve156793342022-10-05 3:50:35814 days ago1664941835IN
0x255DBa44...7952FbF3a
0 ETH0.000399858.45781122
Approve156793112022-10-05 3:45:59814 days ago1664941559IN
0x255DBa44...7952FbF3a
0 ETH0.000331797.01802004
Transfer156130272022-09-25 21:18:47823 days ago1664140727IN
0x255DBa44...7952FbF3a
0 ETH0.0010001810.78129179
Approve155548532022-09-17 17:41:11831 days ago1663436471IN
0x255DBa44...7952FbF3a
0 ETH0.000206984.37804938
Approve155513042022-09-17 5:44:47832 days ago1663393487IN
0x255DBa44...7952FbF3a
0 ETH0.000109024.36223714
Approve155317832022-09-14 7:53:41834 days ago1663142021IN
0x255DBa44...7952FbF3a
0 ETH0.000181287.25323373
Approve155314702022-09-14 6:34:47835 days ago1663137287IN
0x255DBa44...7952FbF3a
0 ETH0.000222488.90203517
Approve155185302022-09-12 3:02:57837 days ago1662951777IN
0x255DBa44...7952FbF3a
0 ETH0.0003226312.90915832
Approve154117572022-08-25 22:37:56854 days ago1661467076IN
0x255DBa44...7952FbF3a
0 ETH0.000461539.76233018
Approve154067482022-08-25 3:12:35855 days ago1661397155IN
0x255DBa44...7952FbF3a
0 ETH0.000174957
Approve153940142022-08-23 2:38:14857 days ago1661222294IN
0x255DBa44...7952FbF3a
0 ETH0.0007683716.25269177
Approve153744512022-08-20 0:29:04860 days ago1660955344IN
0x255DBa44...7952FbF3a
0 ETH0.0006440913.62395768
Approve153654832022-08-18 14:16:11861 days ago1660832171IN
0x255DBa44...7952FbF3a
0 ETH0.0004734610.01461682
Approve153635342022-08-18 6:46:16862 days ago1660805176IN
0x255DBa44...7952FbF3a
0 ETH0.000352097.44740334
Approve153634642022-08-18 6:26:37862 days ago1660803997IN
0x255DBa44...7952FbF3a
0 ETH0.000191537.66368443
Approve153625152022-08-18 2:56:52862 days ago1660791412IN
0x255DBa44...7952FbF3a
0 ETH0.0002633810.53845012
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
156793892022-10-05 4:01:35814 days ago1664942495
0x255DBa44...7952FbF3a
0.00408848 ETH
156793892022-10-05 4:01:35814 days ago1664942495
0x255DBa44...7952FbF3a
0.00010483 ETH
156793892022-10-05 4:01:35814 days ago1664942495
0x255DBa44...7952FbF3a
0.00419332 ETH
153654852022-08-18 14:16:25861 days ago1660832185
0x255DBa44...7952FbF3a
0.00478033 ETH
153654852022-08-18 14:16:25861 days ago1660832185
0x255DBa44...7952FbF3a
0.00012257 ETH
153654852022-08-18 14:16:25861 days ago1660832185
0x255DBa44...7952FbF3a
0.0049029 ETH
153536842022-08-16 17:32:51863 days ago1660671171
0x255DBa44...7952FbF3a
0.00629316 ETH
153536842022-08-16 17:32:51863 days ago1660671171
0x255DBa44...7952FbF3a
0.00016136 ETH
153536842022-08-16 17:32:51863 days ago1660671171
0x255DBa44...7952FbF3a
0.00645452 ETH
153494132022-08-16 1:16:41864 days ago1660612601
0x255DBa44...7952FbF3a
0.00511315 ETH
153494132022-08-16 1:16:41864 days ago1660612601
0x255DBa44...7952FbF3a
0.0001311 ETH
153494132022-08-16 1:16:41864 days ago1660612601
0x255DBa44...7952FbF3a
0.00524425 ETH
153492762022-08-16 0:49:05864 days ago1660610945
0x255DBa44...7952FbF3a
0.01110149 ETH
153492762022-08-16 0:49:05864 days ago1660610945
0x255DBa44...7952FbF3a
0.00028465 ETH
153492762022-08-16 0:49:05864 days ago1660610945
0x255DBa44...7952FbF3a
0.01138615 ETH
153479722022-08-15 19:57:09864 days ago1660593429
0x255DBa44...7952FbF3a
0.0059369 ETH
153479722022-08-15 19:57:09864 days ago1660593429
0x255DBa44...7952FbF3a
0.00015222 ETH
153479722022-08-15 19:57:09864 days ago1660593429
0x255DBa44...7952FbF3a
0.00608913 ETH
153474402022-08-15 17:54:19864 days ago1660586059
0x255DBa44...7952FbF3a
0.00784448 ETH
153474402022-08-15 17:54:19864 days ago1660586059
0x255DBa44...7952FbF3a
0.00020114 ETH
153474402022-08-15 17:54:19864 days ago1660586059
0x255DBa44...7952FbF3a
0.00804562 ETH
153469922022-08-15 16:10:08864 days ago1660579808
0x255DBa44...7952FbF3a
0.01294168 ETH
153469922022-08-15 16:10:08864 days ago1660579808
0x255DBa44...7952FbF3a
0.00033183 ETH
153469922022-08-15 16:10:08864 days ago1660579808
0x255DBa44...7952FbF3a
0.01327351 ETH
153467882022-08-15 15:28:36864 days ago1660577316
0x255DBa44...7952FbF3a
0.02286624 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20Contract

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-15
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.14;

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

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

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

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

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

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public isExcludedFromMaxWalletRestrictions;
    mapping (address => bool) private _isblacklisted;
    mapping (address => uint256) private _transferDelay;
    mapping (address => bool) private _holderDelay;


    bool private sameBlockActive = false;
    mapping (address => uint256) private lastTrade;   

    bool private isInitialized = false;
    
    mapping (address => uint256) firstBuy;
    
    uint256 private startingSupply;

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

    taxes public Fees = taxes(
    {buyFee: 40, sellFee: 40, transferFee: 0});
//==========================
    // Max Limits

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

    MaxLimits public maxFees = MaxLimits(
    {maxBuy: 500, maxSell: 500, maxTransfer: 500});
//==========================    
    //Proportions of Taxes
    struct feeProportions {
    uint liquidity;
    uint developer;
    }

    feeProportions public Ratios = feeProportions(
    { liquidity: 5, developer: 95});

    uint256 private constant masterTaxDivisor = 10000;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
 
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;


    address constant private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD; // Receives tokens, deflates supply, increases price floor.
    
    address public _devWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent;
    uint256 private maxTxDivisor;
    uint256 private _maxTxAmount;
    uint256 private _liqAddedBlock;
    
    uint256 private maxWalletPercent;
    uint256 private maxWalletDivisor;
    uint256 private _maxWalletSize;

    uint256 private swapThreshold;
    uint256 private swapAmount;

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

    receive() external payable {}

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

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_devWallet == payable(_owner))
            _devWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

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

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

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

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

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

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

    function getFirstBuy(address account) public view returns (uint256) {
        return firstBuy[account];
    }

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

    function launch(string memory initName, string memory initSymbol, uint256 initSupply) external onlyOwner payable {
        require(!isInitialized, "Contract already initialized.");
        require(_liqAddStatus == 0);
        
        _name = initName;
        _symbol = initSymbol;

        startingSupply = initSupply;
        _decimals = 18;
        _tTotal = startingSupply * 10**_decimals;

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

        _devWallet = address(0xAda523f3538489420d551588d4d192605683de8e);

        maxTxPercent = 50; // Max Transaction Amount: 100 = 1%
        maxTxDivisor = 10000;
        _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
        
        maxWalletPercent = 100; //Max Wallet 100: 1%
        maxWalletDivisor = 10000;
        _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
        
        swapThreshold = (_tTotal * 5) / 10_000;
        swapAmount = (_tTotal * 5) / 1_000;

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


        approve(_routerAddress, type(uint256).max);
        approve(owner(), type(uint256).max);


        isInitialized = true;
        _tOwned[owner()] = _tTotal;
        _approve(owner(), _routerAddress, _tTotal);
        emit Transfer(address(0), owner(), _tTotal);
 
        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

    
        _transfer(_owner, address(this), balanceOf(_owner));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        _liqAddStatus = 1;
        _liqAddedBlock = block.number;
    }

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


    function excludeFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = true;
    }

    function revokeExcludedFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = false;
    }
    

    function setRatios(uint _liquidity, uint _developer) external onlyOwner {
        require ( (_liquidity+_developer) == 1100, "limit taxes");
        Ratios.liquidity = _liquidity;
        Ratios.developer = _developer;
        }


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

    }

    function removeLimits() external onlyOwner {
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;
    }

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

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

    }

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

    function setWallets(address payable developerWallet) external onlyOwner {
        _devWallet = payable(developerWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
     
    function setBlacklist(address[] memory blacklisted_, bool status_) public onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            if (!lpPairs[blacklisted_[i]] && blacklisted_[i] != address(_routerAddress)) {
                _isblacklisted[blacklisted_[i]] = status_;
            }
        }
    }

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

    function transferDelay(address from, address to, address orig) internal returns (bool) {
       bool oktoswap = true;
      if (lpPair == from) {  _transferDelay[to] = block.number;  _transferDelay[orig] = block.number;}
      else if (lpPair == to) {
             if (_transferDelay[from] >= block.number) { _holderDelay[from] = true; oktoswap = false;}
                 if (_holderDelay[from]) { oktoswap = false; }
                else if (lpPair != to && lpPair != from) { _transferDelay[from] = block.number; _transferDelay[to] = block.number; _transferDelay[orig] = block.number;}
            }
           return (oktoswap);
    }
    

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        require(!_isblacklisted[to] && !_isblacklisted[from],"unable to trade");
        if (_liqAddedBlock > block.number - 50) {
            bool oktoswap;
            address orig = tx.origin;
            oktoswap = transferDelay(from,to,orig);
            require(oktoswap, "transfer delay enabled");
        }
        if(_hasLimits(from, to)) {
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                    } 
                else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                    }
            }
            if(!(isExcludedFromMaxWalletRestrictions[from] || isExcludedFromMaxWalletRestrictions[to])) {
                if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
                }
                if(to != _routerAddress && !lpPairs[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                }

            }
            
        }

        if (_tOwned[to] == 0) {
            firstBuy[to] = block.timestamp;
        }

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

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

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

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

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


        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (address(this).balance > 0) {
            bool success = true;
            (success,) = address(_devWallet).call{value: address(this).balance}("");
        }
    }

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

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

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

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
                _liqAddBlock = block.number;

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

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

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        } 
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount; //A
        _tOwned[to] += amountReceived;

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

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

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

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

        else {currentFee = Fees.transferFee;}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Fees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ratios","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","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":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"excludeFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFirstBuy","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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxWalletRestrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"initName","type":"string"},{"internalType":"string","name":"initSymbol","type":"string"},{"internalType":"uint256","name":"initSupply","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFees","outputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxTransfer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"revokeExcludedFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"},{"internalType":"bool","name":"status_","type":"bool"}],"name":"setBlacklist","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":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"developerWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006003556000600b60006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506040518060600160405280602881526020016028815260200160008152506012600082015181600001556020820151816001015560408201518160020155505060405180606001604052806101f481526020016101f481526020016101f481525060156000820151816000015560208201518160010155604082015181600201555050604051806040016040528060058152602001605f815250601860008201518160000155602082015181600101555050601a60009054906101000a900460ff16600a6200010f919062000359565b600f546200011e9190620003aa565b601b556000601f60156101000a81548160ff0219169083151502179055506000602960006101000a81548160ff0219169083151502179055506000602a556000602b556000602c556000602d553480156200017857600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200040b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200024d57808604811115620002255762000224620001bf565b5b6001851615620002355780820291505b80810290506200024585620001ee565b945062000205565b94509492505050565b6000826200026857600190506200033b565b816200027857600090506200033b565b81600181146200029157600281146200029c57620002d2565b60019150506200033b565b60ff841115620002b157620002b0620001bf565b5b8360020a915084821115620002cb57620002ca620001bf565b5b506200033b565b5060208310610133831016604e8410600b84101617156200030c5782820a905083811115620003065762000305620001bf565b5b6200033b565b6200031b8484846001620001fb565b92509050818404811115620003355762000334620001bf565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620003668262000342565b915062000373836200034c565b9250620003a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000256565b905092915050565b6000620003b78262000342565b9150620003c48362000342565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200040057620003ff620001bf565b5b828202905092915050565b615fa4806200041b6000396000f3fe6080604052600436106102555760003560e01c806370a0823111610139578063b104b321116100b6578063ce8b79c91161007a578063ce8b79c9146108dd578063dd62ed3e14610906578063e83e34b114610943578063e9dae5ed14610970578063eb50e70e14610999578063fb78680d146109c25761025c565b8063b104b32114610818578063b2bdfa7b14610834578063b5f7bfa21461085f578063bc1323e81461088b578063c49b9a80146108b45761025c565b80638da5cb5b116100fd5780638da5cb5b1461070b57806395d89b4114610736578063a13ce2c614610761578063a457c2d71461079e578063a9059cbb146107db5761025c565b806370a0823114610638578063715018a614610675578063751039fc1461068c578063893d20e8146106a35780638c7321ad146106ce5761025c565b806339509351116101d25780634fb2e45d116101965780634fb2e45d146105185780634fbee1931461054157806350a8e0161461057e578063571ac8b0146105a9578063590ffdce146105e65780636639dd931461060f5761025c565b8063395093511461042f5780633aaa36e61461046c5780633f3cf56c14610499578063452ed4f1146104c25780634a74bb02146104ed5761025c565b806311a63e171161021957806311a63e171461034857806318160ddd1461037357806323b872dd1461039e57806326003957146103db578063313ce567146104045761025c565b806303fd2a451461026157806306fdde031461028c5780630758d924146102b7578063095ea7b3146102e25780630e85d1e31461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109eb565b604051610283919061494e565b60405180910390f35b34801561029857600080fd5b506102a16109f1565b6040516102ae9190614a02565b60405180910390f35b3480156102c357600080fd5b506102cc610a83565b6040516102d99190614a83565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190614b14565b610aa9565b6040516103169190614b6f565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190614cfe565b610ac7565b005b34801561035457600080fd5b5061035d610cc5565b60405161036a919061494e565b60405180910390f35b34801561037f57600080fd5b50610388610ceb565b6040516103959190614d69565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190614d84565b610cf5565b6040516103d29190614b6f565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190614dd7565b610e42565b005b34801561041057600080fd5b50610419610f52565b6040516104269190614e33565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614b14565b610f69565b6040516104639190614b6f565b60405180910390f35b34801561047857600080fd5b50610481611015565b60405161049093929190614e4e565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190614dd7565b61102d565b005b3480156104ce57600080fd5b506104d761113d565b6040516104e4919061494e565b60405180910390f35b3480156104f957600080fd5b50610502611163565b60405161050f9190614b6f565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190614e85565b611176565b005b34801561054d57600080fd5b5061056860048036038101906105639190614e85565b6115e4565b6040516105759190614b6f565b60405180910390f35b34801561058a57600080fd5b5061059361163a565b6040516105a09190614b6f565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614e85565b61164d565b6040516105dd9190614b6f565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190614eb2565b611680565b005b34801561061b57600080fd5b5061063660048036038101906106319190614dd7565b611770565b005b34801561064457600080fd5b5061065f600480360381019061065a9190614e85565b61186c565b60405161066c9190614d69565b60405180910390f35b34801561068157600080fd5b5061068a6118b5565b005b34801561069857600080fd5b506106a1611a33565b005b3480156106af57600080fd5b506106b8611adc565b6040516106c5919061494e565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f09190614e85565b611aeb565b6040516107029190614b6f565b60405180910390f35b34801561071757600080fd5b50610720611b0b565b60405161072d919061494e565b60405180910390f35b34801561074257600080fd5b5061074b611b34565b6040516107589190614a02565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190614e85565b611bc6565b6040516107959190614d69565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190614b14565b611c0f565b6040516107d29190614b6f565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190614b14565b611cbb565b60405161080f9190614b6f565b60405180910390f35b610832600480360381019061082d9190614fa7565b611cda565b005b34801561084057600080fd5b506108496127f7565b604051610856919061494e565b60405180910390f35b34801561086b57600080fd5b5061087461281b565b604051610882929190615032565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190614e85565b61282d565b005b3480156108c057600080fd5b506108db60048036038101906108d6919061505b565b61291d565b005b3480156108e957600080fd5b5061090460048036038101906108ff9190614e85565b612a06565b005b34801561091257600080fd5b5061092d60048036038101906109289190615088565b612af6565b60405161093a9190614d69565b60405180910390f35b34801561094f57600080fd5b50610958612b7d565b60405161096793929190614e4e565b60405180910390f35b34801561097c57600080fd5b50610997600480360381019061099291906150c8565b612b95565b005b3480156109a557600080fd5b506109c060048036038101906109bb9190615159565b612cb7565b005b3480156109ce57600080fd5b506109e960048036038101906109e49190615186565b612d90565b005b61dead81565b606060108054610a009061521c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2c9061521c565b8015610a795780601f10610a4e57610100808354040283529160200191610a79565b820191906000526020600020905b815481529060010190602001808311610a5c57829003601f168201915b5050505050905090565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610abd610ab6612e69565b8484612e71565b6001905092915050565b610acf612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390615299565b60405180910390fd5b60005b8251811015610cc05760026000848381518110610b7f57610b7e6152b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610c365750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16838281518110610c1557610c146152b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cad578160086000858481518110610c5357610c526152b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610cb890615317565b915050610b5f565b505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b54905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e2e5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e26919061535f565b925050819055505b610e3984848461303a565b90509392505050565b610e4a612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90615299565b60405180910390fd5b60008183601b54610ee89190615393565b610ef2919061541c565b905061012c601b54610f04919061541c565b811015610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d906154bf565b60405180910390fd5b80602681905550505050565b6000601a60009054906101000a900460ff16905090565b600061100b610f76612e69565b848460046000610f84612e69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461100691906154df565b612e71565b6001905092915050565b60128060000154908060010154908060020154905083565b611035612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990615299565b60405180910390fd5b60008183601b546110d39190615393565b6110dd919061541c565b905061012c601b546110ef919061541c565b811015611131576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611128906154bf565b60405180910390fd5b80602281905550505050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60159054906101000a900460ff1681565b61117e612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290615299565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361127a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611271906155a7565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906155a7565b60405180910390fd5b61131560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611680565b611320816001611680565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113d75780601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61140060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661186c565b600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006114cc60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661186c565b11156115275761152560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261152060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661186c565b61303a565b505b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602960009054906101000a900460ff1681565b6000611679827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610aa9565b9050919050565b611688612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c90615299565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611778612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90615299565b60405180910390fd5b61044c818361181491906154df565b14611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90615613565b60405180910390fd5b81601860000181905550806018600101819055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118bd612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190615299565b60405180910390fd5b61197560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611680565b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b611a3b612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90615299565b60405180910390fd5b601b54602281905550601b54602681905550565b6000611ae6611b0b565b905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054611b439061521c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6f9061521c565b8015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b820191906000526020600020905b815481529060010190602001808311611b9f57829003601f168201915b5050505050905090565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611cb1611c1c612e69565b848460046000611c2a612e69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cac919061535f565b612e71565b6001905092915050565b6000611ccf611cc8612e69565b848461303a565b506001905092915050565b611ce2612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690615299565b60405180910390fd5b600d60009054906101000a900460ff1615611dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db69061567f565b60405180910390fd5b6000602a5414611dce57600080fd5b8260109080519060200190611de492919061486a565b508160119080519060200190611dfb92919061486a565b5080600f819055506012601a60006101000a81548160ff021916908360ff160217905550601a60009054906101000a900460ff16600a611e3b91906157d2565b600f54611e489190615393565b601b81905550737a250d5630b4cf539739df2c5dacb4c659f2488d601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f349190615832565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe09190615832565b306040518363ffffffff1660e01b8152600401611ffe92919061585f565b6020604051808303816000875af115801561201d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120419190615832565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160026000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555073ada523f3538489420d551588d4d192605683de8e601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506032602081905550612710602181905550602154602054601b546122379190615393565b612241919061541c565b6022819055506064602481905550612710602581905550602554602454601b5461226b9190615393565b612275919061541c565b6026819055506127106005601b5461228d9190615393565b612297919061541c565b6027819055506103e86005601b546122af9190615393565b6122b9919061541c565b6028819055506001600660006122cd611b0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000612458611b0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506124e7737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610aa9565b506125196124f3611b0b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610aa9565b506001600d60006101000a81548160ff021916908315150217905550601b5460016000612544611b0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125aa61258d611b0b565b737a250d5630b4cf539739df2c5dacb4c659f2488d601b54612e71565b6125b2611b0b565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040516126119190614d69565b60405180910390a361268660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612e71565b6126d330601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612e71565b61272660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061272160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661186c565b61303a565b50601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306127703061186c565b60008061277b611b0b565b426040518863ffffffff1660e01b815260040161279d969594939291906158c3565b60606040518083038185885af11580156127bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127e09190615939565b5050506001602a8190555043602381905550505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60188060000154908060010154905082565b612835612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990615299565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612925612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990615299565b60405180910390fd5b80601f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516129fb9190614b6f565b60405180910390a150565b612a0e612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9290615299565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60158060000154908060010154908060020154905083565b612b9d612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190615299565b60405180910390fd5b6015600001548311158015612c4457506015600101548211155b8015612c5557506015600201548111155b612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b906159d8565b60405180910390fd5b826012600001819055508160126001018190555080601260020181905550505050565b612cbf612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4390615299565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612d98612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90615299565b60405180910390fd5b8284601b54612e349190615393565b612e3e919061541c565b6027819055508082601b54612e539190615393565b612e5d919061541c565b60288190555050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790615a44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4690615a44565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161302d9190614d69565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036130aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a190615ab0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311090615ab0565b60405180910390fd5b6000821161315c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315390615b1c565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132005750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61323f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323690615b88565b60405180910390fd5b60324361324c919061535f565b60235411156132ab576000803290506132668686836138d6565b9150816132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90615bf4565b60405180910390fd5b50505b6132b58484613c9e565b156136d157600b60009054906101000a900460ff161561344657600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133b55743600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361336c57600080fd5b43600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613445565b43600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361340057600080fd5b43600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134e75750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6136d057600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061358c5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135d7576022548211156135d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cd90615c60565b60405180910390fd5b5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156136715750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136cf57602654826136838561186c565b61368d91906154df565b11156136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c590615ccc565b60405180910390fd5b5b5b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361375d5742600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600060019050600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138045750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561380e57600090505b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138c057601f60149054906101000a900460ff161580156138895750601f60159054906101000a900460ff165b156138bf5760006138993061186c565b905060275481106138bd5760285481106138b35760285490505b6138bc81613e75565b5b505b5b6138cc8585858461405f565b9150509392505050565b600080600190508473ffffffffffffffffffffffffffffffffffffffff16601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036139bf5743600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c93565b8373ffffffffffffffffffffffffffffffffffffffff16601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613c925743600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613ab7576001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600090505b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b125760009050613c91565b8373ffffffffffffffffffffffffffffffffffffffff16601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015613bbe57508473ffffffffffffffffffffffffffffffffffffffff16601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613c905743600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b809150509392505050565b6000613ca8611b0b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613d165750613ce6611b0b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613d6c5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613dc25750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613dfc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613e355750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613e6d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001601f60146101000a81548160ff0219169083151502179055506000601860010154601860000154613ea891906154df565b03156140415760006002601860010154601860000154613ec891906154df565b60186000015484613ed99190615393565b613ee3919061541c565b613eed919061541c565b905060008183613efd919061535f565b9050613f088161421c565b600047905060006002601860010154601860000154613f2791906154df565b60186000015484613f389190615393565b613f42919061541c565b613f4c919061541c565b90506000841115613f9d57613f618482614432565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848286604051613f9493929190614e4e565b60405180910390a15b600047111561403c57600060019050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ff290615d1d565b60006040518083038185875af1925050503d806000811461402f576040519150601f19603f3d011682016040523d82523d6000602084013e614034565b606091505b505080915050505b505050505b6000601f60146101000a81548160ff02191690831515021790555050565b6000602960009054906101000a900460ff166140e35761407f85856144ea565b602960009054906101000a900460ff161580156140a257506140a18585613c9e565b5b156140e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140d990615da4565b60405180910390fd5b5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614132919061535f565b925050819055506000826141465783614152565b61415186868661467c565b5b905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141a391906154df565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142079190614d69565b60405180910390a36001915050949350505050565b6000600267ffffffffffffffff81111561423957614238614b8f565b5b6040519080825280602002602001820160405280156142675781602001602082028036833780820191505090505b509050308160008151811061427f5761427e6152b9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061434a9190615832565b8160018151811061435e5761435d6152b9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143fc959493929190615e82565b600060405180830381600087803b15801561441657600080fd5b505af115801561442a573d6000803e3d6000fd5b505050505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061447e611b0b565b426040518863ffffffff1660e01b81526004016144a0969594939291906158c3565b60606040518083038185885af11580156144be573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144e39190615939565b5050505050565b602960009054906101000a900460ff161561453a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161453190615f4e565b60405180910390fd5b6145448282613c9e565b15801561459e5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156146785743602b819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602960006101000a81548160ff02191690831515021790555042602c819055506001601f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159600160405161466f9190614b6f565b60405180910390a15b5050565b600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036146e157601260010154905061474d565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361474357601260000154905061474c565b60126002015490505b5b6147578585613c9e565b1561477b576000602a54148061477057506001602a5414155b1561477a57600080fd5b5b6000612710828561478c9190615393565b614796919061541c565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546147e791906154df565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161484b9190614d69565b60405180910390a3808461485f919061535f565b925050509392505050565b8280546148769061521c565b90600052602060002090601f01602090048101928261489857600085556148df565b82601f106148b157805160ff19168380011785556148df565b828001600101855582156148df579182015b828111156148de5782518255916020019190600101906148c3565b5b5090506148ec91906148f0565b5090565b5b808211156149095760008160009055506001016148f1565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149388261490d565b9050919050565b6149488161492d565b82525050565b6000602082019050614963600083018461493f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149a3578082015181840152602081019050614988565b838111156149b2576000848401525b50505050565b6000601f19601f8301169050919050565b60006149d482614969565b6149de8185614974565b93506149ee818560208601614985565b6149f7816149b8565b840191505092915050565b60006020820190508181036000830152614a1c81846149c9565b905092915050565b6000819050919050565b6000614a49614a44614a3f8461490d565b614a24565b61490d565b9050919050565b6000614a5b82614a2e565b9050919050565b6000614a6d82614a50565b9050919050565b614a7d81614a62565b82525050565b6000602082019050614a986000830184614a74565b92915050565b6000604051905090565b600080fd5b600080fd5b614abb8161492d565b8114614ac657600080fd5b50565b600081359050614ad881614ab2565b92915050565b6000819050919050565b614af181614ade565b8114614afc57600080fd5b50565b600081359050614b0e81614ae8565b92915050565b60008060408385031215614b2b57614b2a614aa8565b5b6000614b3985828601614ac9565b9250506020614b4a85828601614aff565b9150509250929050565b60008115159050919050565b614b6981614b54565b82525050565b6000602082019050614b846000830184614b60565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614bc7826149b8565b810181811067ffffffffffffffff82111715614be657614be5614b8f565b5b80604052505050565b6000614bf9614a9e565b9050614c058282614bbe565b919050565b600067ffffffffffffffff821115614c2557614c24614b8f565b5b602082029050602081019050919050565b600080fd5b6000614c4e614c4984614c0a565b614bef565b90508083825260208201905060208402830185811115614c7157614c70614c36565b5b835b81811015614c9a5780614c868882614ac9565b845260208401935050602081019050614c73565b5050509392505050565b600082601f830112614cb957614cb8614b8a565b5b8135614cc9848260208601614c3b565b91505092915050565b614cdb81614b54565b8114614ce657600080fd5b50565b600081359050614cf881614cd2565b92915050565b60008060408385031215614d1557614d14614aa8565b5b600083013567ffffffffffffffff811115614d3357614d32614aad565b5b614d3f85828601614ca4565b9250506020614d5085828601614ce9565b9150509250929050565b614d6381614ade565b82525050565b6000602082019050614d7e6000830184614d5a565b92915050565b600080600060608486031215614d9d57614d9c614aa8565b5b6000614dab86828701614ac9565b9350506020614dbc86828701614ac9565b9250506040614dcd86828701614aff565b9150509250925092565b60008060408385031215614dee57614ded614aa8565b5b6000614dfc85828601614aff565b9250506020614e0d85828601614aff565b9150509250929050565b600060ff82169050919050565b614e2d81614e17565b82525050565b6000602082019050614e486000830184614e24565b92915050565b6000606082019050614e636000830186614d5a565b614e706020830185614d5a565b614e7d6040830184614d5a565b949350505050565b600060208284031215614e9b57614e9a614aa8565b5b6000614ea984828501614ac9565b91505092915050565b60008060408385031215614ec957614ec8614aa8565b5b6000614ed785828601614ac9565b9250506020614ee885828601614ce9565b9150509250929050565b600080fd5b600067ffffffffffffffff821115614f1257614f11614b8f565b5b614f1b826149b8565b9050602081019050919050565b82818337600083830152505050565b6000614f4a614f4584614ef7565b614bef565b905082815260208101848484011115614f6657614f65614ef2565b5b614f71848285614f28565b509392505050565b600082601f830112614f8e57614f8d614b8a565b5b8135614f9e848260208601614f37565b91505092915050565b600080600060608486031215614fc057614fbf614aa8565b5b600084013567ffffffffffffffff811115614fde57614fdd614aad565b5b614fea86828701614f79565b935050602084013567ffffffffffffffff81111561500b5761500a614aad565b5b61501786828701614f79565b925050604061502886828701614aff565b9150509250925092565b60006040820190506150476000830185614d5a565b6150546020830184614d5a565b9392505050565b60006020828403121561507157615070614aa8565b5b600061507f84828501614ce9565b91505092915050565b6000806040838503121561509f5761509e614aa8565b5b60006150ad85828601614ac9565b92505060206150be85828601614ac9565b9150509250929050565b6000806000606084860312156150e1576150e0614aa8565b5b60006150ef86828701614aff565b935050602061510086828701614aff565b925050604061511186828701614aff565b9150509250925092565b60006151268261490d565b9050919050565b6151368161511b565b811461514157600080fd5b50565b6000813590506151538161512d565b92915050565b60006020828403121561516f5761516e614aa8565b5b600061517d84828501615144565b91505092915050565b600080600080608085870312156151a05761519f614aa8565b5b60006151ae87828801614aff565b94505060206151bf87828801614aff565b93505060406151d087828801614aff565b92505060606151e187828801614aff565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061523457607f821691505b602082108103615247576152466151ed565b5b50919050565b7f43616c6c657220213d206f776e65722e00000000000000000000000000000000600082015250565b6000615283601083614974565b915061528e8261524d565b602082019050919050565b600060208201905081810360008301526152b281615276565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061532282614ade565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615354576153536152e8565b5b600182019050919050565b600061536a82614ade565b915061537583614ade565b925082821015615388576153876152e8565b5b828203905092915050565b600061539e82614ade565b91506153a983614ade565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153e2576153e16152e8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061542782614ade565b915061543283614ade565b925082615442576154416153ed565b5b828204905092915050565b7f4d7573742062652061626f766520302e33337e25206f6620746f74616c20737560008201527f70706c792e000000000000000000000000000000000000000000000000000000602082015250565b60006154a9602583614974565b91506154b48261544d565b604082019050919050565b600060208201905081810360008301526154d88161549c565b9050919050565b60006154ea82614ade565b91506154f583614ade565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561552a576155296152e8565b5b828201905092915050565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660008201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b6000615591603d83614974565b915061559c82615535565b604082019050919050565b600060208201905081810360008301526155c081615584565b9050919050565b7f6c696d6974207461786573000000000000000000000000000000000000000000600082015250565b60006155fd600b83614974565b9150615608826155c7565b602082019050919050565b6000602082019050818103600083015261562c816155f0565b9050919050565b7f436f6e747261637420616c726561647920696e697469616c697a65642e000000600082015250565b6000615669601d83614974565b915061567482615633565b602082019050919050565b600060208201905081810360008301526156988161565c565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156156f6578086048111156156d2576156d16152e8565b5b60018516156156e15780820291505b80810290506156ef8561569f565b94506156b6565b94509492505050565b60008261570f57600190506157cb565b8161571d57600090506157cb565b8160018114615733576002811461573d5761576c565b60019150506157cb565b60ff84111561574f5761574e6152e8565b5b8360020a915084821115615766576157656152e8565b5b506157cb565b5060208310610133831016604e8410600b84101617156157a15782820a90508381111561579c5761579b6152e8565b5b6157cb565b6157ae84848460016156ac565b925090508184048111156157c5576157c46152e8565b5b81810290505b9392505050565b60006157dd82614ade565b91506157e883614e17565b92506158157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846156ff565b905092915050565b60008151905061582c81614ab2565b92915050565b60006020828403121561584857615847614aa8565b5b60006158568482850161581d565b91505092915050565b6000604082019050615874600083018561493f565b615881602083018461493f565b9392505050565b6000819050919050565b60006158ad6158a86158a384615888565b614a24565b614ade565b9050919050565b6158bd81615892565b82525050565b600060c0820190506158d8600083018961493f565b6158e56020830188614d5a565b6158f260408301876158b4565b6158ff60608301866158b4565b61590c608083018561493f565b61591960a0830184614d5a565b979650505050505050565b60008151905061593381614ae8565b92915050565b60008060006060848603121561595257615951614aa8565b5b600061596086828701615924565b935050602061597186828701615924565b925050604061598286828701615924565b9150509250925092565b7f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000600082015250565b60006159c2601783614974565b91506159cd8261598c565b602082019050919050565b600060208201905081810360008301526159f1816159b5565b9050919050565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b6000615a2e601383614974565b9150615a39826159f8565b602082019050919050565b60006020820190508181036000830152615a5d81615a21565b9050919050565b7f45524332303a205a65726f20616464726573732e000000000000000000000000600082015250565b6000615a9a601483614974565b9150615aa582615a64565b602082019050919050565b60006020820190508181036000830152615ac981615a8d565b9050919050565b7f4d757374203e302e000000000000000000000000000000000000000000000000600082015250565b6000615b06600883614974565b9150615b1182615ad0565b602082019050919050565b60006020820190508181036000830152615b3581615af9565b9050919050565b7f756e61626c6520746f2074726164650000000000000000000000000000000000600082015250565b6000615b72600f83614974565b9150615b7d82615b3c565b602082019050919050565b60006020820190508181036000830152615ba181615b65565b9050919050565b7f7472616e736665722064656c617920656e61626c656400000000000000000000600082015250565b6000615bde601683614974565b9150615be982615ba8565b602082019050919050565b60006020820190508181036000830152615c0d81615bd1565b9050919050565b7f4578636565647320746865206d61785478416d6f756e742e0000000000000000600082015250565b6000615c4a601883614974565b9150615c5582615c14565b602082019050919050565b60006020820190508181036000830152615c7981615c3d565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000615cb6601a83614974565b9150615cc182615c80565b602082019050919050565b60006020820190508181036000830152615ce581615ca9565b9050919050565b600081905092915050565b50565b6000615d07600083615cec565b9150615d1282615cf7565b600082019050919050565b6000615d2882615cfa565b9150819050919050565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b6000615d8e602583614974565b9150615d9982615d32565b604082019050919050565b60006020820190508181036000830152615dbd81615d81565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615df98161492d565b82525050565b6000615e0b8383615df0565b60208301905092915050565b6000602082019050919050565b6000615e2f82615dc4565b615e398185615dcf565b9350615e4483615de0565b8060005b83811015615e75578151615e5c8882615dff565b9750615e6783615e17565b925050600181019050615e48565b5085935050505092915050565b600060a082019050615e976000830188614d5a565b615ea460208301876158b4565b8181036040830152615eb68186615e24565b9050615ec5606083018561493f565b615ed26080830184614d5a565b9695505050505050565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b6000615f38602383614974565b9150615f4382615edc565b604082019050919050565b60006020820190508181036000830152615f6781615f2b565b905091905056fea2646970667358221220ed07766818426093adce10f18f49c8b49e39d5e6a3964d06156e6b6c73349fb064736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106102555760003560e01c806370a0823111610139578063b104b321116100b6578063ce8b79c91161007a578063ce8b79c9146108dd578063dd62ed3e14610906578063e83e34b114610943578063e9dae5ed14610970578063eb50e70e14610999578063fb78680d146109c25761025c565b8063b104b32114610818578063b2bdfa7b14610834578063b5f7bfa21461085f578063bc1323e81461088b578063c49b9a80146108b45761025c565b80638da5cb5b116100fd5780638da5cb5b1461070b57806395d89b4114610736578063a13ce2c614610761578063a457c2d71461079e578063a9059cbb146107db5761025c565b806370a0823114610638578063715018a614610675578063751039fc1461068c578063893d20e8146106a35780638c7321ad146106ce5761025c565b806339509351116101d25780634fb2e45d116101965780634fb2e45d146105185780634fbee1931461054157806350a8e0161461057e578063571ac8b0146105a9578063590ffdce146105e65780636639dd931461060f5761025c565b8063395093511461042f5780633aaa36e61461046c5780633f3cf56c14610499578063452ed4f1146104c25780634a74bb02146104ed5761025c565b806311a63e171161021957806311a63e171461034857806318160ddd1461037357806323b872dd1461039e57806326003957146103db578063313ce567146104045761025c565b806303fd2a451461026157806306fdde031461028c5780630758d924146102b7578063095ea7b3146102e25780630e85d1e31461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109eb565b604051610283919061494e565b60405180910390f35b34801561029857600080fd5b506102a16109f1565b6040516102ae9190614a02565b60405180910390f35b3480156102c357600080fd5b506102cc610a83565b6040516102d99190614a83565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190614b14565b610aa9565b6040516103169190614b6f565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190614cfe565b610ac7565b005b34801561035457600080fd5b5061035d610cc5565b60405161036a919061494e565b60405180910390f35b34801561037f57600080fd5b50610388610ceb565b6040516103959190614d69565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190614d84565b610cf5565b6040516103d29190614b6f565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190614dd7565b610e42565b005b34801561041057600080fd5b50610419610f52565b6040516104269190614e33565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614b14565b610f69565b6040516104639190614b6f565b60405180910390f35b34801561047857600080fd5b50610481611015565b60405161049093929190614e4e565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190614dd7565b61102d565b005b3480156104ce57600080fd5b506104d761113d565b6040516104e4919061494e565b60405180910390f35b3480156104f957600080fd5b50610502611163565b60405161050f9190614b6f565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190614e85565b611176565b005b34801561054d57600080fd5b5061056860048036038101906105639190614e85565b6115e4565b6040516105759190614b6f565b60405180910390f35b34801561058a57600080fd5b5061059361163a565b6040516105a09190614b6f565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614e85565b61164d565b6040516105dd9190614b6f565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190614eb2565b611680565b005b34801561061b57600080fd5b5061063660048036038101906106319190614dd7565b611770565b005b34801561064457600080fd5b5061065f600480360381019061065a9190614e85565b61186c565b60405161066c9190614d69565b60405180910390f35b34801561068157600080fd5b5061068a6118b5565b005b34801561069857600080fd5b506106a1611a33565b005b3480156106af57600080fd5b506106b8611adc565b6040516106c5919061494e565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f09190614e85565b611aeb565b6040516107029190614b6f565b60405180910390f35b34801561071757600080fd5b50610720611b0b565b60405161072d919061494e565b60405180910390f35b34801561074257600080fd5b5061074b611b34565b6040516107589190614a02565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190614e85565b611bc6565b6040516107959190614d69565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190614b14565b611c0f565b6040516107d29190614b6f565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190614b14565b611cbb565b60405161080f9190614b6f565b60405180910390f35b610832600480360381019061082d9190614fa7565b611cda565b005b34801561084057600080fd5b506108496127f7565b604051610856919061494e565b60405180910390f35b34801561086b57600080fd5b5061087461281b565b604051610882929190615032565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190614e85565b61282d565b005b3480156108c057600080fd5b506108db60048036038101906108d6919061505b565b61291d565b005b3480156108e957600080fd5b5061090460048036038101906108ff9190614e85565b612a06565b005b34801561091257600080fd5b5061092d60048036038101906109289190615088565b612af6565b60405161093a9190614d69565b60405180910390f35b34801561094f57600080fd5b50610958612b7d565b60405161096793929190614e4e565b60405180910390f35b34801561097c57600080fd5b50610997600480360381019061099291906150c8565b612b95565b005b3480156109a557600080fd5b506109c060048036038101906109bb9190615159565b612cb7565b005b3480156109ce57600080fd5b506109e960048036038101906109e49190615186565b612d90565b005b61dead81565b606060108054610a009061521c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2c9061521c565b8015610a795780601f10610a4e57610100808354040283529160200191610a79565b820191906000526020600020905b815481529060010190602001808311610a5c57829003601f168201915b5050505050905090565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610abd610ab6612e69565b8484612e71565b6001905092915050565b610acf612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390615299565b60405180910390fd5b60005b8251811015610cc05760026000848381518110610b7f57610b7e6152b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610c365750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16838281518110610c1557610c146152b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cad578160086000858481518110610c5357610c526152b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610cb890615317565b915050610b5f565b505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b54905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e2e5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e26919061535f565b925050819055505b610e3984848461303a565b90509392505050565b610e4a612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90615299565b60405180910390fd5b60008183601b54610ee89190615393565b610ef2919061541c565b905061012c601b54610f04919061541c565b811015610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d906154bf565b60405180910390fd5b80602681905550505050565b6000601a60009054906101000a900460ff16905090565b600061100b610f76612e69565b848460046000610f84612e69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461100691906154df565b612e71565b6001905092915050565b60128060000154908060010154908060020154905083565b611035612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990615299565b60405180910390fd5b60008183601b546110d39190615393565b6110dd919061541c565b905061012c601b546110ef919061541c565b811015611131576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611128906154bf565b60405180910390fd5b80602281905550505050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60159054906101000a900460ff1681565b61117e612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290615299565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361127a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611271906155a7565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906155a7565b60405180910390fd5b61131560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611680565b611320816001611680565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113d75780601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61140060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661186c565b600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006114cc60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661186c565b11156115275761152560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261152060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661186c565b61303a565b505b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602960009054906101000a900460ff1681565b6000611679827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610aa9565b9050919050565b611688612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c90615299565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611778612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90615299565b60405180910390fd5b61044c818361181491906154df565b14611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90615613565b60405180910390fd5b81601860000181905550806018600101819055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118bd612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190615299565b60405180910390fd5b61197560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611680565b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b611a3b612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90615299565b60405180910390fd5b601b54602281905550601b54602681905550565b6000611ae6611b0b565b905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054611b439061521c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6f9061521c565b8015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b820191906000526020600020905b815481529060010190602001808311611b9f57829003601f168201915b5050505050905090565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611cb1611c1c612e69565b848460046000611c2a612e69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cac919061535f565b612e71565b6001905092915050565b6000611ccf611cc8612e69565b848461303a565b506001905092915050565b611ce2612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690615299565b60405180910390fd5b600d60009054906101000a900460ff1615611dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db69061567f565b60405180910390fd5b6000602a5414611dce57600080fd5b8260109080519060200190611de492919061486a565b508160119080519060200190611dfb92919061486a565b5080600f819055506012601a60006101000a81548160ff021916908360ff160217905550601a60009054906101000a900460ff16600a611e3b91906157d2565b600f54611e489190615393565b601b81905550737a250d5630b4cf539739df2c5dacb4c659f2488d601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f349190615832565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe09190615832565b306040518363ffffffff1660e01b8152600401611ffe92919061585f565b6020604051808303816000875af115801561201d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120419190615832565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160026000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555073ada523f3538489420d551588d4d192605683de8e601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506032602081905550612710602181905550602154602054601b546122379190615393565b612241919061541c565b6022819055506064602481905550612710602581905550602554602454601b5461226b9190615393565b612275919061541c565b6026819055506127106005601b5461228d9190615393565b612297919061541c565b6027819055506103e86005601b546122af9190615393565b6122b9919061541c565b6028819055506001600660006122cd611b0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000612458611b0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506124e7737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610aa9565b506125196124f3611b0b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610aa9565b506001600d60006101000a81548160ff021916908315150217905550601b5460016000612544611b0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125aa61258d611b0b565b737a250d5630b4cf539739df2c5dacb4c659f2488d601b54612e71565b6125b2611b0b565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040516126119190614d69565b60405180910390a361268660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612e71565b6126d330601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612e71565b61272660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061272160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661186c565b61303a565b50601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306127703061186c565b60008061277b611b0b565b426040518863ffffffff1660e01b815260040161279d969594939291906158c3565b60606040518083038185885af11580156127bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127e09190615939565b5050506001602a8190555043602381905550505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60188060000154908060010154905082565b612835612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990615299565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612925612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990615299565b60405180910390fd5b80601f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516129fb9190614b6f565b60405180910390a150565b612a0e612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9290615299565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60158060000154908060010154908060020154905083565b612b9d612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190615299565b60405180910390fd5b6015600001548311158015612c4457506015600101548211155b8015612c5557506015600201548111155b612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b906159d8565b60405180910390fd5b826012600001819055508160126001018190555080601260020181905550505050565b612cbf612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4390615299565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612d98612e69565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90615299565b60405180910390fd5b8284601b54612e349190615393565b612e3e919061541c565b6027819055508082601b54612e539190615393565b612e5d919061541c565b60288190555050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790615a44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4690615a44565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161302d9190614d69565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036130aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a190615ab0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311090615ab0565b60405180910390fd5b6000821161315c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315390615b1c565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132005750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61323f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323690615b88565b60405180910390fd5b60324361324c919061535f565b60235411156132ab576000803290506132668686836138d6565b9150816132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90615bf4565b60405180910390fd5b50505b6132b58484613c9e565b156136d157600b60009054906101000a900460ff161561344657600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133b55743600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361336c57600080fd5b43600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613445565b43600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361340057600080fd5b43600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134e75750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6136d057600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061358c5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135d7576022548211156135d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cd90615c60565b60405180910390fd5b5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156136715750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136cf57602654826136838561186c565b61368d91906154df565b11156136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c590615ccc565b60405180910390fd5b5b5b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361375d5742600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600060019050600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138045750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561380e57600090505b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138c057601f60149054906101000a900460ff161580156138895750601f60159054906101000a900460ff165b156138bf5760006138993061186c565b905060275481106138bd5760285481106138b35760285490505b6138bc81613e75565b5b505b5b6138cc8585858461405f565b9150509392505050565b600080600190508473ffffffffffffffffffffffffffffffffffffffff16601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036139bf5743600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c93565b8373ffffffffffffffffffffffffffffffffffffffff16601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613c925743600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613ab7576001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600090505b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b125760009050613c91565b8373ffffffffffffffffffffffffffffffffffffffff16601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015613bbe57508473ffffffffffffffffffffffffffffffffffffffff16601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613c905743600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b809150509392505050565b6000613ca8611b0b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613d165750613ce6611b0b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613d6c5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613dc25750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613dfc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613e355750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613e6d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001601f60146101000a81548160ff0219169083151502179055506000601860010154601860000154613ea891906154df565b03156140415760006002601860010154601860000154613ec891906154df565b60186000015484613ed99190615393565b613ee3919061541c565b613eed919061541c565b905060008183613efd919061535f565b9050613f088161421c565b600047905060006002601860010154601860000154613f2791906154df565b60186000015484613f389190615393565b613f42919061541c565b613f4c919061541c565b90506000841115613f9d57613f618482614432565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848286604051613f9493929190614e4e565b60405180910390a15b600047111561403c57600060019050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ff290615d1d565b60006040518083038185875af1925050503d806000811461402f576040519150601f19603f3d011682016040523d82523d6000602084013e614034565b606091505b505080915050505b505050505b6000601f60146101000a81548160ff02191690831515021790555050565b6000602960009054906101000a900460ff166140e35761407f85856144ea565b602960009054906101000a900460ff161580156140a257506140a18585613c9e565b5b156140e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140d990615da4565b60405180910390fd5b5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614132919061535f565b925050819055506000826141465783614152565b61415186868661467c565b5b905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141a391906154df565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142079190614d69565b60405180910390a36001915050949350505050565b6000600267ffffffffffffffff81111561423957614238614b8f565b5b6040519080825280602002602001820160405280156142675781602001602082028036833780820191505090505b509050308160008151811061427f5761427e6152b9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061434a9190615832565b8160018151811061435e5761435d6152b9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143fc959493929190615e82565b600060405180830381600087803b15801561441657600080fd5b505af115801561442a573d6000803e3d6000fd5b505050505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061447e611b0b565b426040518863ffffffff1660e01b81526004016144a0969594939291906158c3565b60606040518083038185885af11580156144be573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144e39190615939565b5050505050565b602960009054906101000a900460ff161561453a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161453190615f4e565b60405180910390fd5b6145448282613c9e565b15801561459e5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156146785743602b819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602960006101000a81548160ff02191690831515021790555042602c819055506001601f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159600160405161466f9190614b6f565b60405180910390a15b5050565b600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036146e157601260010154905061474d565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361474357601260000154905061474c565b60126002015490505b5b6147578585613c9e565b1561477b576000602a54148061477057506001602a5414155b1561477a57600080fd5b5b6000612710828561478c9190615393565b614796919061541c565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546147e791906154df565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161484b9190614d69565b60405180910390a3808461485f919061535f565b925050509392505050565b8280546148769061521c565b90600052602060002090601f01602090048101928261489857600085556148df565b82601f106148b157805160ff19168380011785556148df565b828001600101855582156148df579182015b828111156148de5782518255916020019190600101906148c3565b5b5090506148ec91906148f0565b5090565b5b808211156149095760008160009055506001016148f1565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149388261490d565b9050919050565b6149488161492d565b82525050565b6000602082019050614963600083018461493f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149a3578082015181840152602081019050614988565b838111156149b2576000848401525b50505050565b6000601f19601f8301169050919050565b60006149d482614969565b6149de8185614974565b93506149ee818560208601614985565b6149f7816149b8565b840191505092915050565b60006020820190508181036000830152614a1c81846149c9565b905092915050565b6000819050919050565b6000614a49614a44614a3f8461490d565b614a24565b61490d565b9050919050565b6000614a5b82614a2e565b9050919050565b6000614a6d82614a50565b9050919050565b614a7d81614a62565b82525050565b6000602082019050614a986000830184614a74565b92915050565b6000604051905090565b600080fd5b600080fd5b614abb8161492d565b8114614ac657600080fd5b50565b600081359050614ad881614ab2565b92915050565b6000819050919050565b614af181614ade565b8114614afc57600080fd5b50565b600081359050614b0e81614ae8565b92915050565b60008060408385031215614b2b57614b2a614aa8565b5b6000614b3985828601614ac9565b9250506020614b4a85828601614aff565b9150509250929050565b60008115159050919050565b614b6981614b54565b82525050565b6000602082019050614b846000830184614b60565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614bc7826149b8565b810181811067ffffffffffffffff82111715614be657614be5614b8f565b5b80604052505050565b6000614bf9614a9e565b9050614c058282614bbe565b919050565b600067ffffffffffffffff821115614c2557614c24614b8f565b5b602082029050602081019050919050565b600080fd5b6000614c4e614c4984614c0a565b614bef565b90508083825260208201905060208402830185811115614c7157614c70614c36565b5b835b81811015614c9a5780614c868882614ac9565b845260208401935050602081019050614c73565b5050509392505050565b600082601f830112614cb957614cb8614b8a565b5b8135614cc9848260208601614c3b565b91505092915050565b614cdb81614b54565b8114614ce657600080fd5b50565b600081359050614cf881614cd2565b92915050565b60008060408385031215614d1557614d14614aa8565b5b600083013567ffffffffffffffff811115614d3357614d32614aad565b5b614d3f85828601614ca4565b9250506020614d5085828601614ce9565b9150509250929050565b614d6381614ade565b82525050565b6000602082019050614d7e6000830184614d5a565b92915050565b600080600060608486031215614d9d57614d9c614aa8565b5b6000614dab86828701614ac9565b9350506020614dbc86828701614ac9565b9250506040614dcd86828701614aff565b9150509250925092565b60008060408385031215614dee57614ded614aa8565b5b6000614dfc85828601614aff565b9250506020614e0d85828601614aff565b9150509250929050565b600060ff82169050919050565b614e2d81614e17565b82525050565b6000602082019050614e486000830184614e24565b92915050565b6000606082019050614e636000830186614d5a565b614e706020830185614d5a565b614e7d6040830184614d5a565b949350505050565b600060208284031215614e9b57614e9a614aa8565b5b6000614ea984828501614ac9565b91505092915050565b60008060408385031215614ec957614ec8614aa8565b5b6000614ed785828601614ac9565b9250506020614ee885828601614ce9565b9150509250929050565b600080fd5b600067ffffffffffffffff821115614f1257614f11614b8f565b5b614f1b826149b8565b9050602081019050919050565b82818337600083830152505050565b6000614f4a614f4584614ef7565b614bef565b905082815260208101848484011115614f6657614f65614ef2565b5b614f71848285614f28565b509392505050565b600082601f830112614f8e57614f8d614b8a565b5b8135614f9e848260208601614f37565b91505092915050565b600080600060608486031215614fc057614fbf614aa8565b5b600084013567ffffffffffffffff811115614fde57614fdd614aad565b5b614fea86828701614f79565b935050602084013567ffffffffffffffff81111561500b5761500a614aad565b5b61501786828701614f79565b925050604061502886828701614aff565b9150509250925092565b60006040820190506150476000830185614d5a565b6150546020830184614d5a565b9392505050565b60006020828403121561507157615070614aa8565b5b600061507f84828501614ce9565b91505092915050565b6000806040838503121561509f5761509e614aa8565b5b60006150ad85828601614ac9565b92505060206150be85828601614ac9565b9150509250929050565b6000806000606084860312156150e1576150e0614aa8565b5b60006150ef86828701614aff565b935050602061510086828701614aff565b925050604061511186828701614aff565b9150509250925092565b60006151268261490d565b9050919050565b6151368161511b565b811461514157600080fd5b50565b6000813590506151538161512d565b92915050565b60006020828403121561516f5761516e614aa8565b5b600061517d84828501615144565b91505092915050565b600080600080608085870312156151a05761519f614aa8565b5b60006151ae87828801614aff565b94505060206151bf87828801614aff565b93505060406151d087828801614aff565b92505060606151e187828801614aff565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061523457607f821691505b602082108103615247576152466151ed565b5b50919050565b7f43616c6c657220213d206f776e65722e00000000000000000000000000000000600082015250565b6000615283601083614974565b915061528e8261524d565b602082019050919050565b600060208201905081810360008301526152b281615276565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061532282614ade565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615354576153536152e8565b5b600182019050919050565b600061536a82614ade565b915061537583614ade565b925082821015615388576153876152e8565b5b828203905092915050565b600061539e82614ade565b91506153a983614ade565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153e2576153e16152e8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061542782614ade565b915061543283614ade565b925082615442576154416153ed565b5b828204905092915050565b7f4d7573742062652061626f766520302e33337e25206f6620746f74616c20737560008201527f70706c792e000000000000000000000000000000000000000000000000000000602082015250565b60006154a9602583614974565b91506154b48261544d565b604082019050919050565b600060208201905081810360008301526154d88161549c565b9050919050565b60006154ea82614ade565b91506154f583614ade565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561552a576155296152e8565b5b828201905092915050565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660008201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b6000615591603d83614974565b915061559c82615535565b604082019050919050565b600060208201905081810360008301526155c081615584565b9050919050565b7f6c696d6974207461786573000000000000000000000000000000000000000000600082015250565b60006155fd600b83614974565b9150615608826155c7565b602082019050919050565b6000602082019050818103600083015261562c816155f0565b9050919050565b7f436f6e747261637420616c726561647920696e697469616c697a65642e000000600082015250565b6000615669601d83614974565b915061567482615633565b602082019050919050565b600060208201905081810360008301526156988161565c565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156156f6578086048111156156d2576156d16152e8565b5b60018516156156e15780820291505b80810290506156ef8561569f565b94506156b6565b94509492505050565b60008261570f57600190506157cb565b8161571d57600090506157cb565b8160018114615733576002811461573d5761576c565b60019150506157cb565b60ff84111561574f5761574e6152e8565b5b8360020a915084821115615766576157656152e8565b5b506157cb565b5060208310610133831016604e8410600b84101617156157a15782820a90508381111561579c5761579b6152e8565b5b6157cb565b6157ae84848460016156ac565b925090508184048111156157c5576157c46152e8565b5b81810290505b9392505050565b60006157dd82614ade565b91506157e883614e17565b92506158157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846156ff565b905092915050565b60008151905061582c81614ab2565b92915050565b60006020828403121561584857615847614aa8565b5b60006158568482850161581d565b91505092915050565b6000604082019050615874600083018561493f565b615881602083018461493f565b9392505050565b6000819050919050565b60006158ad6158a86158a384615888565b614a24565b614ade565b9050919050565b6158bd81615892565b82525050565b600060c0820190506158d8600083018961493f565b6158e56020830188614d5a565b6158f260408301876158b4565b6158ff60608301866158b4565b61590c608083018561493f565b61591960a0830184614d5a565b979650505050505050565b60008151905061593381614ae8565b92915050565b60008060006060848603121561595257615951614aa8565b5b600061596086828701615924565b935050602061597186828701615924565b925050604061598286828701615924565b9150509250925092565b7f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000600082015250565b60006159c2601783614974565b91506159cd8261598c565b602082019050919050565b600060208201905081810360008301526159f1816159b5565b9050919050565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b6000615a2e601383614974565b9150615a39826159f8565b602082019050919050565b60006020820190508181036000830152615a5d81615a21565b9050919050565b7f45524332303a205a65726f20616464726573732e000000000000000000000000600082015250565b6000615a9a601483614974565b9150615aa582615a64565b602082019050919050565b60006020820190508181036000830152615ac981615a8d565b9050919050565b7f4d757374203e302e000000000000000000000000000000000000000000000000600082015250565b6000615b06600883614974565b9150615b1182615ad0565b602082019050919050565b60006020820190508181036000830152615b3581615af9565b9050919050565b7f756e61626c6520746f2074726164650000000000000000000000000000000000600082015250565b6000615b72600f83614974565b9150615b7d82615b3c565b602082019050919050565b60006020820190508181036000830152615ba181615b65565b9050919050565b7f7472616e736665722064656c617920656e61626c656400000000000000000000600082015250565b6000615bde601683614974565b9150615be982615ba8565b602082019050919050565b60006020820190508181036000830152615c0d81615bd1565b9050919050565b7f4578636565647320746865206d61785478416d6f756e742e0000000000000000600082015250565b6000615c4a601883614974565b9150615c5582615c14565b602082019050919050565b60006020820190508181036000830152615c7981615c3d565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000615cb6601a83614974565b9150615cc182615c80565b602082019050919050565b60006020820190508181036000830152615ce581615ca9565b9050919050565b600081905092915050565b50565b6000615d07600083615cec565b9150615d1282615cf7565b600082019050919050565b6000615d2882615cfa565b9150819050919050565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b6000615d8e602583614974565b9150615d9982615d32565b604082019050919050565b60006020820190508181036000830152615dbd81615d81565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615df98161492d565b82525050565b6000615e0b8383615df0565b60208301905092915050565b6000602082019050919050565b6000615e2f82615dc4565b615e398185615dcf565b9350615e4483615de0565b8060005b83811015615e75578151615e5c8882615dff565b9750615e6783615e17565b925050600181019050615e48565b5085935050505092915050565b600060a082019050615e976000830188614d5a565b615ea460208301876158b4565b8181036040830152615eb68186615e24565b9050615ec5606083018561493f565b615ed26080830184614d5a565b9695505050505050565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b6000615f38602383614974565b9150615f4382615edc565b604082019050919050565b60006020820190508181036000830152615f6781615f2b565b905091905056fea2646970667358221220ed07766818426093adce10f18f49c8b49e39d5e6a3964d06156e6b6c73349fb064736f6c634300080e0033

Deployed Bytecode Sourcemap

3636:19824:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5738:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9467:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5567:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10080:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16418:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5884:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9202:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10813:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15536:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9291:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11127:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4776:74;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15276:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5609:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5950:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7891:749;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11583:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6340:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10566:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14010:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14500:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9780:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8648:195;;;;;;;;;;;;;:::i;:::-;;15149:119;;;;;;;;;;;;;:::i;:::-;;9553:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4106:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7804:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9377:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10694:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11350:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9905:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11722:2280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3745:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5239:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;14320:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16234:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14154:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9639:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5001:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14742:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16098:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15801:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5738:73;5769:42;5738:73;:::o;9467:80::-;9515:13;9539:5;9532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9467:80;:::o;5567:35::-;;;;;;;;;;;;;:::o;10080:161::-;10155:4;10172:39;10181:12;:10;:12::i;:::-;10195:7;10204:6;10172:8;:39::i;:::-;10229:4;10222:11;;10080:161;;;;:::o;16418:328::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;16518:6:::1;16513:226;16534:12;:19;16530:1;:23;16513:226;;;16580:7;:24;16588:12;16601:1;16588:15;;;;;;;;:::i;:::-;;;;;;;;16580:24;;;;;;;;;;;;;;;;;;;;;;;;;16579:25;:71;;;;;5683:42;16608;;:12;16621:1;16608:15;;;;;;;;:::i;:::-;;;;;;;;:42;;;;16579:71;16575:153;;;16705:7;16671:14;:31;16686:12;16699:1;16686:15;;;;;;;;:::i;:::-;;;;;;;;16671:31;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;16575:153;16555:3;;;;;:::i;:::-;;;;16513:226;;;;16418:328:::0;;:::o;5884:25::-;;;;;;;;;;;;;:::o;9202:83::-;9257:7;9275;;9268:14;;9202:83;:::o;10813:306::-;10913:4;10969:17;10934:11;:19;10946:6;10934:19;;;;;;;;;;;;;;;:31;10954:10;10934:31;;;;;;;;;;;;;;;;:52;10930:126;;11038:6;11003:11;:19;11015:6;11003:19;;;;;;;;;;;;;;;:31;11023:10;11003:31;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;10930:126;11075:36;11085:6;11093:9;11104:6;11075:9;:36::i;:::-;11068:43;;10813:306;;;;;:::o;15536:257::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;15620:13:::1;15658:7;15647;15637;;:17;;;;:::i;:::-;15636:29;;;;:::i;:::-;15620:45;;15704:3;15694:7;;:13;;;;:::i;:::-;15684:5;:24;;15676:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15778:5;15761:14;:22;;;;15609:184;15536:257:::0;;:::o;9291:80::-;9343:5;9359:9;;;;;;;;;;;9352:16;;9291:80;:::o;11127:215::-;11215:4;11232:80;11241:12;:10;:12::i;:::-;11255:7;11301:10;11264:11;:25;11276:12;:10;:12::i;:::-;11264:25;;;;;;;;;;;;;;;:34;11290:7;11264:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;11232:8;:80::i;:::-;11330:4;11323:11;;11127:215;;;;:::o;4776:74::-;;;;;;;;;;;;;;;;;;;:::o;15276:252::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;15359:13:::1;15397:7;15386;15376;;:17;;;;:::i;:::-;15375:29;;;;:::i;:::-;15359:45;;15443:3;15433:7;;:13;;;;:::i;:::-;15423:5;:24;;15415:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15515:5;15500:12;:20;;;;15348:180;15276:252:::0;;:::o;5609:21::-;;;;;;;;;;;;;:::o;5950:41::-;;;;;;;;;;;;;:::o;7891:749::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;7992:1:::1;7972:22;;:8;:22;;::::0;7964:96:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5769:42;8079:16;;:8;:16;;::::0;8071:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8172:34;8192:6;::::0;::::1;;;;;;;;8200:5;8172:19;:34::i;:::-;8217:35;8237:8;8247:4;8217:19;:35::i;:::-;8299:6;::::0;::::1;;;;;;;;8277:29;;:10;;;;;;;;;;;:29;;::::0;8273:78:::1;;8342:8;8321:10;;:30;;;;;;;;;;;;;;;;;;8273:78;8404:17;8414:6;::::0;::::1;;;;;;;;8404:9;:17::i;:::-;8372:11;:19;8384:6:::0;::::1;;;;;;;;;;8372:19;;;;;;;;;;;;;;;:29;8392:8;8372:29;;;;;;;;;;;;;;;:49;;;;8455:1;8435:17;8445:6;::::0;::::1;;;;;;;;8435:9;:17::i;:::-;:21;8432:99;;;8473:46;8483:6;::::0;::::1;;;;;;;;8491:8;8501:17;8511:6;::::0;::::1;;;;;;;;8501:9;:17::i;:::-;8473:9;:46::i;:::-;;8432:99;8560:8;8551:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8613:8;8584:38;;8605:6;::::0;::::1;;;;;;;;8584:38;;;;;;;;;;;;7891:749:::0;:::o;11583:125::-;11648:4;11672:19;:28;11692:7;11672:28;;;;;;;;;;;;;;;;;;;;;;;;;11665:35;;11583:125;;;:::o;6340:36::-;;;;;;;;;;;;;:::o;10566:120::-;10619:4;10643:35;10651:7;10660:17;10643:7;:35::i;:::-;10636:42;;10566:120;;;:::o;14010:134::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;14129:7:::1;14098:19;:28;14118:7;14098:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;14010:134:::0;;:::o;14500:232::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;14620:4:::1;14605:10;14594;:21;;;;:::i;:::-;14593:31;14583:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;14670:10;14651:6;:16;;:29;;;;14710:10;14691:6;:16;;:29;;;;14500:232:::0;;:::o;9780:117::-;9846:7;9873;:16;9881:7;9873:16;;;;;;;;;;;;;;;;9866:23;;9780:117;;;:::o;8648:195::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;8715:34:::1;8735:6;::::0;::::1;;;;;;;;8743:5;8715:19;:34::i;:::-;8777:1;8760:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;8832:1;8795:40;;8816:6;::::0;::::1;;;;;;;;8795:40;;;;;;;;;;;;8648:195::o:0;15149:119::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;15218:7:::1;;15203:12;:22;;;;15253:7;;15236:14;:24;;;;15149:119::o:0;9553:80::-;9605:7;9623;:5;:7::i;:::-;9616:14;;9553:80;:::o;4106:68::-;;;;;;;;;;;;;;;;;;;;;;:::o;7804:79::-;7842:7;7869:6;;;;;;;;;;;7862:13;;7804:79;:::o;9377:84::-;9427:13;9451:7;9444:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9377:84;:::o;10694:111::-;10753:7;10780:8;:17;10789:7;10780:17;;;;;;;;;;;;;;;;10773:24;;10694:111;;;:::o;11350:225::-;11443:4;11460:85;11469:12;:10;:12::i;:::-;11483:7;11529:15;11492:11;:25;11504:12;:10;:12::i;:::-;11492:25;;;;;;;;;;;;;;;:34;11518:7;11492:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;11460:8;:85::i;:::-;11563:4;11556:11;;11350:225;;;;:::o;9905:167::-;9983:4;10000:42;10010:12;:10;:12::i;:::-;10024:9;10035:6;10000:9;:42::i;:::-;;10060:4;10053:11;;9905:167;;;;:::o;11722:2280::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;11855:13:::1;;;;;;;;;;;11854:14;11846:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11938:1;11921:13;;:18;11913:27;;;::::0;::::1;;11969:8;11961:5;:16;;;;;;;;;;;;:::i;:::-;;11998:10;11988:7;:20;;;;;;;;;;;;:::i;:::-;;12038:10;12021:14;:27;;;;12071:2;12059:9;;:14;;;;;;;;;;;;;;;;;;12115:9;;;;;;;;;;;12111:2;:13;;;;:::i;:::-;12094:14;;:30;;;;:::i;:::-;12084:7;:40;;;;5683:42;12137:9;;:46;;;;;;;;;;;;;;;;;;12221:9;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12203:49;;;12253:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12279:4;12203:82;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12194:6;;:91;;;;;;;;;;;;;;;;;;12314:4;12296:7;:15;12304:6;;;;;;;;;;;12296:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;12378:17;12329:11;:26;12349:4;12329:26;;;;;;;;;;;;;;;:46;12364:9;;;;;;;;;;;12329:46;;;;;;;;;;;;;;;:66;;;;12429:42;12408:10;;:64;;;;;;;;;;;;;;;;;;12500:2;12485:12;:17;;;;12564:5;12549:12;:20;;;;12622:12;;12606;;12596:7;;:22;;;;:::i;:::-;12595:39;;;;:::i;:::-;12580:12;:54;;;;12674:3;12655:16;:22;;;;12728:5;12709:16;:24;;;;12792:16;;12772;;12762:7;;:26;;;;:::i;:::-;12761:47;;;;:::i;:::-;12744:14;:64;;;;12861:6;12856:1;12846:7;;:11;;;;:::i;:::-;12845:22;;;;:::i;:::-;12829:13;:38;;;;12907:5;12902:1;12892:7;;:11;;;;:::i;:::-;12891:21;;;;:::i;:::-;12878:10;:34;;;;12956:4;12925:19;:28;12945:7;:5;:7::i;:::-;12925:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;13005:4;12971:19;:31;12991:10;;;;;;;;;;;12971:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;13057:4;13020:19;:34;13048:4;13020:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;13100:4;13072:19;:25;5769:42;13072:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;13144:4;13115:17;:26;13133:7;:5;:7::i;:::-;13115:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;13163:42;5683;13187:17;13163:7;:42::i;:::-;;13216:35;13224:7;:5;:7::i;:::-;13233:17;13216:7;:35::i;:::-;;13282:4;13266:13;;:20;;;;;;;;;;;;;;;;;;13316:7;;13297;:16;13305:7;:5;:7::i;:::-;13297:16;;;;;;;;;;;;;;;:26;;;;13334:42;13343:7;:5;:7::i;:::-;5683:42;13368:7;;13334:8;:42::i;:::-;13413:7;:5;:7::i;:::-;13392:38;;13409:1;13392:38;;;13422:7;;13392:38;;;;;;:::i;:::-;;;;;;;;13444:55;13453:6;::::0;::::1;;;;;;;;13469:9;;;;;;;;;;;13481:17;13444:8;:55::i;:::-;13510:62;13527:4;13542:9;;;;;;;;;;;13554:17;13510:8;:62::i;:::-;13591:51;13601:6;::::0;::::1;;;;;;;;13617:4;13624:17;13634:6;::::0;::::1;;;;;;;;13624:9;:17::i;:::-;13591:9;:51::i;:::-;;13655:9;;;;;;;;;;;:25;;;13688:21;13733:4;13753:24;13771:4;13753:9;:24::i;:::-;13792:1;13835::::0;13878:7:::1;:5;:7::i;:::-;13900:15;13655:271;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13953:1;13937:13;:17;;;;13982:12;13965:14;:29;;;;11722:2280:::0;;;:::o;3745:21::-;;;;;;;;;;;;:::o;5239:83::-;;;;;;;;;;;;;;:::o;14320:166::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;14473:5:::1;14418:35;:52;14454:15;14418:52;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;14320:166:::0;:::o;16234:171::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;16335:8:::1;16311:21;;:32;;;;;;;;;;;;;;;;;;16359:38;16388:8;16359:38;;;;;;:::i;:::-;;;;;;;;16234:171:::0;:::o;14154:158::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;14300:4:::1;14245:35;:52;14281:15;14245:52;;;;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;14154:158:::0;:::o;9639:133::-;9723:7;9741:11;:19;9753:6;9741:19;;;;;;;;;;;;;;;:28;9761:7;9741:28;;;;;;;;;;;;;;;;9734:35;;9639:133;;;;:::o;5001:89::-;;;;;;;;;;;;;;;;;;;:::o;14742:399::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;14857:7:::1;:14;;;14846:7;:25;;:73;;;;;14904:7;:15;;;14892:8;:27;;14846:73;:129;;;;;14956:7;:19;;;14940:12;:35;;14846:129;14838:182;;;;;;;;;;;;:::i;:::-;;;;;;;;;15046:7;15032:4;:11;;:21;;;;15080:8;15065:4;:12;;:23;;;;15119:12;15100:4;:16;;:31;;;;14742:399:::0;;;:::o;16098:128::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;16202:15:::1;16181:10;;:37;;;;;;;;;;;;;;;;;;16098:128:::0;:::o;15801:289::-;7096:12;:10;:12::i;:::-;7086:22;;:6;;;;;;;;;;:22;;;7078:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;16001:16:::1;15981;15971:7;;:26;;;;:::i;:::-;15970:47;;;;:::i;:::-;15954:13;:63;;;;16069:13;16052;16042:7;;:23;;;;:::i;:::-;16041:41;;;;:::i;:::-;16028:10;:54;;;;15801:289:::0;;;;:::o;100:107::-;145:15;188:10;173:26;;100:107;:::o;10249:309::-;10361:1;10343:20;;:6;:20;;;10335:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;10425:1;10406:21;;:7;:21;;;10398:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;10495:6;10464:11;:19;10476:6;10464:19;;;;;;;;;;;;;;;:28;10484:7;10464:28;;;;;;;;;;;;;;;:37;;;;10534:7;10517:33;;10526:6;10517:33;;;10543:6;10517:33;;;;;;:::i;:::-;;;;;;;;10249:309;;;:::o;17744:2243::-;17823:4;17864:1;17848:18;;:4;:18;;;17840:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;17924:1;17910:16;;:2;:16;;;17902:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17979:1;17970:6;:10;17962:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;18013:14;:18;18028:2;18013:18;;;;;;;;;;;;;;;;;;;;;;;;;18012:19;:44;;;;;18036:14;:20;18051:4;18036:20;;;;;;;;;;;;;;;;;;;;;;;;;18035:21;18012:44;18004:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18122:2;18107:12;:17;;;;:::i;:::-;18090:14;;:34;18086:230;;;18141:13;18169:12;18184:9;18169:24;;18219:27;18233:4;18238:2;18241:4;18219:13;:27::i;:::-;18208:38;;18269:8;18261:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;18126:190;;18086:230;18329:20;18340:4;18346:2;18329:10;:20::i;:::-;18326:891;;;18370:15;;;;;;;;;;;18366:373;;;18410:7;:13;18418:4;18410:13;;;;;;;;;;;;;;;;;;;;;;;;;18406:318;;;18472:12;18455:9;:13;18465:2;18455:13;;;;;;;;;;;;;;;;:29;18447:38;;;;;;18524:12;18508:9;:13;18518:2;18508:13;;;;;;;;;;;;;;;:28;;;;18406:318;;;18634:12;18615:9;:15;18625:4;18615:15;;;;;;;;;;;;;;;;:31;18607:40;;;;;;18688:12;18670:9;:15;18680:4;18670:15;;;;;;;;;;;;;;;:30;;;;18406:318;18366:373;18758:35;:41;18794:4;18758:41;;;;;;;;;;;;;;;;;;;;;;;;;:84;;;;18803:35;:39;18839:2;18803:39;;;;;;;;;;;;;;;;;;;;;;;;;18758:84;18753:439;;18867:7;:13;18875:4;18867:13;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;18884:7;:11;18892:2;18884:11;;;;;;;;;;;;;;;;;;;;;;;;;18867:28;18864:130;;;18933:12;;18923:6;:22;;18915:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;18864:130;5683:42;19015:20;;:2;:20;;;;:36;;;;;19040:7;:11;19048:2;19040:11;;;;;;;;;;;;;;;;;;;;;;;;;19039:12;19015:36;19012:163;;;19110:14;;19100:6;19084:13;19094:2;19084:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;19076:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;19012:163;18753:439;18326:891;19248:1;19233:7;:11;19241:2;19233:11;;;;;;;;;;;;;;;;:16;19229:79;;19281:15;19266:8;:12;19275:2;19266:12;;;;;;;;;;;;;;;:30;;;;19229:79;19320:12;19335:4;19320:19;;19353;:25;19373:4;19353:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;19382:19;:23;19402:2;19382:23;;;;;;;;;;;;;;;;;;;;;;;;;19353:52;19350:98;;;19431:5;19421:15;;19350:98;19464:7;:11;19472:2;19464:11;;;;;;;;;;;;;;;;;;;;;;;;;19460:457;;;19497:16;;;;;;;;;;;19496:17;:59;;;;;19534:21;;;;;;;;;;;19496:59;19492:408;;;19590:28;19621:24;19639:4;19621:9;:24::i;:::-;19590:55;;19692:13;;19668:20;:37;19664:221;;19757:10;;19733:20;:34;19730:77;;19794:10;;19771:33;;19730:77;19829:36;19844:20;19829:14;:36::i;:::-;19664:221;19571:329;19492:408;19460:457;19935:44;19953:4;19959:2;19963:6;19971:7;19935:17;:44::i;:::-;19928:51;;;17744:2243;;;;;:::o;17085:645::-;17166:4;17182:13;17198:4;17182:20;;17225:4;17215:14;;:6;;;;;;;;;;;:14;;;17211:481;;17255:12;17234:14;:18;17249:2;17234:18;;;;;;;;;;;;;;;:33;;;;17293:12;17270:14;:20;17285:4;17270:20;;;;;;;;;;;;;;;:35;;;;17211:481;;;17334:2;17324:12;;:6;;;;;;;;;;;:12;;;17320:372;;17382:12;17358:14;:20;17373:4;17358:20;;;;;;;;;;;;;;;;:36;17354:89;;17419:4;17398:12;:18;17411:4;17398:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;17436:5;17425:16;;17354:89;17466:12;:18;17479:4;17466:18;;;;;;;;;;;;;;;;;;;;;;;;;17462:215;;;17499:5;17488:16;;17462:215;;;17544:2;17534:12;;:6;;;;;;;;;;;:12;;;;:30;;;;;17560:4;17550:14;;:6;;;;;;;;;;;:14;;;;17534:30;17530:147;;;17591:12;17568:14;:20;17583:4;17568:20;;;;;;;;;;;;;;;:35;;;;17626:12;17605:14;:18;17620:2;17605:18;;;;;;;;;;;;;;;:33;;;;17663:12;17640:14;:20;17655:4;17640:20;;;;;;;;;;;;;;;:35;;;;17530:147;17462:215;17320:372;17211:481;17713:8;17705:17;;;17085:645;;;;;:::o;16754:323::-;16822:4;16854:7;:5;:7::i;:::-;16846:15;;:4;:15;;;;:45;;;;;16884:7;:5;:7::i;:::-;16878:13;;:2;:13;;;;16846:45;:84;;;;;16909:17;:21;16927:2;16909:21;;;;;;;;;;;;;;;;;;;;;;;;;16908:22;16846:84;:125;;;;;16948:17;:23;16966:4;16948:23;;;;;;;;;;;;;;;;;;;;;;;;;16947:24;16846:125;:152;;;;;5769:42;16988:10;;:2;:10;;;;16846:152;:185;;;;;17029:1;17015:16;;:2;:16;;;;16846:185;:223;;;;;17064:4;17048:21;;:4;:21;;;;16846:223;16839:230;;16754:323;;;;:::o;19995:913::-;6979:4;6960:16;;:23;;;;;;;;;;;;;;;;;;20123:1:::1;20103:6;:16;;;20084:6;:16;;;:35;;;;:::i;:::-;:40:::0;20080:66;20139:7:::1;20080:66;20156:17;20263:1;20241:6;:16;;;20222:6;:16;;;:35;;;;:::i;:::-;20201:6;:16;;;20178:20;:39;;;;:::i;:::-;20177:81;;;;:::i;:::-;20176:88;;;;:::i;:::-;20156:108;;20277:20;20323:9;20300:20;:32;;;;:::i;:::-;20277:55;;20343:30;20360:12;20343:16;:30::i;:::-;20386:22;20411:21;20386:46;;20443:24;20551:1;20529:6;:16;;;20510:6;:16;;;:35;;;;:::i;:::-;20489:6;:16;;;20472:14;:33;;;;:::i;:::-;20471:75;;;;:::i;:::-;20470:82;;;;:::i;:::-;20443:109;;20583:1;20571:9;:13;20567:161;;;20601:41;20614:9;20625:16;20601:12;:41::i;:::-;20662:54;20677:9;20688:16;20706:9;20662:54;;;;;;;;:::i;:::-;;;;;;;;20567:161;20766:1;20742:21;:25;20738:163;;;20784:12;20799:4;20784:19;;20839:10;;;;;;;;;;;20831:24;;20863:21;20831:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20818:71;;;;;20769:132;20738:163;20069:839;;;;6994:1;7025:5:::0;7006:16;;:24;;;;;;;;;;;;;;;;;;19995:913;:::o;22178:582::-;22278:4;22300:16;;;;;;;;;;;22295:221;;22333:28;22352:4;22358:2;22333:18;:28::i;:::-;22381:16;;;;;;;;;;;22380:17;:41;;;;;22401:20;22412:4;22418:2;22401:10;:20::i;:::-;22380:41;22376:129;;;22442:47;;;;;;;;;;:::i;:::-;;;;;;;;22376:129;22295:221;22544:6;22527:7;:13;22535:4;22527:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;22561:22;22587:7;22586:48;;22628:6;22586:48;;;22598:27;22608:4;22614:2;22618:6;22598:9;:27::i;:::-;22586:48;22561:73;;22664:14;22649:7;:11;22657:2;22649:11;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;22711:2;22696:34;;22705:4;22696:34;;;22715:14;22696:34;;;;;;:::i;:::-;;;;;;;;22748:4;22741:11;;;22178:582;;;;;;:::o;20916:417::-;20983:21;21021:1;21007:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20983:40;;21052:4;21034;21039:1;21034:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21078:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21068:4;21073:1;21068:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;21107:9;;;;;;;;;;;:60;;;21182:11;21208:1;21252:4;21279;21299:15;21107:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20972:361;20916:417;:::o;21341:335::-;21422:9;;;;;;;;;;;:25;;;21455:9;21488:4;21508:11;21534:1;21577;21620:7;:5;:7::i;:::-;21642:15;21422:246;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21341:335;;:::o;21684:486::-;21766:16;;;;;;;;;;;21765:17;21757:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21838:20;21849:4;21855:2;21838:10;:20::i;:::-;21837:21;:37;;;;;21868:6;;;;;;;;;;;21862:12;;:2;:12;;;21837:37;21833:330;;;21910:12;21895;:27;;;;21965:4;21939:17;:23;21957:4;21939:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;22003:4;21984:16;;:23;;;;;;;;;;;;;;;;;;22037:15;22022:12;:30;;;;22093:4;22069:21;;:28;;;;;;;;;;;;;;;;;;22117:34;22146:4;22117:34;;;;;;:::i;:::-;;;;;;;;21833:330;21684:486;;:::o;22768:689::-;22847:7;22867:18;22908:6;;;;;;;;;;;22902:12;;:2;:12;;;22898:187;;22942:4;:12;;;22931:23;;22898:187;;;23000:6;;;;;;;;;;;22992:14;;:4;:14;;;22988:97;;23022:4;:11;;;23009:24;;22988:97;;;23067:4;:16;;;23054:29;;22988:97;22898:187;23101:20;23112:4;23118:2;23101:10;:20::i;:::-;23097:142;;;23158:1;23141:13;;:18;:42;;;;23181:1;23163:13;;:20;;23141:42;23137:91;;;23204:8;;;23137:91;23097:142;23249:17;5375:5;23279:10;23270:6;:19;;;;:::i;:::-;:38;;;;:::i;:::-;23249:60;;23347:9;23320:7;:22;23336:4;23320:22;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;23396:4;23373:40;;23382:4;23373:40;;;23403:9;23373:40;;;;;;:::i;:::-;;;;;;;;23440:9;23431:6;:18;;;;:::i;:::-;23424:25;;;;22768:689;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;1983:60::-;2011:3;2032:5;2025:12;;1983:60;;;:::o;2049:142::-;2099:9;2132:53;2150:34;2159:24;2177:5;2159:24;:::i;:::-;2150:34;:::i;:::-;2132:53;:::i;:::-;2119:66;;2049:142;;;:::o;2197:126::-;2247:9;2280:37;2311:5;2280:37;:::i;:::-;2267:50;;2197:126;;;:::o;2329:152::-;2405:9;2438:37;2469:5;2438:37;:::i;:::-;2425:50;;2329:152;;;:::o;2487:183::-;2600:63;2657:5;2600:63;:::i;:::-;2595:3;2588:76;2487:183;;:::o;2676:274::-;2795:4;2833:2;2822:9;2818:18;2810:26;;2846:97;2940:1;2929:9;2925:17;2916:6;2846:97;:::i;:::-;2676:274;;;;:::o;2956:75::-;2989:6;3022:2;3016:9;3006:19;;2956:75;:::o;3037:117::-;3146:1;3143;3136:12;3160:117;3269:1;3266;3259:12;3283:122;3356:24;3374:5;3356:24;:::i;:::-;3349:5;3346:35;3336:63;;3395:1;3392;3385:12;3336:63;3283:122;:::o;3411:139::-;3457:5;3495:6;3482:20;3473:29;;3511:33;3538:5;3511:33;:::i;:::-;3411:139;;;;:::o;3556:77::-;3593:7;3622:5;3611:16;;3556:77;;;:::o;3639:122::-;3712:24;3730:5;3712:24;:::i;:::-;3705:5;3702:35;3692:63;;3751:1;3748;3741:12;3692:63;3639:122;:::o;3767:139::-;3813:5;3851:6;3838:20;3829:29;;3867:33;3894:5;3867:33;:::i;:::-;3767:139;;;;:::o;3912:474::-;3980:6;3988;4037:2;4025:9;4016:7;4012:23;4008:32;4005:119;;;4043:79;;:::i;:::-;4005:119;4163:1;4188:53;4233:7;4224:6;4213:9;4209:22;4188:53;:::i;:::-;4178:63;;4134:117;4290:2;4316:53;4361:7;4352:6;4341:9;4337:22;4316:53;:::i;:::-;4306:63;;4261:118;3912:474;;;;;:::o;4392:90::-;4426:7;4469:5;4462:13;4455:21;4444:32;;4392:90;;;:::o;4488:109::-;4569:21;4584:5;4569:21;:::i;:::-;4564:3;4557:34;4488:109;;:::o;4603:210::-;4690:4;4728:2;4717:9;4713:18;4705:26;;4741:65;4803:1;4792:9;4788:17;4779:6;4741:65;:::i;:::-;4603:210;;;;:::o;4819:117::-;4928:1;4925;4918:12;4942:180;4990:77;4987:1;4980:88;5087:4;5084:1;5077:15;5111:4;5108:1;5101:15;5128:281;5211:27;5233:4;5211:27;:::i;:::-;5203:6;5199:40;5341:6;5329:10;5326:22;5305:18;5293:10;5290:34;5287:62;5284:88;;;5352:18;;:::i;:::-;5284:88;5392:10;5388:2;5381:22;5171:238;5128:281;;:::o;5415:129::-;5449:6;5476:20;;:::i;:::-;5466:30;;5505:33;5533:4;5525:6;5505:33;:::i;:::-;5415:129;;;:::o;5550:311::-;5627:4;5717:18;5709:6;5706:30;5703:56;;;5739:18;;:::i;:::-;5703:56;5789:4;5781:6;5777:17;5769:25;;5849:4;5843;5839:15;5831:23;;5550:311;;;:::o;5867:117::-;5976:1;5973;5966:12;6007:710;6103:5;6128:81;6144:64;6201:6;6144:64;:::i;:::-;6128:81;:::i;:::-;6119:90;;6229:5;6258:6;6251:5;6244:21;6292:4;6285:5;6281:16;6274:23;;6345:4;6337:6;6333:17;6325:6;6321:30;6374:3;6366:6;6363:15;6360:122;;;6393:79;;:::i;:::-;6360:122;6508:6;6491:220;6525:6;6520:3;6517:15;6491:220;;;6600:3;6629:37;6662:3;6650:10;6629:37;:::i;:::-;6624:3;6617:50;6696:4;6691:3;6687:14;6680:21;;6567:144;6551:4;6546:3;6542:14;6535:21;;6491:220;;;6495:21;6109:608;;6007:710;;;;;:::o;6740:370::-;6811:5;6860:3;6853:4;6845:6;6841:17;6837:27;6827:122;;6868:79;;:::i;:::-;6827:122;6985:6;6972:20;7010:94;7100:3;7092:6;7085:4;7077:6;7073:17;7010:94;:::i;:::-;7001:103;;6817:293;6740:370;;;;:::o;7116:116::-;7186:21;7201:5;7186:21;:::i;:::-;7179:5;7176:32;7166:60;;7222:1;7219;7212:12;7166:60;7116:116;:::o;7238:133::-;7281:5;7319:6;7306:20;7297:29;;7335:30;7359:5;7335:30;:::i;:::-;7238:133;;;;:::o;7377:678::-;7467:6;7475;7524:2;7512:9;7503:7;7499:23;7495:32;7492:119;;;7530:79;;:::i;:::-;7492:119;7678:1;7667:9;7663:17;7650:31;7708:18;7700:6;7697:30;7694:117;;;7730:79;;:::i;:::-;7694:117;7835:78;7905:7;7896:6;7885:9;7881:22;7835:78;:::i;:::-;7825:88;;7621:302;7962:2;7988:50;8030:7;8021:6;8010:9;8006:22;7988:50;:::i;:::-;7978:60;;7933:115;7377:678;;;;;:::o;8061:118::-;8148:24;8166:5;8148:24;:::i;:::-;8143:3;8136:37;8061:118;;:::o;8185:222::-;8278:4;8316:2;8305:9;8301:18;8293:26;;8329:71;8397:1;8386:9;8382:17;8373:6;8329:71;:::i;:::-;8185:222;;;;:::o;8413:619::-;8490:6;8498;8506;8555:2;8543:9;8534:7;8530:23;8526:32;8523:119;;;8561:79;;:::i;:::-;8523:119;8681:1;8706:53;8751:7;8742:6;8731:9;8727:22;8706:53;:::i;:::-;8696:63;;8652:117;8808:2;8834:53;8879:7;8870:6;8859:9;8855:22;8834:53;:::i;:::-;8824:63;;8779:118;8936:2;8962:53;9007:7;8998:6;8987:9;8983:22;8962:53;:::i;:::-;8952:63;;8907:118;8413:619;;;;;:::o;9038:474::-;9106:6;9114;9163:2;9151:9;9142:7;9138:23;9134:32;9131:119;;;9169:79;;:::i;:::-;9131:119;9289:1;9314:53;9359:7;9350:6;9339:9;9335:22;9314:53;:::i;:::-;9304:63;;9260:117;9416:2;9442:53;9487:7;9478:6;9467:9;9463:22;9442:53;:::i;:::-;9432:63;;9387:118;9038:474;;;;;:::o;9518:86::-;9553:7;9593:4;9586:5;9582:16;9571:27;;9518:86;;;:::o;9610:112::-;9693:22;9709:5;9693:22;:::i;:::-;9688:3;9681:35;9610:112;;:::o;9728:214::-;9817:4;9855:2;9844:9;9840:18;9832:26;;9868:67;9932:1;9921:9;9917:17;9908:6;9868:67;:::i;:::-;9728:214;;;;:::o;9948:442::-;10097:4;10135:2;10124:9;10120:18;10112:26;;10148:71;10216:1;10205:9;10201:17;10192:6;10148:71;:::i;:::-;10229:72;10297:2;10286:9;10282:18;10273:6;10229:72;:::i;:::-;10311;10379:2;10368:9;10364:18;10355:6;10311:72;:::i;:::-;9948:442;;;;;;:::o;10396:329::-;10455:6;10504:2;10492:9;10483:7;10479:23;10475:32;10472:119;;;10510:79;;:::i;:::-;10472:119;10630:1;10655:53;10700:7;10691:6;10680:9;10676:22;10655:53;:::i;:::-;10645:63;;10601:117;10396:329;;;;:::o;10731:468::-;10796:6;10804;10853:2;10841:9;10832:7;10828:23;10824:32;10821:119;;;10859:79;;:::i;:::-;10821:119;10979:1;11004:53;11049:7;11040:6;11029:9;11025:22;11004:53;:::i;:::-;10994:63;;10950:117;11106:2;11132:50;11174:7;11165:6;11154:9;11150:22;11132:50;:::i;:::-;11122:60;;11077:115;10731:468;;;;;:::o;11205:117::-;11314:1;11311;11304:12;11328:308;11390:4;11480:18;11472:6;11469:30;11466:56;;;11502:18;;:::i;:::-;11466:56;11540:29;11562:6;11540:29;:::i;:::-;11532:37;;11624:4;11618;11614:15;11606:23;;11328:308;;;:::o;11642:154::-;11726:6;11721:3;11716;11703:30;11788:1;11779:6;11774:3;11770:16;11763:27;11642:154;;;:::o;11802:412::-;11880:5;11905:66;11921:49;11963:6;11921:49;:::i;:::-;11905:66;:::i;:::-;11896:75;;11994:6;11987:5;11980:21;12032:4;12025:5;12021:16;12070:3;12061:6;12056:3;12052:16;12049:25;12046:112;;;12077:79;;:::i;:::-;12046:112;12167:41;12201:6;12196:3;12191;12167:41;:::i;:::-;11886:328;11802:412;;;;;:::o;12234:340::-;12290:5;12339:3;12332:4;12324:6;12320:17;12316:27;12306:122;;12347:79;;:::i;:::-;12306:122;12464:6;12451:20;12489:79;12564:3;12556:6;12549:4;12541:6;12537:17;12489:79;:::i;:::-;12480:88;;12296:278;12234:340;;;;:::o;12580:979::-;12677:6;12685;12693;12742:2;12730:9;12721:7;12717:23;12713:32;12710:119;;;12748:79;;:::i;:::-;12710:119;12896:1;12885:9;12881:17;12868:31;12926:18;12918:6;12915:30;12912:117;;;12948:79;;:::i;:::-;12912:117;13053:63;13108:7;13099:6;13088:9;13084:22;13053:63;:::i;:::-;13043:73;;12839:287;13193:2;13182:9;13178:18;13165:32;13224:18;13216:6;13213:30;13210:117;;;13246:79;;:::i;:::-;13210:117;13351:63;13406:7;13397:6;13386:9;13382:22;13351:63;:::i;:::-;13341:73;;13136:288;13463:2;13489:53;13534:7;13525:6;13514:9;13510:22;13489:53;:::i;:::-;13479:63;;13434:118;12580:979;;;;;:::o;13565:332::-;13686:4;13724:2;13713:9;13709:18;13701:26;;13737:71;13805:1;13794:9;13790:17;13781:6;13737:71;:::i;:::-;13818:72;13886:2;13875:9;13871:18;13862:6;13818:72;:::i;:::-;13565:332;;;;;:::o;13903:323::-;13959:6;14008:2;13996:9;13987:7;13983:23;13979:32;13976:119;;;14014:79;;:::i;:::-;13976:119;14134:1;14159:50;14201:7;14192:6;14181:9;14177:22;14159:50;:::i;:::-;14149:60;;14105:114;13903:323;;;;:::o;14232:474::-;14300:6;14308;14357:2;14345:9;14336:7;14332:23;14328:32;14325:119;;;14363:79;;:::i;:::-;14325:119;14483:1;14508:53;14553:7;14544:6;14533:9;14529:22;14508:53;:::i;:::-;14498:63;;14454:117;14610:2;14636:53;14681:7;14672:6;14661:9;14657:22;14636:53;:::i;:::-;14626:63;;14581:118;14232:474;;;;;:::o;14712:619::-;14789:6;14797;14805;14854:2;14842:9;14833:7;14829:23;14825:32;14822:119;;;14860:79;;:::i;:::-;14822:119;14980:1;15005:53;15050:7;15041:6;15030:9;15026:22;15005:53;:::i;:::-;14995:63;;14951:117;15107:2;15133:53;15178:7;15169:6;15158:9;15154:22;15133:53;:::i;:::-;15123:63;;15078:118;15235:2;15261:53;15306:7;15297:6;15286:9;15282:22;15261:53;:::i;:::-;15251:63;;15206:118;14712:619;;;;;:::o;15337:104::-;15382:7;15411:24;15429:5;15411:24;:::i;:::-;15400:35;;15337:104;;;:::o;15447:138::-;15528:32;15554:5;15528:32;:::i;:::-;15521:5;15518:43;15508:71;;15575:1;15572;15565:12;15508:71;15447:138;:::o;15591:155::-;15645:5;15683:6;15670:20;15661:29;;15699:41;15734:5;15699:41;:::i;:::-;15591:155;;;;:::o;15752:345::-;15819:6;15868:2;15856:9;15847:7;15843:23;15839:32;15836:119;;;15874:79;;:::i;:::-;15836:119;15994:1;16019:61;16072:7;16063:6;16052:9;16048:22;16019:61;:::i;:::-;16009:71;;15965:125;15752:345;;;;:::o;16103:765::-;16189:6;16197;16205;16213;16262:3;16250:9;16241:7;16237:23;16233:33;16230:120;;;16269:79;;:::i;:::-;16230:120;16389:1;16414:53;16459:7;16450:6;16439:9;16435:22;16414:53;:::i;:::-;16404:63;;16360:117;16516:2;16542:53;16587:7;16578:6;16567:9;16563:22;16542:53;:::i;:::-;16532:63;;16487:118;16644:2;16670:53;16715:7;16706:6;16695:9;16691:22;16670:53;:::i;:::-;16660:63;;16615:118;16772:2;16798:53;16843:7;16834:6;16823:9;16819:22;16798:53;:::i;:::-;16788:63;;16743:118;16103:765;;;;;;;:::o;16874:180::-;16922:77;16919:1;16912:88;17019:4;17016:1;17009:15;17043:4;17040:1;17033:15;17060:320;17104:6;17141:1;17135:4;17131:12;17121:22;;17188:1;17182:4;17178:12;17209:18;17199:81;;17265:4;17257:6;17253:17;17243:27;;17199:81;17327:2;17319:6;17316:14;17296:18;17293:38;17290:84;;17346:18;;:::i;:::-;17290:84;17111:269;17060:320;;;:::o;17386:166::-;17526:18;17522:1;17514:6;17510:14;17503:42;17386:166;:::o;17558:366::-;17700:3;17721:67;17785:2;17780:3;17721:67;:::i;:::-;17714:74;;17797:93;17886:3;17797:93;:::i;:::-;17915:2;17910:3;17906:12;17899:19;;17558:366;;;:::o;17930:419::-;18096:4;18134:2;18123:9;18119:18;18111:26;;18183:9;18177:4;18173:20;18169:1;18158:9;18154:17;18147:47;18211:131;18337:4;18211:131;:::i;:::-;18203:139;;17930:419;;;:::o;18355:180::-;18403:77;18400:1;18393:88;18500:4;18497:1;18490:15;18524:4;18521:1;18514:15;18541:180;18589:77;18586:1;18579:88;18686:4;18683:1;18676:15;18710:4;18707:1;18700:15;18727:233;18766:3;18789:24;18807:5;18789:24;:::i;:::-;18780:33;;18835:66;18828:5;18825:77;18822:103;;18905:18;;:::i;:::-;18822:103;18952:1;18945:5;18941:13;18934:20;;18727:233;;;:::o;18966:191::-;19006:4;19026:20;19044:1;19026:20;:::i;:::-;19021:25;;19060:20;19078:1;19060:20;:::i;:::-;19055:25;;19099:1;19096;19093:8;19090:34;;;19104:18;;:::i;:::-;19090:34;19149:1;19146;19142:9;19134:17;;18966:191;;;;:::o;19163:348::-;19203:7;19226:20;19244:1;19226:20;:::i;:::-;19221:25;;19260:20;19278:1;19260:20;:::i;:::-;19255:25;;19448:1;19380:66;19376:74;19373:1;19370:81;19365:1;19358:9;19351:17;19347:105;19344:131;;;19455:18;;:::i;:::-;19344:131;19503:1;19500;19496:9;19485:20;;19163:348;;;;:::o;19517:180::-;19565:77;19562:1;19555:88;19662:4;19659:1;19652:15;19686:4;19683:1;19676:15;19703:185;19743:1;19760:20;19778:1;19760:20;:::i;:::-;19755:25;;19794:20;19812:1;19794:20;:::i;:::-;19789:25;;19833:1;19823:35;;19838:18;;:::i;:::-;19823:35;19880:1;19877;19873:9;19868:14;;19703:185;;;;:::o;19894:224::-;20034:34;20030:1;20022:6;20018:14;20011:58;20103:7;20098:2;20090:6;20086:15;20079:32;19894:224;:::o;20124:366::-;20266:3;20287:67;20351:2;20346:3;20287:67;:::i;:::-;20280:74;;20363:93;20452:3;20363:93;:::i;:::-;20481:2;20476:3;20472:12;20465:19;;20124:366;;;:::o;20496:419::-;20662:4;20700:2;20689:9;20685:18;20677:26;;20749:9;20743:4;20739:20;20735:1;20724:9;20720:17;20713:47;20777:131;20903:4;20777:131;:::i;:::-;20769:139;;20496:419;;;:::o;20921:305::-;20961:3;20980:20;20998:1;20980:20;:::i;:::-;20975:25;;21014:20;21032:1;21014:20;:::i;:::-;21009:25;;21168:1;21100:66;21096:74;21093:1;21090:81;21087:107;;;21174:18;;:::i;:::-;21087:107;21218:1;21215;21211:9;21204:16;;20921:305;;;;:::o;21232:248::-;21372:34;21368:1;21360:6;21356:14;21349:58;21441:31;21436:2;21428:6;21424:15;21417:56;21232:248;:::o;21486:366::-;21628:3;21649:67;21713:2;21708:3;21649:67;:::i;:::-;21642:74;;21725:93;21814:3;21725:93;:::i;:::-;21843:2;21838:3;21834:12;21827:19;;21486:366;;;:::o;21858:419::-;22024:4;22062:2;22051:9;22047:18;22039:26;;22111:9;22105:4;22101:20;22097:1;22086:9;22082:17;22075:47;22139:131;22265:4;22139:131;:::i;:::-;22131:139;;21858:419;;;:::o;22283:161::-;22423:13;22419:1;22411:6;22407:14;22400:37;22283:161;:::o;22450:366::-;22592:3;22613:67;22677:2;22672:3;22613:67;:::i;:::-;22606:74;;22689:93;22778:3;22689:93;:::i;:::-;22807:2;22802:3;22798:12;22791:19;;22450:366;;;:::o;22822:419::-;22988:4;23026:2;23015:9;23011:18;23003:26;;23075:9;23069:4;23065:20;23061:1;23050:9;23046:17;23039:47;23103:131;23229:4;23103:131;:::i;:::-;23095:139;;22822:419;;;:::o;23247:179::-;23387:31;23383:1;23375:6;23371:14;23364:55;23247:179;:::o;23432:366::-;23574:3;23595:67;23659:2;23654:3;23595:67;:::i;:::-;23588:74;;23671:93;23760:3;23671:93;:::i;:::-;23789:2;23784:3;23780:12;23773:19;;23432:366;;;:::o;23804:419::-;23970:4;24008:2;23997:9;23993:18;23985:26;;24057:9;24051:4;24047:20;24043:1;24032:9;24028:17;24021:47;24085:131;24211:4;24085:131;:::i;:::-;24077:139;;23804:419;;;:::o;24229:102::-;24271:8;24318:5;24315:1;24311:13;24290:34;;24229:102;;;:::o;24337:848::-;24398:5;24405:4;24429:6;24420:15;;24453:5;24444:14;;24467:712;24488:1;24478:8;24475:15;24467:712;;;24583:4;24578:3;24574:14;24568:4;24565:24;24562:50;;;24592:18;;:::i;:::-;24562:50;24642:1;24632:8;24628:16;24625:451;;;25057:4;25050:5;25046:16;25037:25;;24625:451;25107:4;25101;25097:15;25089:23;;25137:32;25160:8;25137:32;:::i;:::-;25125:44;;24467:712;;;24337:848;;;;;;;:::o;25191:1073::-;25245:5;25436:8;25426:40;;25457:1;25448:10;;25459:5;;25426:40;25485:4;25475:36;;25502:1;25493:10;;25504:5;;25475:36;25571:4;25619:1;25614:27;;;;25655:1;25650:191;;;;25564:277;;25614:27;25632:1;25623:10;;25634:5;;;25650:191;25695:3;25685:8;25682:17;25679:43;;;25702:18;;:::i;:::-;25679:43;25751:8;25748:1;25744:16;25735:25;;25786:3;25779:5;25776:14;25773:40;;;25793:18;;:::i;:::-;25773:40;25826:5;;;25564:277;;25950:2;25940:8;25937:16;25931:3;25925:4;25922:13;25918:36;25900:2;25890:8;25887:16;25882:2;25876:4;25873:12;25869:35;25853:111;25850:246;;;26006:8;26000:4;25996:19;25987:28;;26041:3;26034:5;26031:14;26028:40;;;26048:18;;:::i;:::-;26028:40;26081:5;;25850:246;26121:42;26159:3;26149:8;26143:4;26140:1;26121:42;:::i;:::-;26106:57;;;;26195:4;26190:3;26186:14;26179:5;26176:25;26173:51;;;26204:18;;:::i;:::-;26173:51;26253:4;26246:5;26242:16;26233:25;;25191:1073;;;;;;:::o;26270:281::-;26328:5;26352:23;26370:4;26352:23;:::i;:::-;26344:31;;26396:25;26412:8;26396:25;:::i;:::-;26384:37;;26440:104;26477:66;26467:8;26461:4;26440:104;:::i;:::-;26431:113;;26270:281;;;;:::o;26557:143::-;26614:5;26645:6;26639:13;26630:22;;26661:33;26688:5;26661:33;:::i;:::-;26557:143;;;;:::o;26706:351::-;26776:6;26825:2;26813:9;26804:7;26800:23;26796:32;26793:119;;;26831:79;;:::i;:::-;26793:119;26951:1;26976:64;27032:7;27023:6;27012:9;27008:22;26976:64;:::i;:::-;26966:74;;26922:128;26706:351;;;;:::o;27063:332::-;27184:4;27222:2;27211:9;27207:18;27199:26;;27235:71;27303:1;27292:9;27288:17;27279:6;27235:71;:::i;:::-;27316:72;27384:2;27373:9;27369:18;27360:6;27316:72;:::i;:::-;27063:332;;;;;:::o;27401:85::-;27446:7;27475:5;27464:16;;27401:85;;;:::o;27492:158::-;27550:9;27583:61;27601:42;27610:32;27636:5;27610:32;:::i;:::-;27601:42;:::i;:::-;27583:61;:::i;:::-;27570:74;;27492:158;;;:::o;27656:147::-;27751:45;27790:5;27751:45;:::i;:::-;27746:3;27739:58;27656:147;;:::o;27809:807::-;28058:4;28096:3;28085:9;28081:19;28073:27;;28110:71;28178:1;28167:9;28163:17;28154:6;28110:71;:::i;:::-;28191:72;28259:2;28248:9;28244:18;28235:6;28191:72;:::i;:::-;28273:80;28349:2;28338:9;28334:18;28325:6;28273:80;:::i;:::-;28363;28439:2;28428:9;28424:18;28415:6;28363:80;:::i;:::-;28453:73;28521:3;28510:9;28506:19;28497:6;28453:73;:::i;:::-;28536;28604:3;28593:9;28589:19;28580:6;28536:73;:::i;:::-;27809:807;;;;;;;;;:::o;28622:143::-;28679:5;28710:6;28704:13;28695:22;;28726:33;28753:5;28726:33;:::i;:::-;28622:143;;;;:::o;28771:663::-;28859:6;28867;28875;28924:2;28912:9;28903:7;28899:23;28895:32;28892:119;;;28930:79;;:::i;:::-;28892:119;29050:1;29075:64;29131:7;29122:6;29111:9;29107:22;29075:64;:::i;:::-;29065:74;;29021:128;29188:2;29214:64;29270:7;29261:6;29250:9;29246:22;29214:64;:::i;:::-;29204:74;;29159:129;29327:2;29353:64;29409:7;29400:6;29389:9;29385:22;29353:64;:::i;:::-;29343:74;;29298:129;28771:663;;;;;:::o;29440:173::-;29580:25;29576:1;29568:6;29564:14;29557:49;29440:173;:::o;29619:366::-;29761:3;29782:67;29846:2;29841:3;29782:67;:::i;:::-;29775:74;;29858:93;29947:3;29858:93;:::i;:::-;29976:2;29971:3;29967:12;29960:19;;29619:366;;;:::o;29991:419::-;30157:4;30195:2;30184:9;30180:18;30172:26;;30244:9;30238:4;30234:20;30230:1;30219:9;30215:17;30208:47;30272:131;30398:4;30272:131;:::i;:::-;30264:139;;29991:419;;;:::o;30416:169::-;30556:21;30552:1;30544:6;30540:14;30533:45;30416:169;:::o;30591:366::-;30733:3;30754:67;30818:2;30813:3;30754:67;:::i;:::-;30747:74;;30830:93;30919:3;30830:93;:::i;:::-;30948:2;30943:3;30939:12;30932:19;;30591:366;;;:::o;30963:419::-;31129:4;31167:2;31156:9;31152:18;31144:26;;31216:9;31210:4;31206:20;31202:1;31191:9;31187:17;31180:47;31244:131;31370:4;31244:131;:::i;:::-;31236:139;;30963:419;;;:::o;31388:170::-;31528:22;31524:1;31516:6;31512:14;31505:46;31388:170;:::o;31564:366::-;31706:3;31727:67;31791:2;31786:3;31727:67;:::i;:::-;31720:74;;31803:93;31892:3;31803:93;:::i;:::-;31921:2;31916:3;31912:12;31905:19;;31564:366;;;:::o;31936:419::-;32102:4;32140:2;32129:9;32125:18;32117:26;;32189:9;32183:4;32179:20;32175:1;32164:9;32160:17;32153:47;32217:131;32343:4;32217:131;:::i;:::-;32209:139;;31936:419;;;:::o;32361:158::-;32501:10;32497:1;32489:6;32485:14;32478:34;32361:158;:::o;32525:365::-;32667:3;32688:66;32752:1;32747:3;32688:66;:::i;:::-;32681:73;;32763:93;32852:3;32763:93;:::i;:::-;32881:2;32876:3;32872:12;32865:19;;32525:365;;;:::o;32896:419::-;33062:4;33100:2;33089:9;33085:18;33077:26;;33149:9;33143:4;33139:20;33135:1;33124:9;33120:17;33113:47;33177:131;33303:4;33177:131;:::i;:::-;33169:139;;32896:419;;;:::o;33321:165::-;33461:17;33457:1;33449:6;33445:14;33438:41;33321:165;:::o;33492:366::-;33634:3;33655:67;33719:2;33714:3;33655:67;:::i;:::-;33648:74;;33731:93;33820:3;33731:93;:::i;:::-;33849:2;33844:3;33840:12;33833:19;;33492:366;;;:::o;33864:419::-;34030:4;34068:2;34057:9;34053:18;34045:26;;34117:9;34111:4;34107:20;34103:1;34092:9;34088:17;34081:47;34145:131;34271:4;34145:131;:::i;:::-;34137:139;;33864:419;;;:::o;34289:172::-;34429:24;34425:1;34417:6;34413:14;34406:48;34289:172;:::o;34467:366::-;34609:3;34630:67;34694:2;34689:3;34630:67;:::i;:::-;34623:74;;34706:93;34795:3;34706:93;:::i;:::-;34824:2;34819:3;34815:12;34808:19;;34467:366;;;:::o;34839:419::-;35005:4;35043:2;35032:9;35028:18;35020:26;;35092:9;35086:4;35082:20;35078:1;35067:9;35063:17;35056:47;35120:131;35246:4;35120:131;:::i;:::-;35112:139;;34839:419;;;:::o;35264:174::-;35404:26;35400:1;35392:6;35388:14;35381:50;35264:174;:::o;35444:366::-;35586:3;35607:67;35671:2;35666:3;35607:67;:::i;:::-;35600:74;;35683:93;35772:3;35683:93;:::i;:::-;35801:2;35796:3;35792:12;35785:19;;35444:366;;;:::o;35816:419::-;35982:4;36020:2;36009:9;36005:18;35997:26;;36069:9;36063:4;36059:20;36055:1;36044:9;36040:17;36033:47;36097:131;36223:4;36097:131;:::i;:::-;36089:139;;35816:419;;;:::o;36241:176::-;36381:28;36377:1;36369:6;36365:14;36358:52;36241:176;:::o;36423:366::-;36565:3;36586:67;36650:2;36645:3;36586:67;:::i;:::-;36579:74;;36662:93;36751:3;36662:93;:::i;:::-;36780:2;36775:3;36771:12;36764:19;;36423:366;;;:::o;36795:419::-;36961:4;36999:2;36988:9;36984:18;36976:26;;37048:9;37042:4;37038:20;37034:1;37023:9;37019:17;37012:47;37076:131;37202:4;37076:131;:::i;:::-;37068:139;;36795:419;;;:::o;37220:147::-;37321:11;37358:3;37343:18;;37220:147;;;;:::o;37373:114::-;;:::o;37493:398::-;37652:3;37673:83;37754:1;37749:3;37673:83;:::i;:::-;37666:90;;37765:93;37854:3;37765:93;:::i;:::-;37883:1;37878:3;37874:11;37867:18;;37493:398;;;:::o;37897:379::-;38081:3;38103:147;38246:3;38103:147;:::i;:::-;38096:154;;38267:3;38260:10;;37897:379;;;:::o;38282:224::-;38422:34;38418:1;38410:6;38406:14;38399:58;38491:7;38486:2;38478:6;38474:15;38467:32;38282:224;:::o;38512:366::-;38654:3;38675:67;38739:2;38734:3;38675:67;:::i;:::-;38668:74;;38751:93;38840:3;38751:93;:::i;:::-;38869:2;38864:3;38860:12;38853:19;;38512:366;;;:::o;38884:419::-;39050:4;39088:2;39077:9;39073:18;39065:26;;39137:9;39131:4;39127:20;39123:1;39112:9;39108:17;39101:47;39165:131;39291:4;39165:131;:::i;:::-;39157:139;;38884:419;;;:::o;39309:114::-;39376:6;39410:5;39404:12;39394:22;;39309:114;;;:::o;39429:184::-;39528:11;39562:6;39557:3;39550:19;39602:4;39597:3;39593:14;39578:29;;39429:184;;;;:::o;39619:132::-;39686:4;39709:3;39701:11;;39739:4;39734:3;39730:14;39722:22;;39619:132;;;:::o;39757:108::-;39834:24;39852:5;39834:24;:::i;:::-;39829:3;39822:37;39757:108;;:::o;39871:179::-;39940:10;39961:46;40003:3;39995:6;39961:46;:::i;:::-;40039:4;40034:3;40030:14;40016:28;;39871:179;;;;:::o;40056:113::-;40126:4;40158;40153:3;40149:14;40141:22;;40056:113;;;:::o;40205:732::-;40324:3;40353:54;40401:5;40353:54;:::i;:::-;40423:86;40502:6;40497:3;40423:86;:::i;:::-;40416:93;;40533:56;40583:5;40533:56;:::i;:::-;40612:7;40643:1;40628:284;40653:6;40650:1;40647:13;40628:284;;;40729:6;40723:13;40756:63;40815:3;40800:13;40756:63;:::i;:::-;40749:70;;40842:60;40895:6;40842:60;:::i;:::-;40832:70;;40688:224;40675:1;40672;40668:9;40663:14;;40628:284;;;40632:14;40928:3;40921:10;;40329:608;;;40205:732;;;;:::o;40943:831::-;41206:4;41244:3;41233:9;41229:19;41221:27;;41258:71;41326:1;41315:9;41311:17;41302:6;41258:71;:::i;:::-;41339:80;41415:2;41404:9;41400:18;41391:6;41339:80;:::i;:::-;41466:9;41460:4;41456:20;41451:2;41440:9;41436:18;41429:48;41494:108;41597:4;41588:6;41494:108;:::i;:::-;41486:116;;41612:72;41680:2;41669:9;41665:18;41656:6;41612:72;:::i;:::-;41694:73;41762:3;41751:9;41747:19;41738:6;41694:73;:::i;:::-;40943:831;;;;;;;;:::o;41780:222::-;41920:34;41916:1;41908:6;41904:14;41897:58;41989:5;41984:2;41976:6;41972:15;41965:30;41780:222;:::o;42008:366::-;42150:3;42171:67;42235:2;42230:3;42171:67;:::i;:::-;42164:74;;42247:93;42336:3;42247:93;:::i;:::-;42365:2;42360:3;42356:12;42349:19;;42008:366;;;:::o;42380:419::-;42546:4;42584:2;42573:9;42569:18;42561:26;;42633:9;42627:4;42623:20;42619:1;42608:9;42604:17;42597:47;42661:131;42787:4;42661:131;:::i;:::-;42653:139;;42380:419;;;:::o

Swarm Source

ipfs://ed07766818426093adce10f18f49c8b49e39d5e6a3964d06156e6b6c73349fb0

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.