BNB Price: $618.35 (+3.51%)
 

Overview

Max Total Supply

1,000,000,000AEVO

Holders

524

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
159,104.167008539 AEVO

Value
$0.00
0x063789e9daceae44996d1326a581611e19c20a77
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
AEVO

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at BscScan.com on 2024-03-06
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

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

    function _msgData() internal view virtual 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 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);
    

}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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 DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    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 AEVO is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0xbFB30A6Fb3e1885b6aE5Ebe11B63c7157CDcC18E); // Marketing Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "AEVO";
    string private _symbol = "AEVO";
    uint8 private _decimals = 9;

    struct AddressFee {
        bool enable;
        uint256 _taxFee;
        uint256 _liquidityFee;
        uint256 _buyTaxFee;
        uint256 _buyLiquidityFee;
        uint256 _sellTaxFee;
        uint256 _sellLiquidityFee;
    }

    struct SellHistories {
        uint256 time;
        uint256 bnbAmount;
    }

    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 0;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public _buyTaxFee = 0;
    uint256 public _buyLiquidityFee = 0;
    
    uint256 public _sellTaxFee = 0;
    uint256 private _sellLiquidityFee = 100;

    uint256 public _startTimeForSwap;
    uint256 public _intervalMinutesForSwap = 1 * 1 minutes;

    uint256 public _buyBackRangeRate = 0;

    // Fee per address
    mapping (address => AddressFee) public _addressFees;

    uint256 public marketingDivisor = 0;
    
    uint256 public _maxTxAmount = 100000000000000 * 10**9;
    uint256 private minimumTokensBeforeSwap = 1 * 10**9; 
    uint256 public buyBackSellLimit = 1 * 10**30;

    // LookBack into historical sale data
    SellHistories[] public _sellHistories;
    bool public _isAutoBuyBack = true;
    uint256 public _buyBackDivisor = 0;
    uint256 public _buyBackTimeInterval = 1 minutes;
    uint256 public _buyBackMaxTimeForHistories = 24 * 10 minutes;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = false;

    bool public _isEnabledBuyBackAndBurn = false;
    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    event AutoBuyBackEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {

        _rOwned[_msgSender()] = _rTotal;
        
        // Pancake Router Testnet v1
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        
        // uniswap Router Testnet v2 - Not existing I guess
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _startTimeForSwap = block.timestamp;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

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

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function buyBackSellLimitAmount() public view returns (uint256) {
        return buyBackSellLimit;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {

        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;    

        if (to == uniswapV2Pair && balanceOf(uniswapV2Pair) > 0) {
            SellHistories memory sellHistory;
            sellHistory.time = block.timestamp;
            sellHistory.bnbAmount = _getSellBnBAmount(amount);

            _sellHistories.push(sellHistory);
        }    

        // Sell tokens for ETH
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && balanceOf(uniswapV2Pair) > 0) {
            if (to == uniswapV2Pair) {
                if (overMinimumTokenBalance && _startTimeForSwap + _intervalMinutesForSwap <= block.timestamp) {
                    _startTimeForSwap = block.timestamp;
                    contractTokenBalance = minimumTokensBeforeSwap;
                    swapTokens(contractTokenBalance);    
                }  

                if (buyBackEnabled) {

                    uint256 balance = address(this).balance;
                
                    uint256 _bBSLimitMax = buyBackSellLimit;

                    if (_isAutoBuyBack) {

                        uint256 sumBnbAmount = 0;
                        uint256 startTime = block.timestamp - _buyBackTimeInterval;
                        uint256 cnt = 0;

                        for (uint i = 0; i < _sellHistories.length; i ++) {
                            
                            if (_sellHistories[i].time >= startTime) {
                                sumBnbAmount = sumBnbAmount.add(_sellHistories[i].bnbAmount);
                                cnt = cnt + 1;
                            }
                        }

                        if (cnt > 0 && _buyBackDivisor > 0) {
                            _bBSLimitMax = sumBnbAmount.div(cnt).div(_buyBackDivisor);
                        }

                        _removeOldSellHistories();
                    }

                    uint256 _bBSLimitMin = _bBSLimitMax.mul(_buyBackRangeRate).div(100);

                    uint256 _bBSLimit = _bBSLimitMin + uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty))) % (_bBSLimitMax - _bBSLimitMin + 1);

                    if (balance > _bBSLimit) {
                        buyBackTokens(_bBSLimit);
                    } 
                }
            }
            
        }

        bool takeFee = true;
        
        // If any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        else{
            // Buy
            if(from == uniswapV2Pair){
                removeAllFee();
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee;
            }
            // Sell
            if(to == uniswapV2Pair){
                removeAllFee();
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee;
            }
            
            // If send account has a special fee 
            if(_addressFees[from].enable){
                removeAllFee();
                _taxFee = _addressFees[from]._taxFee;
                _liquidityFee = _addressFees[from]._liquidityFee;
                
                // Sell
                if(to == uniswapV2Pair){
                    _taxFee = _addressFees[from]._sellTaxFee;
                    _liquidityFee = _addressFees[from]._sellLiquidityFee;
                }
            }
            else{
                // If buy account has a special fee
                if(_addressFees[to].enable){
                    //buy
                    removeAllFee();
                    if(from == uniswapV2Pair){
                        _taxFee = _addressFees[to]._buyTaxFee;
                        _liquidityFee = _addressFees[to]._buyLiquidityFee;
                    }
                }
            }
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        // Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance.mul(marketingDivisor).div(100));
        
    }
    

    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // Generate the uniswap pair path of token -> WETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // Make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // Accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    
    function swapETHForTokens(uint256 amount) private {
        // Generate the uniswap pair path of token -> WETH
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // Make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // Accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, path);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // Approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // Add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // Slippage is unavoidable
            0, // Slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
	    _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }


    function _getSellBnBAmount(uint256 tokenAmount) private view returns(uint256) {
        address[] memory path = new address[](2);

        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint[] memory amounts = uniswapV2Router.getAmountsOut(tokenAmount, path);

        return amounts[1];
    }

    function _removeOldSellHistories() private {
        uint256 i = 0;
        uint256 maxStartTimeForHistories = block.timestamp - _buyBackMaxTimeForHistories;

        for (uint256 j = 0; j < _sellHistories.length; j ++) {

            if (_sellHistories[j].time >= maxStartTimeForHistories) {

                _sellHistories[i].time = _sellHistories[j].time;
                _sellHistories[i].bnbAmount = _sellHistories[j].bnbAmount;

                i = i + 1;
            }
        }

        uint256 removedCnt = _sellHistories.length - i;

        for (uint256 j = 0; j < removedCnt; j ++) {
            
            _sellHistories.pop();
        }
        
    }

    function SetBuyBackMaxTimeForHistories(uint256 newMinutes) external onlyOwner {
        _buyBackMaxTimeForHistories = newMinutes * 1 minutes;
    }

    function SetBuyBackDivisor(uint256 newDivisor) external onlyOwner {
        _buyBackDivisor = newDivisor;
    }

    function GetBuyBackTimeInterval() public view returns(uint256) {
        return _buyBackTimeInterval.div(60);
    }

    function SetBuyBackTimeInterval(uint256 newMinutes) external onlyOwner {
        _buyBackTimeInterval = newMinutes * 1 minutes;
    }

    function SetBuyBackRangeRate(uint256 newPercent) external onlyOwner {
        require(newPercent <= 100, "The value must not be larger than 100.");
        _buyBackRangeRate = newPercent;
    }

    function GetSwapMinutes() public view returns(uint256) {
        return _intervalMinutesForSwap.div(60);
    }

    function SetSwapMinutes(uint256 newMinutes) external onlyOwner {
        _intervalMinutesForSwap = newMinutes * 1 minutes;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
        
    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee) external onlyOwner {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
    }
   
    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee) external onlyOwner {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner {
        _liquidityFee = liquidityFee;
    }

    function setBuyBackSellLimit(uint256 buyBackSellSetLimit) external onlyOwner {
        buyBackSellLimit = buyBackSellSetLimit;
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMarketingDivisor(uint256 divisor) external onlyOwner {
        marketingDivisor = divisor;
    }

    function setNumTokensSellToAddToBuyBack(uint256 _minimumTokensBeforeSwap) external onlyOwner {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        marketingAddress = payable(_marketingAddress);
    }

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

    function setAutoBuyBackEnabled(bool _enabled) public onlyOwner {
        _isAutoBuyBack = _enabled;
        emit AutoBuyBackEnabledUpdated(_enabled);
    }
    
    function prepareForPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(false);
        _taxFee = 0;
        _liquidityFee = 0;
        _maxTxAmount = 1000000000 * 10**6 * 10**9;
    }
    
    function afterPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(true);
        _taxFee = 2;
        _liquidityFee = 10;
        _maxTxAmount = 3000000 * 10**6 * 10**9;
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function changeRouterVersion(address _router) public onlyOwner returns(address _pair) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        
        _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if(_pair == address(0)){
            // Pair doesn't exist
            _pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        }
        uniswapV2Pair = _pair;

        // Set the router of the contract variables
        uniswapV2Router = _uniswapV2Router;
    }
    
     // To recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

       
    function transferForeignToken(address _token, address _to) public onlyOwner returns(bool _sent){
        require(_token != address(this), "Can't let you take all native token");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }
    
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(owner()).transfer(balance);
    }

    function setAddressFee(address _address, bool _enable, uint256 _addressTaxFee, uint256 _addressLiquidityFee) external onlyOwner {
        _addressFees[_address].enable = _enable;
        _addressFees[_address]._taxFee = _addressTaxFee;
        _addressFees[_address]._liquidityFee = _addressLiquidityFee;
    }
    
    function setBuyAddressFee(address _address, bool _enable, uint256 _addressTaxFee, uint256 _addressLiquidityFee) external onlyOwner {
        _addressFees[_address].enable = _enable;
        _addressFees[_address]._buyTaxFee = _addressTaxFee;
        _addressFees[_address]._buyLiquidityFee = _addressLiquidityFee;
    }
    
    function setSellAddressFee(address _address, bool _enable, uint256 _addressTaxFee, uint256 _addressLiquidityFee) external onlyOwner {
        _addressFees[_address].enable = _enable;
        _addressFees[_address]._sellTaxFee = _addressTaxFee;
        _addressFees[_address]._sellLiquidityFee = _addressLiquidityFee;
    }
    
    function launchpoolDistribution(address[] memory recipients, uint256[] memory amounts) external returns (bool) {
            require(recipients.length == amounts.length, "Arrays length mismatch");

            for (uint256 i = 0; i < recipients.length; i++) {
                _transfer(msg.sender, recipients[i], amounts[i]);
            }

            return true;
        }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoBuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"GetBuyBackTimeInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetSwapMinutes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDivisor","type":"uint256"}],"name":"SetBuyBackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinutes","type":"uint256"}],"name":"SetBuyBackMaxTimeForHistories","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"SetBuyBackRangeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinutes","type":"uint256"}],"name":"SetBuyBackTimeInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinutes","type":"uint256"}],"name":"SetSwapMinutes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_addressFees","outputs":[{"internalType":"bool","name":"enable","type":"bool"},{"internalType":"uint256","name":"_taxFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackMaxTimeForHistories","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackRangeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackTimeInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_intervalMinutesForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isAutoBuyBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isEnabledBuyBackAndBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_sellHistories","outputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"bnbAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startTimeForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackSellLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"launchpoolDistribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_addressTaxFee","type":"uint256"},{"internalType":"uint256","name":"_addressLiquidityFee","type":"uint256"}],"name":"setAddressFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_addressTaxFee","type":"uint256"},{"internalType":"uint256","name":"_addressLiquidityFee","type":"uint256"}],"name":"setBuyAddressFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackSellSetLimit","type":"uint256"}],"name":"setBuyBackSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_addressTaxFee","type":"uint256"},{"internalType":"uint256","name":"_addressLiquidityFee","type":"uint256"}],"name":"setSellAddressFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","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":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600380546001600160a01b03191673bfb30a6fb3e1885b6ae5ebe11b63c7157cdcc18e1790556ddead000000000000000000000000608052670de0b6b3a7640000600a819055620000589060001962000573565b620000669060001962000512565b600b55604080518082019091526004808252634145564f60e01b60209092019182526200009691600d916200043c565b50604080518082019091526004808252634145564f60e01b6020909201918252620000c491600e916200043c565b50600f805460ff19908116600917909155600060108190556011819055601281905560138190556014819055601581905560168190556064601755603c6019819055601a829055601c82905569152d02c7e14af6800000601d55633b9aca00601e556c0c9f2c9cd04674edea40000000601f55602180549093166001179092556022556023556138406024556026805462ffffff60a81b191690553480156200016c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526004602081815260409283902093909355815163c45a015560e01b815291517310ed43c718714eb63d5aa57b78b54704e256024e93849363c45a0155938181019391829003018186803b1580156200020e57600080fd5b505afa15801562000223573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002499190620004e2565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029257600080fd5b505afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd9190620004e2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200031657600080fd5b505af11580156200032b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003519190620004e2565b602680546001600160a01b03199081166001600160a01b039384161790915560258054909116918316919091179055600160076000620003996000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600790925290208054909116600117905542601855620003e53390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200042d91815260200190565b60405180910390a35062000594565b8280546200044a9062000536565b90600052602060002090601f0160209004810192826200046e5760008555620004b9565b82601f106200048957805160ff1916838001178555620004b9565b82800160010185558215620004b9579182015b82811115620004b95782518255916020019190600101906200049c565b50620004c7929150620004cb565b5090565b5b80821115620004c75760008155600101620004cc565b600060208284031215620004f4578081fd5b81516001600160a01b03811681146200050b578182fd5b9392505050565b6000828210156200053157634e487b7160e01b81526011600452602481fd5b500390565b600181811c908216806200054b57607f821691505b602082108114156200056d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200058f57634e487b7160e01b81526012600452602481fd5b500690565b60805160601c614561620005ba600039600081816105690152613a0d01526145616000f3fe60806040526004361061039d5760003560e01c8063053bfcd1146103a9578063061c82d0146103cb57806306fdde03146103eb57806307efbfdc14610416578063095ea7b31461042b5780630f9b10e91461045b57806313114a9d14610475578063137ae83e146104945780631694505e146104a957806318160ddd146104d65780631908226e146104eb578063200a692d14610501578063239a093a1461051757806323b872dd1461053757806327c8f8351461055757806329370cc61461058b5780632d838119146105ab5780632deb50fb146105cb578063313ce567146106005780633685d4191461062257806339509351146106425780633b124fe7146106625780633bd5d17314610678578063437823ec146106985780634549b039146106b85780634906b560146106d857806349bd5a5e146106f85780634a74bb02146107185780635134f6ab1461073957806352390c021461074e5780635342acb41461076e578063535acb7f146107a7578063557ed1ba146107c75780635881f3ef146107da5780635fa9ce3a146107fa578063602bc62b146108105780636053a0e31461082557806365be043814610846578063690c22ca1461085c5780636ac9a870146108725780636bc87c3a146108925780637088fb7f146108a85780637090d9ae146108bd57806370a08231146108d3578063715018a6146108f35780637b5a931a146109085780637d0017321461091d5780637d1db4a5146109b057806380c12445146109c65780638366e79a146109dc57806388f82020146109fc5780638da5cb5b14610a355780638ee88c5314610a4a578063906e9dd014610a6a57806395d89b4114610a8a5780639f39e4c114610a9f578063a073d37f14610ab4578063a457c2d714610ac9578063a5ece94114610ae9578063a69df4b514610b09578063a9059cbb14610b1e578063ac7a2c9814610b3e578063afabc8c614610b5e578063b0cb81f114610b7e578063b14869fb14610b9e578063baf9035014610bbe578063be55477114610bde578063c49b9a8014610bfe578063c4a9baed14610c1e578063d5a3eb5014610c3e578063d6b513cf14610c5f578063dc44b6a014610c75578063dd46706414610c8b578063dd62ed3e14610cab578063e3df003414610cf1578063e79b032214610d11578063ea2f0b3714610d31578063ec28438a14610d51578063efcc52de14610d71578063f2fde38b14610d87578063faccd1d714610da7578063fb0ecfa414610dbd57600080fd5b366103a457005b600080fd5b3480156103b557600080fd5b506103c96103c436600461413f565b610ddd565b005b3480156103d757600080fd5b506103c96103e636600461413f565b610e21565b3480156103f757600080fd5b50610400610e50565b60405161040d919061425a565b60405180910390f35b34801561042257600080fd5b506103c9610ee2565b34801561043757600080fd5b5061044b610446366004613f88565b610f2f565b604051901515815260200161040d565b34801561046757600080fd5b5060215461044b9060ff1681565b34801561048157600080fd5b50600c545b60405190815260200161040d565b3480156104a057600080fd5b50610486610f46565b3480156104b557600080fd5b506025546104c9906001600160a01b031681565b60405161040d91906141f7565b3480156104e257600080fd5b50600a54610486565b3480156104f757600080fd5b50610486601f5481565b34801561050d57600080fd5b5061048660165481565b34801561052357600080fd5b506103c961053236600461413f565b610f5c565b34801561054357600080fd5b5061044b610552366004613f03565b610feb565b34801561056357600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b34801561059757600080fd5b506103c96105a6366004614107565b611054565b3480156105b757600080fd5b506104866105c636600461413f565b6110d4565b3480156105d757600080fd5b506105eb6105e636600461413f565b611158565b6040805192835260208301919091520161040d565b34801561060c57600080fd5b50600f5460405160ff909116815260200161040d565b34801561062e57600080fd5b506103c961063d366004613e93565b611186565b34801561064e57600080fd5b5061044b61065d366004613f88565b61136f565b34801561066e57600080fd5b5061048660105481565b34801561068457600080fd5b506103c961069336600461413f565b6113a5565b3480156106a457600080fd5b506103c96106b3366004613e93565b61148f565b3480156106c457600080fd5b506104866106d336600461416f565b6114dd565b3480156106e457600080fd5b506103c96106f3366004613f43565b61156a565b34801561070457600080fd5b506026546104c9906001600160a01b031681565b34801561072457600080fd5b5060265461044b90600160a81b900460ff1681565b34801561074557600080fd5b506103c96115c8565b34801561075a57600080fd5b506103c9610769366004613e93565b611616565b34801561077a57600080fd5b5061044b610789366004613e93565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107b357600080fd5b506103c96107c236600461413f565b611767565b3480156107d357600080fd5b5042610486565b3480156107e657600080fd5b506104c96107f5366004613e93565b611796565b34801561080657600080fd5b5061048660195481565b34801561081c57600080fd5b50600254610486565b34801561083157600080fd5b5060265461044b90600160b01b900460ff1681565b34801561085257600080fd5b50610486601a5481565b34801561086857600080fd5b5061048660185481565b34801561087e57600080fd5b506103c961088d366004614193565b611acb565b34801561089e57600080fd5b5061048660125481565b3480156108b457600080fd5b506103c9611b00565b3480156108c957600080fd5b5061048660245481565b3480156108df57600080fd5b506104866108ee366004613e93565b611b6b565b3480156108ff57600080fd5b506103c9611bca565b34801561091457600080fd5b50601f54610486565b34801561092957600080fd5b50610979610938366004613e93565b601b60205260009081526040902080546001820154600283015460038401546004850154600586015460069096015460ff9095169593949293919290919087565b6040805197151588526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161040d565b3480156109bc57600080fd5b50610486601d5481565b3480156109d257600080fd5b5061048660235481565b3480156109e857600080fd5b5061044b6109f7366004613ecb565b611c2c565b348015610a0857600080fd5b5061044b610a17366004613e93565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610a4157600080fd5b506104c9611dc9565b348015610a5657600080fd5b506103c9610a6536600461413f565b611dd8565b348015610a7657600080fd5b506103c9610a85366004613e93565b611e07565b348015610a9657600080fd5b50610400611e53565b348015610aab57600080fd5b50610486611e62565b348015610ac057600080fd5b50601e54610486565b348015610ad557600080fd5b5061044b610ae4366004613f88565b611e73565b348015610af557600080fd5b506003546104c9906001600160a01b031681565b348015610b1557600080fd5b506103c9611ec2565b348015610b2a57600080fd5b5061044b610b39366004613f88565b611fc8565b348015610b4a57600080fd5b506103c9610b5936600461413f565b611fd5565b348015610b6a57600080fd5b506103c9610b79366004613f43565b612010565b348015610b8a57600080fd5b506103c9610b9936600461413f565b61206e565b348015610baa57600080fd5b506103c9610bb936600461413f565b61209d565b348015610bca57600080fd5b506103c9610bd936600461413f565b6120cc565b348015610bea57600080fd5b5061044b610bf9366004613fb3565b612107565b348015610c0a57600080fd5b506103c9610c19366004614107565b6121ca565b348015610c2a57600080fd5b506103c9610c39366004613f43565b61223f565b348015610c4a57600080fd5b5060265461044b90600160b81b900460ff1681565b348015610c6b57600080fd5b50610486601c5481565b348015610c8157600080fd5b5061048660155481565b348015610c9757600080fd5b506103c9610ca636600461413f565b61229d565b348015610cb757600080fd5b50610486610cc6366004613ecb565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610cfd57600080fd5b506103c9610d0c366004614107565b612322565b348015610d1d57600080fd5b506103c9610d2c36600461413f565b61238e565b348015610d3d57600080fd5b506103c9610d4c366004613e93565b6123bd565b348015610d5d57600080fd5b506103c9610d6c36600461413f565b612408565b348015610d7d57600080fd5b5061048660145481565b348015610d9357600080fd5b506103c9610da2366004613e93565b612437565b348015610db357600080fd5b5061048660225481565b348015610dc957600080fd5b506103c9610dd8366004614193565b61250f565b6000546001600160a01b03163314610e105760405162461bcd60e51b8152600401610e07906142ad565b60405180910390fd5b610e1b81603c6143b6565b60245550565b6000546001600160a01b03163314610e4b5760405162461bcd60e51b8152600401610e07906142ad565b601055565b6060600d8054610e5f906143ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8b906143ec565b8015610ed85780601f10610ead57610100808354040283529160200191610ed8565b820191906000526020600020905b815481529060010190602001808311610ebb57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f0c5760405162461bcd60e51b8152600401610e07906142ad565b610f1660016121ca565b6002601055600a60125568a2a15d09519be00000601d55565b6000610f3c338484612544565b5060015b92915050565b601954600090610f5790603c612668565b905090565b6000546001600160a01b03163314610f865760405162461bcd60e51b8152600401610e07906142ad565b6064811115610fe65760405162461bcd60e51b815260206004820152602660248201527f5468652076616c7565206d757374206e6f74206265206c61726765722074686160448201526537101898181760d11b6064820152608401610e07565b601a55565b6000610ff88484846126a7565b61104a8433611045856040518060600160405280602881526020016144bf602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612d3a565b612544565b5060019392505050565b6000546001600160a01b0316331461107e5760405162461bcd60e51b8152600401610e07906142ad565b6026805460ff60b01b1916600160b01b831515021790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906110c990831515815260200190565b60405180910390a150565b6000600b5482111561113b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e07565b6000611145612d74565b90506111518382612668565b9392505050565b6020818154811061116857600080fd5b60009182526020909120600290910201805460019091015490915082565b6000546001600160a01b031633146111b05760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03811660009081526008602052604090205460ff166112125760405162461bcd60e51b81526020600482015260176024820152761058d8dbdd5b9d081a5cc81b9bdd08195e18db1d591959604a1b6044820152606401610e07565b60005b60095481101561136b57816001600160a01b03166009828154811061124a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156113595760098054611275906001906143d5565b8154811061129357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b0390921691839081106112cd57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff19169055600980548061133357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061136381614427565b915050611215565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610f3c9185906110459086612d97565b3360008181526008602052604090205460ff161561141a5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610e07565b600061142583612df4565b505050506001600160a01b03841660009081526004602052604090205491925061145191905082612e43565b6001600160a01b038316600090815260046020526040902055600b546114779082612e43565b600b55600c546114879084612d97565b600c55505050565b6000546001600160a01b031633146114b95760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a548311156115315760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610e07565b8161155057600061154184612df4565b50939550610f40945050505050565b600061155b84612df4565b50929550610f40945050505050565b6000546001600160a01b031633146115945760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600582015560060155565b6000546001600160a01b031633146115f25760405162461bcd60e51b8152600401610e07906142ad565b6115fc60006121ca565b6000601081905560125569d3c21bcecceda1000000601d55565b6000546001600160a01b031633146116405760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03811660009081526008602052604090205460ff16156116a75760405162461bcd60e51b815260206004820152601b60248201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b6044820152606401610e07565b6001600160a01b03811660009081526004602052604090205415611701576001600160a01b0381166000908152600460205260409020546116e7906110d4565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146117915760405162461bcd60e51b8152600401610e07906142ad565b601f55565b600080546001600160a01b031633146117c15760405162461bcd60e51b8152600401610e07906142ad565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ff57600080fd5b505afa158015611813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118379190613eaf565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561187f57600080fd5b505afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190613eaf565b6040518363ffffffff1660e01b81526004016118d492919061420b565b60206040518083038186803b1580156118ec57600080fd5b505afa158015611900573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119249190613eaf565b91506001600160a01b038216611a9757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190613eaf565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ed57600080fd5b505afa158015611a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a259190613eaf565b6040518363ffffffff1660e01b8152600401611a4292919061420b565b602060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a949190613eaf565b91505b602680546001600160a01b038085166001600160a01b03199283161790925560258054939092169216919091179055919050565b6000546001600160a01b03163314611af55760405162461bcd60e51b8152600401610e07906142ad565b601691909155601755565b6000546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610e07906142ad565b47611b33611dc9565b6001600160a01b03166108fc829081150290604051600060405180830381858888f1935050505015801561136b573d6000803e3d6000fd5b6001600160a01b03811660009081526008602052604081205460ff1615611ba857506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610f40906110d4565b6000546001600160a01b03163314611bf45760405162461bcd60e51b8152600401610e07906142ad565b600080546040516001600160a01b03909116906000805160206144e7833981519152908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611c575760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b038316301415611cbc5760405162461bcd60e51b815260206004820152602360248201527f43616e2774206c657420796f752074616b6520616c6c206e617469766520746f60448201526235b2b760e91b6064820152608401610e07565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190611ceb9030906004016141f7565b60206040518083038186803b158015611d0357600080fd5b505afa158015611d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3b9190614157565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611d8957600080fd5b505af1158015611d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc19190614123565b949350505050565b6000546001600160a01b031690565b6000546001600160a01b03163314611e025760405162461bcd60e51b8152600401610e07906142ad565b601255565b6000546001600160a01b03163314611e315760405162461bcd60e51b8152600401610e07906142ad565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e8054610e5f906143ec565b602354600090610f5790603c612668565b6000610f3c338461104585604051806060016040528060258152602001614507602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612d3a565b6001546001600160a01b03163314611f285760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610e07565b6002544211611f795760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610e07565b600154600080546040516001600160a01b0393841693909116916000805160206144e783398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610f3c3384846126a7565b6000546001600160a01b03163314611fff5760405162461bcd60e51b8152600401610e07906142ad565b61200a81603c6143b6565b60235550565b6000546001600160a01b0316331461203a5760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600382015560040155565b6000546001600160a01b031633146120985760405162461bcd60e51b8152600401610e07906142ad565b601c55565b6000546001600160a01b031633146120c75760405162461bcd60e51b8152600401610e07906142ad565b601e55565b6000546001600160a01b031633146120f65760405162461bcd60e51b8152600401610e07906142ad565b61210181603c6143b6565b60195550565b600081518351146121535760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610e07565b60005b835181101561104a576121b83385838151811061218357634e487b7160e01b600052603260045260246000fd5b60200260200101518584815181106121ab57634e487b7160e01b600052603260045260246000fd5b60200260200101516126a7565b806121c281614427565b915050612156565b6000546001600160a01b031633146121f45760405162461bcd60e51b8152600401610e07906142ad565b6026805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906110c990831515815260200190565b6000546001600160a01b031633146122695760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600182015560020155565b6000546001600160a01b031633146122c75760405162461bcd60e51b8152600401610e07906142ad565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556122f6814261438a565b600255600080546040516001600160a01b03909116906000805160206144e7833981519152908390a350565b6000546001600160a01b0316331461234c5760405162461bcd60e51b8152600401610e07906142ad565b6021805460ff19168215151790556040517fa53c6be1202d17d11e250c717d12c9ab9ccb8f62ee9f34c8b8e2173e3d9c2c03906110c990831515815260200190565b6000546001600160a01b031633146123b85760405162461bcd60e51b8152600401610e07906142ad565b602255565b6000546001600160a01b031633146123e75760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146124325760405162461bcd60e51b8152600401610e07906142ad565b601d55565b6000546001600160a01b031633146124615760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b0381166124c65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e07565b600080546040516001600160a01b03808516939216916000805160206144e783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125395760405162461bcd60e51b8152600401610e07906142ad565b601491909155601555565b6001600160a01b0383166125a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e07565b6001600160a01b0382166126075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e07565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061115183836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612e85565b6001600160a01b03831661270b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e07565b6001600160a01b03821661276d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e07565b600081116127cf5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e07565b6127d7611dc9565b6001600160a01b0316836001600160a01b03161415801561281157506127fb611dc9565b6001600160a01b0316826001600160a01b031614155b1561287957601d548111156128795760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e07565b600061288430611b6b565b601e54602654919250821015906001600160a01b0385811691161480156128c057506026546000906128be906001600160a01b0316611b6b565b115b1561294b5760408051808201909152600060208201524281526128e284612eb3565b6020828101918252805460018101825560009190915291517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb600290930292830155517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc909101555b602654600160a01b900460ff1615801561296e5750602654600160a81b900460ff165b801561298f575060265460009061298d906001600160a01b0316611b6b565b115b15612b8e576026546001600160a01b0385811691161415612b8e578080156129c65750426019546018546129c3919061438a565b11155b156129dd5742601855601e5491506129dd82613073565b602654600160b01b900460ff1615612b8e57601f5460215447919060ff1615612aff5760008060235442612a1191906143d5565b90506000805b602054811015612ac1578260208281548110612a4357634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016000015410612aaf57612a9f60208281548110612a7e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016001015485612d9790919063ffffffff16565b9350612aac82600161438a565b91505b80612ab981614427565b915050612a17565b50600081118015612ad457506000602254115b15612af357602254612af090612aea8584612668565b90612668565b93505b612afb6130de565b5050505b6000612b1b6064612aea601a548561329f90919063ffffffff16565b90506000612b2982846143d5565b612b3490600161438a565b6040805142602082015244918101919091526060016040516020818303038152906040528051906020012060001c612b6c9190614442565b612b76908361438a565b905080841115612b8957612b898161331e565b505050505b6001600160a01b03851660009081526007602052604090205460019060ff1680612bd057506001600160a01b03851660009081526007602052604090205460ff165b15612bdd57506000612d26565b6026546001600160a01b0387811691161415612c0857612bfb613350565b6014546010556015546012555b6026546001600160a01b0386811691161415612c3357612c26613350565b6016546010556017546012555b6001600160a01b0386166000908152601b602052604090205460ff1615612cbf57612c5c613350565b6001600160a01b038087166000908152601b6020526040902060018101546010556002015460125560265486821691161415612cba576001600160a01b0386166000908152601b602052604090206005810154601055600601546012555b612d26565b6001600160a01b0385166000908152601b602052604090205460ff1615612d2657612ce8613350565b6026546001600160a01b0387811691161415612d26576001600160a01b0385166000908152601b602052604090206003810154601055600401546012555b612d328686868461337e565b505050505050565b60008184841115612d5e5760405162461bcd60e51b8152600401610e07919061425a565b506000612d6b84866143d5565b95945050505050565b6000806000612d816134a3565b9092509050612d908282612668565b9250505090565b600080612da4838561438a565b9050838110156111515760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610e07565b6000806000806000806000806000612e0b8a61365d565b9250925092506000806000612e298d8686612e24612d74565b61369f565b919f909e50909c50959a5093985091965092945050505050565b600061115183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d3a565b60008183612ea65760405162461bcd60e51b8152600401610e07919061425a565b506000612d6b84866143a2565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110612efa57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f4e57600080fd5b505afa158015612f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f869190613eaf565b81600181518110612fa757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255460405163d06ca61f60e01b8152600092919091169063d06ca61f90612feb90879086906004016142e2565b60006040518083038186803b15801561300357600080fd5b505afa158015613017573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261303f9190810190614075565b90508060018151811061306257634e487b7160e01b600052603260045260246000fd5b602002602001015192505050919050565b6026805460ff60a01b1916600160a01b17905547613090826136ef565b600061309c4783612e43565b600354601c549192506130cc916001600160a01b03909116906130c790606490612aea90869061329f565b6138ad565b50506026805460ff60a01b1916905550565b600080602454426130ef91906143d5565b905060005b60205481101561322b57816020828154811061312057634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016000015410613219576020818154811061315857634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600001546020848154811061318b57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000181905550602081815481106131c157634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010154602084815481106131f457634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010181905550826001613216919061438a565b92505b8061322381614427565b9150506130f4565b5060205460009061323d9084906143d5565b905060005b8181101561329957602080548061326957634e487b7160e01b600052603160045260246000fd5b6000828152602081206002600019909301928302018181556001015590558061329181614427565b915050613242565b50505050565b6000826132ae57506000610f40565b60006132ba83856143b6565b9050826132c785836143a2565b146111515760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e07565b6026805460ff60a01b1916600160a01b179055801561334057613340816138e8565b506026805460ff60a01b19169055565b6010541580156133605750601254155b1561336757565b601080546011556012805460135560009182905555565b8061338b5761338b613350565b6001600160a01b03841660009081526008602052604090205460ff1680156133cc57506001600160a01b03831660009081526008602052604090205460ff16155b156133e1576133dc848484613aba565b61348d565b6001600160a01b03841660009081526008602052604090205460ff1615801561342257506001600160a01b03831660009081526008602052604090205460ff165b15613432576133dc848484613be0565b6001600160a01b03841660009081526008602052604090205460ff16801561347257506001600160a01b03831660009081526008602052604090205460ff165b15613482576133dc848484613c89565b61348d848484613cfc565b8061329957613299601154601055601354601255565b600b54600a546000918291825b60095481101561362d578260046000600984815481106134e057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613559575081600560006009848154811061353257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561356f57600b54600a54945094505050509091565b6135c3600460006009848154811061359757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612e43565b925061361960056000600984815481106135ed57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612e43565b91508061362581614427565b9150506134b0565b50600a54600b5461363d91612668565b82101561365457600b54600a549350935050509091565b90939092509050565b60008060008061366c85613d40565b9050600061367986613d5c565b905060006136918261368b8986612e43565b90612e43565b979296509094509092505050565b60008080806136ae888661329f565b905060006136bc888761329f565b905060006136ca888861329f565b905060006136dc8261368b8686612e43565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061373257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561378657600080fd5b505afa15801561379a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137be9190613eaf565b816001815181106137df57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526025546138059130911684612544565b60255460405163791ac94760e01b81526001600160a01b039091169063791ac9479061383e9085906000908690309042906004016142fb565b600060405180830381600087803b15801561385857600080fd5b505af115801561386c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516138a19291906142e2565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156138e3573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683375050602554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561394d57600080fd5b505afa158015613961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139859190613eaf565b816000815181106139a657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106139e857634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526025541663b6f9de95836000847f0000000000000000000000000000000000000000000000000000000000000000613a384261012c612d97565b6040518663ffffffff1660e01b8152600401613a579493929190614225565b6000604051808303818588803b158015613a7057600080fd5b505af1158015613a84573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516138a19291906142e2565b600080600080600080613acc87612df4565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613afe9088612e43565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613b2d9087612e43565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613b5c9086612d97565b6001600160a01b038916600090815260046020526040902055613b7e81613d78565b613b888483613e00565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bcd91815260200190565b60405180910390a3505050505050505050565b600080600080600080613bf287612df4565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613c249087612e43565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613c5a9084612d97565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613b5c9086612d97565b600080600080600080613c9b87612df4565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613ccd9088612e43565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613c249087612e43565b600080600080600080613d0e87612df4565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613b2d9087612e43565b6000610f406064612aea6010548561329f90919063ffffffff16565b6000610f406064612aea6012548561329f90919063ffffffff16565b6000613d82612d74565b90506000613d90838361329f565b30600090815260046020526040902054909150613dad9082612d97565b3060009081526004602090815260408083209390935560089052205460ff16156138e35730600090815260056020526040902054613deb9084612d97565b30600090815260056020526040902055505050565b600b54613e0d9083612e43565b600b55600c54613e1d9082612d97565b600c555050565b600082601f830112613e34578081fd5b81356020613e49613e4483614367565b614337565b80838252828201915082860187848660051b8901011115613e68578586fd5b855b85811015613e8657813584529284019290840190600101613e6a565b5090979650505050505050565b600060208284031215613ea4578081fd5b813561115181614498565b600060208284031215613ec0578081fd5b815161115181614498565b60008060408385031215613edd578081fd5b8235613ee881614498565b91506020830135613ef881614498565b809150509250929050565b600080600060608486031215613f17578081fd5b8335613f2281614498565b92506020840135613f3281614498565b929592945050506040919091013590565b60008060008060808587031215613f58578081fd5b8435613f6381614498565b93506020850135613f73816144b0565b93969395505050506040820135916060013590565b60008060408385031215613f9a578182fd5b8235613fa581614498565b946020939093013593505050565b60008060408385031215613fc5578182fd5b82356001600160401b0380821115613fdb578384fd5b818501915085601f830112613fee578384fd5b81356020613ffe613e4483614367565b8083825282820191508286018a848660051b890101111561401d578889fd5b8896505b8487101561404857803561403481614498565b835260019690960195918301918301614021565b509650508601359250508082111561405e578283fd5b5061406b85828601613e24565b9150509250929050565b60006020808385031215614087578182fd5b82516001600160401b0381111561409c578283fd5b8301601f810185136140ac578283fd5b80516140ba613e4482614367565b80828252848201915084840188868560051b87010111156140d9578687fd5b8694505b838510156140fb5780518352600194909401939185019185016140dd565b50979650505050505050565b600060208284031215614118578081fd5b8135611151816144b0565b600060208284031215614134578081fd5b8151611151816144b0565b600060208284031215614150578081fd5b5035919050565b600060208284031215614168578081fd5b5051919050565b60008060408385031215614181578182fd5b823591506020830135613ef8816144b0565b600080604083850312156141a5578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156141ec5781516001600160a01b0316875295820195908201906001016141c7565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b84815260806020820152600061423e60808301866141b4565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b818110156142865785810183015185820160400152820161426a565b818111156142975783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000611dc160408301846141b4565b85815284602082015260a06040820152600061431a60a08301866141b4565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f191681016001600160401b038111828210171561435f5761435f614482565b604052919050565b60006001600160401b0382111561438057614380614482565b5060051b60200190565b6000821982111561439d5761439d614456565b500190565b6000826143b1576143b161446c565b500490565b60008160001904831182151516156143d0576143d0614456565b500290565b6000828210156143e7576143e7614456565b500390565b600181811c9082168061440057607f821691505b6020821081141561442157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561443b5761443b614456565b5060010190565b6000826144515761445161446c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146144ad57600080fd5b50565b80151581146144ad57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a8fc6a2dd148118c5bdb63924f16cc25ebadefe7919fdb1f5881d94d98c25a8b64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061039d5760003560e01c8063053bfcd1146103a9578063061c82d0146103cb57806306fdde03146103eb57806307efbfdc14610416578063095ea7b31461042b5780630f9b10e91461045b57806313114a9d14610475578063137ae83e146104945780631694505e146104a957806318160ddd146104d65780631908226e146104eb578063200a692d14610501578063239a093a1461051757806323b872dd1461053757806327c8f8351461055757806329370cc61461058b5780632d838119146105ab5780632deb50fb146105cb578063313ce567146106005780633685d4191461062257806339509351146106425780633b124fe7146106625780633bd5d17314610678578063437823ec146106985780634549b039146106b85780634906b560146106d857806349bd5a5e146106f85780634a74bb02146107185780635134f6ab1461073957806352390c021461074e5780635342acb41461076e578063535acb7f146107a7578063557ed1ba146107c75780635881f3ef146107da5780635fa9ce3a146107fa578063602bc62b146108105780636053a0e31461082557806365be043814610846578063690c22ca1461085c5780636ac9a870146108725780636bc87c3a146108925780637088fb7f146108a85780637090d9ae146108bd57806370a08231146108d3578063715018a6146108f35780637b5a931a146109085780637d0017321461091d5780637d1db4a5146109b057806380c12445146109c65780638366e79a146109dc57806388f82020146109fc5780638da5cb5b14610a355780638ee88c5314610a4a578063906e9dd014610a6a57806395d89b4114610a8a5780639f39e4c114610a9f578063a073d37f14610ab4578063a457c2d714610ac9578063a5ece94114610ae9578063a69df4b514610b09578063a9059cbb14610b1e578063ac7a2c9814610b3e578063afabc8c614610b5e578063b0cb81f114610b7e578063b14869fb14610b9e578063baf9035014610bbe578063be55477114610bde578063c49b9a8014610bfe578063c4a9baed14610c1e578063d5a3eb5014610c3e578063d6b513cf14610c5f578063dc44b6a014610c75578063dd46706414610c8b578063dd62ed3e14610cab578063e3df003414610cf1578063e79b032214610d11578063ea2f0b3714610d31578063ec28438a14610d51578063efcc52de14610d71578063f2fde38b14610d87578063faccd1d714610da7578063fb0ecfa414610dbd57600080fd5b366103a457005b600080fd5b3480156103b557600080fd5b506103c96103c436600461413f565b610ddd565b005b3480156103d757600080fd5b506103c96103e636600461413f565b610e21565b3480156103f757600080fd5b50610400610e50565b60405161040d919061425a565b60405180910390f35b34801561042257600080fd5b506103c9610ee2565b34801561043757600080fd5b5061044b610446366004613f88565b610f2f565b604051901515815260200161040d565b34801561046757600080fd5b5060215461044b9060ff1681565b34801561048157600080fd5b50600c545b60405190815260200161040d565b3480156104a057600080fd5b50610486610f46565b3480156104b557600080fd5b506025546104c9906001600160a01b031681565b60405161040d91906141f7565b3480156104e257600080fd5b50600a54610486565b3480156104f757600080fd5b50610486601f5481565b34801561050d57600080fd5b5061048660165481565b34801561052357600080fd5b506103c961053236600461413f565b610f5c565b34801561054357600080fd5b5061044b610552366004613f03565b610feb565b34801561056357600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000dead81565b34801561059757600080fd5b506103c96105a6366004614107565b611054565b3480156105b757600080fd5b506104866105c636600461413f565b6110d4565b3480156105d757600080fd5b506105eb6105e636600461413f565b611158565b6040805192835260208301919091520161040d565b34801561060c57600080fd5b50600f5460405160ff909116815260200161040d565b34801561062e57600080fd5b506103c961063d366004613e93565b611186565b34801561064e57600080fd5b5061044b61065d366004613f88565b61136f565b34801561066e57600080fd5b5061048660105481565b34801561068457600080fd5b506103c961069336600461413f565b6113a5565b3480156106a457600080fd5b506103c96106b3366004613e93565b61148f565b3480156106c457600080fd5b506104866106d336600461416f565b6114dd565b3480156106e457600080fd5b506103c96106f3366004613f43565b61156a565b34801561070457600080fd5b506026546104c9906001600160a01b031681565b34801561072457600080fd5b5060265461044b90600160a81b900460ff1681565b34801561074557600080fd5b506103c96115c8565b34801561075a57600080fd5b506103c9610769366004613e93565b611616565b34801561077a57600080fd5b5061044b610789366004613e93565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107b357600080fd5b506103c96107c236600461413f565b611767565b3480156107d357600080fd5b5042610486565b3480156107e657600080fd5b506104c96107f5366004613e93565b611796565b34801561080657600080fd5b5061048660195481565b34801561081c57600080fd5b50600254610486565b34801561083157600080fd5b5060265461044b90600160b01b900460ff1681565b34801561085257600080fd5b50610486601a5481565b34801561086857600080fd5b5061048660185481565b34801561087e57600080fd5b506103c961088d366004614193565b611acb565b34801561089e57600080fd5b5061048660125481565b3480156108b457600080fd5b506103c9611b00565b3480156108c957600080fd5b5061048660245481565b3480156108df57600080fd5b506104866108ee366004613e93565b611b6b565b3480156108ff57600080fd5b506103c9611bca565b34801561091457600080fd5b50601f54610486565b34801561092957600080fd5b50610979610938366004613e93565b601b60205260009081526040902080546001820154600283015460038401546004850154600586015460069096015460ff9095169593949293919290919087565b6040805197151588526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161040d565b3480156109bc57600080fd5b50610486601d5481565b3480156109d257600080fd5b5061048660235481565b3480156109e857600080fd5b5061044b6109f7366004613ecb565b611c2c565b348015610a0857600080fd5b5061044b610a17366004613e93565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610a4157600080fd5b506104c9611dc9565b348015610a5657600080fd5b506103c9610a6536600461413f565b611dd8565b348015610a7657600080fd5b506103c9610a85366004613e93565b611e07565b348015610a9657600080fd5b50610400611e53565b348015610aab57600080fd5b50610486611e62565b348015610ac057600080fd5b50601e54610486565b348015610ad557600080fd5b5061044b610ae4366004613f88565b611e73565b348015610af557600080fd5b506003546104c9906001600160a01b031681565b348015610b1557600080fd5b506103c9611ec2565b348015610b2a57600080fd5b5061044b610b39366004613f88565b611fc8565b348015610b4a57600080fd5b506103c9610b5936600461413f565b611fd5565b348015610b6a57600080fd5b506103c9610b79366004613f43565b612010565b348015610b8a57600080fd5b506103c9610b9936600461413f565b61206e565b348015610baa57600080fd5b506103c9610bb936600461413f565b61209d565b348015610bca57600080fd5b506103c9610bd936600461413f565b6120cc565b348015610bea57600080fd5b5061044b610bf9366004613fb3565b612107565b348015610c0a57600080fd5b506103c9610c19366004614107565b6121ca565b348015610c2a57600080fd5b506103c9610c39366004613f43565b61223f565b348015610c4a57600080fd5b5060265461044b90600160b81b900460ff1681565b348015610c6b57600080fd5b50610486601c5481565b348015610c8157600080fd5b5061048660155481565b348015610c9757600080fd5b506103c9610ca636600461413f565b61229d565b348015610cb757600080fd5b50610486610cc6366004613ecb565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610cfd57600080fd5b506103c9610d0c366004614107565b612322565b348015610d1d57600080fd5b506103c9610d2c36600461413f565b61238e565b348015610d3d57600080fd5b506103c9610d4c366004613e93565b6123bd565b348015610d5d57600080fd5b506103c9610d6c36600461413f565b612408565b348015610d7d57600080fd5b5061048660145481565b348015610d9357600080fd5b506103c9610da2366004613e93565b612437565b348015610db357600080fd5b5061048660225481565b348015610dc957600080fd5b506103c9610dd8366004614193565b61250f565b6000546001600160a01b03163314610e105760405162461bcd60e51b8152600401610e07906142ad565b60405180910390fd5b610e1b81603c6143b6565b60245550565b6000546001600160a01b03163314610e4b5760405162461bcd60e51b8152600401610e07906142ad565b601055565b6060600d8054610e5f906143ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8b906143ec565b8015610ed85780601f10610ead57610100808354040283529160200191610ed8565b820191906000526020600020905b815481529060010190602001808311610ebb57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f0c5760405162461bcd60e51b8152600401610e07906142ad565b610f1660016121ca565b6002601055600a60125568a2a15d09519be00000601d55565b6000610f3c338484612544565b5060015b92915050565b601954600090610f5790603c612668565b905090565b6000546001600160a01b03163314610f865760405162461bcd60e51b8152600401610e07906142ad565b6064811115610fe65760405162461bcd60e51b815260206004820152602660248201527f5468652076616c7565206d757374206e6f74206265206c61726765722074686160448201526537101898181760d11b6064820152608401610e07565b601a55565b6000610ff88484846126a7565b61104a8433611045856040518060600160405280602881526020016144bf602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612d3a565b612544565b5060019392505050565b6000546001600160a01b0316331461107e5760405162461bcd60e51b8152600401610e07906142ad565b6026805460ff60b01b1916600160b01b831515021790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906110c990831515815260200190565b60405180910390a150565b6000600b5482111561113b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e07565b6000611145612d74565b90506111518382612668565b9392505050565b6020818154811061116857600080fd5b60009182526020909120600290910201805460019091015490915082565b6000546001600160a01b031633146111b05760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03811660009081526008602052604090205460ff166112125760405162461bcd60e51b81526020600482015260176024820152761058d8dbdd5b9d081a5cc81b9bdd08195e18db1d591959604a1b6044820152606401610e07565b60005b60095481101561136b57816001600160a01b03166009828154811061124a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156113595760098054611275906001906143d5565b8154811061129357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b0390921691839081106112cd57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff19169055600980548061133357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061136381614427565b915050611215565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610f3c9185906110459086612d97565b3360008181526008602052604090205460ff161561141a5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610e07565b600061142583612df4565b505050506001600160a01b03841660009081526004602052604090205491925061145191905082612e43565b6001600160a01b038316600090815260046020526040902055600b546114779082612e43565b600b55600c546114879084612d97565b600c55505050565b6000546001600160a01b031633146114b95760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a548311156115315760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610e07565b8161155057600061154184612df4565b50939550610f40945050505050565b600061155b84612df4565b50929550610f40945050505050565b6000546001600160a01b031633146115945760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600582015560060155565b6000546001600160a01b031633146115f25760405162461bcd60e51b8152600401610e07906142ad565b6115fc60006121ca565b6000601081905560125569d3c21bcecceda1000000601d55565b6000546001600160a01b031633146116405760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03811660009081526008602052604090205460ff16156116a75760405162461bcd60e51b815260206004820152601b60248201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b6044820152606401610e07565b6001600160a01b03811660009081526004602052604090205415611701576001600160a01b0381166000908152600460205260409020546116e7906110d4565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146117915760405162461bcd60e51b8152600401610e07906142ad565b601f55565b600080546001600160a01b031633146117c15760405162461bcd60e51b8152600401610e07906142ad565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ff57600080fd5b505afa158015611813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118379190613eaf565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561187f57600080fd5b505afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190613eaf565b6040518363ffffffff1660e01b81526004016118d492919061420b565b60206040518083038186803b1580156118ec57600080fd5b505afa158015611900573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119249190613eaf565b91506001600160a01b038216611a9757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190613eaf565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ed57600080fd5b505afa158015611a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a259190613eaf565b6040518363ffffffff1660e01b8152600401611a4292919061420b565b602060405180830381600087803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a949190613eaf565b91505b602680546001600160a01b038085166001600160a01b03199283161790925560258054939092169216919091179055919050565b6000546001600160a01b03163314611af55760405162461bcd60e51b8152600401610e07906142ad565b601691909155601755565b6000546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610e07906142ad565b47611b33611dc9565b6001600160a01b03166108fc829081150290604051600060405180830381858888f1935050505015801561136b573d6000803e3d6000fd5b6001600160a01b03811660009081526008602052604081205460ff1615611ba857506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610f40906110d4565b6000546001600160a01b03163314611bf45760405162461bcd60e51b8152600401610e07906142ad565b600080546040516001600160a01b03909116906000805160206144e7833981519152908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611c575760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b038316301415611cbc5760405162461bcd60e51b815260206004820152602360248201527f43616e2774206c657420796f752074616b6520616c6c206e617469766520746f60448201526235b2b760e91b6064820152608401610e07565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190611ceb9030906004016141f7565b60206040518083038186803b158015611d0357600080fd5b505afa158015611d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3b9190614157565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611d8957600080fd5b505af1158015611d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc19190614123565b949350505050565b6000546001600160a01b031690565b6000546001600160a01b03163314611e025760405162461bcd60e51b8152600401610e07906142ad565b601255565b6000546001600160a01b03163314611e315760405162461bcd60e51b8152600401610e07906142ad565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e8054610e5f906143ec565b602354600090610f5790603c612668565b6000610f3c338461104585604051806060016040528060258152602001614507602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612d3a565b6001546001600160a01b03163314611f285760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610e07565b6002544211611f795760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610e07565b600154600080546040516001600160a01b0393841693909116916000805160206144e783398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610f3c3384846126a7565b6000546001600160a01b03163314611fff5760405162461bcd60e51b8152600401610e07906142ad565b61200a81603c6143b6565b60235550565b6000546001600160a01b0316331461203a5760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600382015560040155565b6000546001600160a01b031633146120985760405162461bcd60e51b8152600401610e07906142ad565b601c55565b6000546001600160a01b031633146120c75760405162461bcd60e51b8152600401610e07906142ad565b601e55565b6000546001600160a01b031633146120f65760405162461bcd60e51b8152600401610e07906142ad565b61210181603c6143b6565b60195550565b600081518351146121535760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610e07565b60005b835181101561104a576121b83385838151811061218357634e487b7160e01b600052603260045260246000fd5b60200260200101518584815181106121ab57634e487b7160e01b600052603260045260246000fd5b60200260200101516126a7565b806121c281614427565b915050612156565b6000546001600160a01b031633146121f45760405162461bcd60e51b8152600401610e07906142ad565b6026805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906110c990831515815260200190565b6000546001600160a01b031633146122695760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03939093166000908152601b60205260409020805460ff1916921515929092178255600182015560020155565b6000546001600160a01b031633146122c75760405162461bcd60e51b8152600401610e07906142ad565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556122f6814261438a565b600255600080546040516001600160a01b03909116906000805160206144e7833981519152908390a350565b6000546001600160a01b0316331461234c5760405162461bcd60e51b8152600401610e07906142ad565b6021805460ff19168215151790556040517fa53c6be1202d17d11e250c717d12c9ab9ccb8f62ee9f34c8b8e2173e3d9c2c03906110c990831515815260200190565b6000546001600160a01b031633146123b85760405162461bcd60e51b8152600401610e07906142ad565b602255565b6000546001600160a01b031633146123e75760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146124325760405162461bcd60e51b8152600401610e07906142ad565b601d55565b6000546001600160a01b031633146124615760405162461bcd60e51b8152600401610e07906142ad565b6001600160a01b0381166124c65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e07565b600080546040516001600160a01b03808516939216916000805160206144e783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125395760405162461bcd60e51b8152600401610e07906142ad565b601491909155601555565b6001600160a01b0383166125a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e07565b6001600160a01b0382166126075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e07565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061115183836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612e85565b6001600160a01b03831661270b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e07565b6001600160a01b03821661276d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e07565b600081116127cf5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e07565b6127d7611dc9565b6001600160a01b0316836001600160a01b03161415801561281157506127fb611dc9565b6001600160a01b0316826001600160a01b031614155b1561287957601d548111156128795760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e07565b600061288430611b6b565b601e54602654919250821015906001600160a01b0385811691161480156128c057506026546000906128be906001600160a01b0316611b6b565b115b1561294b5760408051808201909152600060208201524281526128e284612eb3565b6020828101918252805460018101825560009190915291517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb600290930292830155517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc909101555b602654600160a01b900460ff1615801561296e5750602654600160a81b900460ff165b801561298f575060265460009061298d906001600160a01b0316611b6b565b115b15612b8e576026546001600160a01b0385811691161415612b8e578080156129c65750426019546018546129c3919061438a565b11155b156129dd5742601855601e5491506129dd82613073565b602654600160b01b900460ff1615612b8e57601f5460215447919060ff1615612aff5760008060235442612a1191906143d5565b90506000805b602054811015612ac1578260208281548110612a4357634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016000015410612aaf57612a9f60208281548110612a7e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016001015485612d9790919063ffffffff16565b9350612aac82600161438a565b91505b80612ab981614427565b915050612a17565b50600081118015612ad457506000602254115b15612af357602254612af090612aea8584612668565b90612668565b93505b612afb6130de565b5050505b6000612b1b6064612aea601a548561329f90919063ffffffff16565b90506000612b2982846143d5565b612b3490600161438a565b6040805142602082015244918101919091526060016040516020818303038152906040528051906020012060001c612b6c9190614442565b612b76908361438a565b905080841115612b8957612b898161331e565b505050505b6001600160a01b03851660009081526007602052604090205460019060ff1680612bd057506001600160a01b03851660009081526007602052604090205460ff165b15612bdd57506000612d26565b6026546001600160a01b0387811691161415612c0857612bfb613350565b6014546010556015546012555b6026546001600160a01b0386811691161415612c3357612c26613350565b6016546010556017546012555b6001600160a01b0386166000908152601b602052604090205460ff1615612cbf57612c5c613350565b6001600160a01b038087166000908152601b6020526040902060018101546010556002015460125560265486821691161415612cba576001600160a01b0386166000908152601b602052604090206005810154601055600601546012555b612d26565b6001600160a01b0385166000908152601b602052604090205460ff1615612d2657612ce8613350565b6026546001600160a01b0387811691161415612d26576001600160a01b0385166000908152601b602052604090206003810154601055600401546012555b612d328686868461337e565b505050505050565b60008184841115612d5e5760405162461bcd60e51b8152600401610e07919061425a565b506000612d6b84866143d5565b95945050505050565b6000806000612d816134a3565b9092509050612d908282612668565b9250505090565b600080612da4838561438a565b9050838110156111515760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610e07565b6000806000806000806000806000612e0b8a61365d565b9250925092506000806000612e298d8686612e24612d74565b61369f565b919f909e50909c50959a5093985091965092945050505050565b600061115183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d3a565b60008183612ea65760405162461bcd60e51b8152600401610e07919061425a565b506000612d6b84866143a2565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110612efa57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f4e57600080fd5b505afa158015612f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f869190613eaf565b81600181518110612fa757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255460405163d06ca61f60e01b8152600092919091169063d06ca61f90612feb90879086906004016142e2565b60006040518083038186803b15801561300357600080fd5b505afa158015613017573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261303f9190810190614075565b90508060018151811061306257634e487b7160e01b600052603260045260246000fd5b602002602001015192505050919050565b6026805460ff60a01b1916600160a01b17905547613090826136ef565b600061309c4783612e43565b600354601c549192506130cc916001600160a01b03909116906130c790606490612aea90869061329f565b6138ad565b50506026805460ff60a01b1916905550565b600080602454426130ef91906143d5565b905060005b60205481101561322b57816020828154811061312057634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016000015410613219576020818154811061315857634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600001546020848154811061318b57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000181905550602081815481106131c157634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010154602084815481106131f457634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010181905550826001613216919061438a565b92505b8061322381614427565b9150506130f4565b5060205460009061323d9084906143d5565b905060005b8181101561329957602080548061326957634e487b7160e01b600052603160045260246000fd5b6000828152602081206002600019909301928302018181556001015590558061329181614427565b915050613242565b50505050565b6000826132ae57506000610f40565b60006132ba83856143b6565b9050826132c785836143a2565b146111515760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e07565b6026805460ff60a01b1916600160a01b179055801561334057613340816138e8565b506026805460ff60a01b19169055565b6010541580156133605750601254155b1561336757565b601080546011556012805460135560009182905555565b8061338b5761338b613350565b6001600160a01b03841660009081526008602052604090205460ff1680156133cc57506001600160a01b03831660009081526008602052604090205460ff16155b156133e1576133dc848484613aba565b61348d565b6001600160a01b03841660009081526008602052604090205460ff1615801561342257506001600160a01b03831660009081526008602052604090205460ff165b15613432576133dc848484613be0565b6001600160a01b03841660009081526008602052604090205460ff16801561347257506001600160a01b03831660009081526008602052604090205460ff165b15613482576133dc848484613c89565b61348d848484613cfc565b8061329957613299601154601055601354601255565b600b54600a546000918291825b60095481101561362d578260046000600984815481106134e057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613559575081600560006009848154811061353257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561356f57600b54600a54945094505050509091565b6135c3600460006009848154811061359757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612e43565b925061361960056000600984815481106135ed57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612e43565b91508061362581614427565b9150506134b0565b50600a54600b5461363d91612668565b82101561365457600b54600a549350935050509091565b90939092509050565b60008060008061366c85613d40565b9050600061367986613d5c565b905060006136918261368b8986612e43565b90612e43565b979296509094509092505050565b60008080806136ae888661329f565b905060006136bc888761329f565b905060006136ca888861329f565b905060006136dc8261368b8686612e43565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061373257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561378657600080fd5b505afa15801561379a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137be9190613eaf565b816001815181106137df57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526025546138059130911684612544565b60255460405163791ac94760e01b81526001600160a01b039091169063791ac9479061383e9085906000908690309042906004016142fb565b600060405180830381600087803b15801561385857600080fd5b505af115801561386c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516138a19291906142e2565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156138e3573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683375050602554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561394d57600080fd5b505afa158015613961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139859190613eaf565b816000815181106139a657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106139e857634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526025541663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead613a384261012c612d97565b6040518663ffffffff1660e01b8152600401613a579493929190614225565b6000604051808303818588803b158015613a7057600080fd5b505af1158015613a84573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516138a19291906142e2565b600080600080600080613acc87612df4565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613afe9088612e43565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613b2d9087612e43565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054613b5c9086612d97565b6001600160a01b038916600090815260046020526040902055613b7e81613d78565b613b888483613e00565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bcd91815260200190565b60405180910390a3505050505050505050565b600080600080600080613bf287612df4565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613c249087612e43565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054613c5a9084612d97565b6001600160a01b038916600090815260056020908152604080832093909355600490522054613b5c9086612d97565b600080600080600080613c9b87612df4565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613ccd9088612e43565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054613c249087612e43565b600080600080600080613d0e87612df4565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613b2d9087612e43565b6000610f406064612aea6010548561329f90919063ffffffff16565b6000610f406064612aea6012548561329f90919063ffffffff16565b6000613d82612d74565b90506000613d90838361329f565b30600090815260046020526040902054909150613dad9082612d97565b3060009081526004602090815260408083209390935560089052205460ff16156138e35730600090815260056020526040902054613deb9084612d97565b30600090815260056020526040902055505050565b600b54613e0d9083612e43565b600b55600c54613e1d9082612d97565b600c555050565b600082601f830112613e34578081fd5b81356020613e49613e4483614367565b614337565b80838252828201915082860187848660051b8901011115613e68578586fd5b855b85811015613e8657813584529284019290840190600101613e6a565b5090979650505050505050565b600060208284031215613ea4578081fd5b813561115181614498565b600060208284031215613ec0578081fd5b815161115181614498565b60008060408385031215613edd578081fd5b8235613ee881614498565b91506020830135613ef881614498565b809150509250929050565b600080600060608486031215613f17578081fd5b8335613f2281614498565b92506020840135613f3281614498565b929592945050506040919091013590565b60008060008060808587031215613f58578081fd5b8435613f6381614498565b93506020850135613f73816144b0565b93969395505050506040820135916060013590565b60008060408385031215613f9a578182fd5b8235613fa581614498565b946020939093013593505050565b60008060408385031215613fc5578182fd5b82356001600160401b0380821115613fdb578384fd5b818501915085601f830112613fee578384fd5b81356020613ffe613e4483614367565b8083825282820191508286018a848660051b890101111561401d578889fd5b8896505b8487101561404857803561403481614498565b835260019690960195918301918301614021565b509650508601359250508082111561405e578283fd5b5061406b85828601613e24565b9150509250929050565b60006020808385031215614087578182fd5b82516001600160401b0381111561409c578283fd5b8301601f810185136140ac578283fd5b80516140ba613e4482614367565b80828252848201915084840188868560051b87010111156140d9578687fd5b8694505b838510156140fb5780518352600194909401939185019185016140dd565b50979650505050505050565b600060208284031215614118578081fd5b8135611151816144b0565b600060208284031215614134578081fd5b8151611151816144b0565b600060208284031215614150578081fd5b5035919050565b600060208284031215614168578081fd5b5051919050565b60008060408385031215614181578182fd5b823591506020830135613ef8816144b0565b600080604083850312156141a5578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156141ec5781516001600160a01b0316875295820195908201906001016141c7565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b84815260806020820152600061423e60808301866141b4565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b818110156142865785810183015185820160400152820161426a565b818111156142975783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000611dc160408301846141b4565b85815284602082015260a06040820152600061431a60a08301866141b4565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f191681016001600160401b038111828210171561435f5761435f614482565b604052919050565b60006001600160401b0382111561438057614380614482565b5060051b60200190565b6000821982111561439d5761439d614456565b500190565b6000826143b1576143b161446c565b500490565b60008160001904831182151516156143d0576143d0614456565b500290565b6000828210156143e7576143e7614456565b500390565b600181811c9082168061440057607f821691505b6020821081141561442157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561443b5761443b614456565b5060010190565b6000826144515761445161446c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146144ad57600080fd5b50565b80151581146144ad57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a8fc6a2dd148118c5bdb63924f16cc25ebadefe7919fdb1f5881d94d98c25a8b64736f6c63430008040033

Deployed Bytecode Sourcemap

15149:29424:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38569:149;;;;;;;;;;-1:-1:-1;38569:149:0;;;;;:::i;:::-;;:::i;:::-;;39581:98;;;;;;;;;;-1:-1:-1;39581:98:0;;;;;:::i;:::-;;:::i;19303:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41610:192;;;;;;;;;;;;;:::i;20215:161::-;;;;;;;;;;-1:-1:-1;20215:161:0;;;;;:::i;:::-;;:::i;:::-;;;8608:14:1;;8601:22;8583:41;;8571:2;8556:18;20215:161:0;8538:92:1;17342:33:0;;;;;;;;;;-1:-1:-1;17342:33:0;;;;;;;;21336:87;;;;;;;;;;-1:-1:-1;21405:10:0;;21336:87;;;18542:25:1;;;18530:2;18515:18;21336:87:0;18497:76:1;39319:112:0;;;;;;;;;;;;;:::i;17546:41::-;;;;;;;;;;-1:-1:-1;17546:41:0;;;;-1:-1:-1;;;;;17546:41:0;;;;;;;;;;:::i;19580:95::-;;;;;;;;;;-1:-1:-1;19660:7:0;;19580:95;;17202:44;;;;;;;;;;;;;;;;16719:30;;;;;;;;;;;;;;;;39115:196;;;;;;;;;;-1:-1:-1;39115:196:0;;;;;:::i;:::-;;:::i;20384:313::-;;;;;;;;;;-1:-1:-1;20384:313:0;;;;;:::i;:::-;;:::i;15390:81::-;;;;;;;;;;;;;;;41070:150;;;;;;;;;;-1:-1:-1;41070:150:0;;;;;:::i;:::-;;:::i;22518:253::-;;;;;;;;;;-1:-1:-1;22518:253:0;;;;;:::i;:::-;;:::i;17298:37::-;;;;;;;;;;-1:-1:-1;17298:37:0;;;;;:::i;:::-;;:::i;:::-;;;;19676:25:1;;;19732:2;19717:18;;19710:34;;;;19649:18;17298:37:0;19631:119:1;19489:83:0;;;;;;;;;;-1:-1:-1;19555:9:0;;19489:83;;19555:9;;;;19897:36:1;;19885:2;19870:18;19489:83:0;19852:87:1;23122:475:0;;;;;;;;;;-1:-1:-1;23122:475:0;;;;;:::i;:::-;;:::i;20705:218::-;;;;;;;;;;-1:-1:-1;20705:218:0;;;;;:::i;:::-;;:::i;16443:26::-;;;;;;;;;;;;;;;;21685:377;;;;;;;;;;-1:-1:-1;21685:377:0;;;;;:::i;:::-;;:::i;37290:111::-;;;;;;;;;;-1:-1:-1;37290:111:0;;;;;:::i;:::-;;:::i;22074:436::-;;;;;;;;;;-1:-1:-1;22074:436:0;;;;;:::i;:::-;;:::i;43849:326::-;;;;;;;;;;-1:-1:-1;43849:326:0;;;;;:::i;:::-;;:::i;17594:28::-;;;;;;;;;;-1:-1:-1;17594:28:0;;;;-1:-1:-1;;;;;17594:28:0;;;17663:41;;;;;;;;;;-1:-1:-1;17663:41:0;;;;-1:-1:-1;;;17663:41:0;;;;;;41398:200;;;;;;;;;;;;;:::i;22779:335::-;;;;;;;;;;-1:-1:-1;22779:335:0;;;;;:::i;:::-;;:::i;37155:123::-;;;;;;;;;;-1:-1:-1;37155:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;37243:27:0;37219:4;37243:27;;;:18;:27;;;;;;;;;37155:123;40189:134;;;;;;;;;;-1:-1:-1;40189:134:0;;;;;:::i;:::-;;:::i;6541:90::-;;;;;;;;;;-1:-1:-1;6608:15:0;6541:90;;41948:637;;;;;;;;;;-1:-1:-1;41948:637:0;;;;;:::i;:::-;;:::i;16843:54::-;;;;;;;;;;;;;;;;6439:90;;;;;;;;;;-1:-1:-1;6512:9:0;;6439:90;;17711:34;;;;;;;;;;-1:-1:-1;17711:34:0;;;;-1:-1:-1;;;17711:34:0;;;;;;16906:36;;;;;;;;;;;;;;;;16804:32;;;;;;;;;;;;;;;;39874:175;;;;;;;;;;-1:-1:-1;39874:175:0;;;;;:::i;:::-;;:::i;16530:32::-;;;;;;;;;;;;;;;;43041:139;;;;;;;;;;;;;:::i;17477:60::-;;;;;;;;;;;;;;;;19683:198;;;;;;;;;;-1:-1:-1;19683:198:0;;;;;:::i;:::-;;:::i;6031:148::-;;;;;;;;;;;;;:::i;21567:106::-;;;;;;;;;;-1:-1:-1;21649:16:0;;21567:106;;16975:51;;;;;;;;;;-1:-1:-1;16975:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8969:14:1;;8962:22;8944:41;;9016:2;9001:18;;8994:34;;;;9044:18;;;9037:34;;;;9102:2;9087:18;;9080:34;;;;9145:3;9130:19;;9123:35;9189:3;9174:19;;9167:35;9233:3;9218:19;;9211:35;8931:3;8916:19;16975:51:0;8898:354:1;17083:53:0;;;;;;;;;;;;;;;;17423:47;;;;;;;;;;;;;;;;42702:327;;;;;;;;;;-1:-1:-1;42702:327:0;;;;;:::i;:::-;;:::i;21208:120::-;;;;;;;;;;-1:-1:-1;21208:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21300:20:0;21276:4;21300:20;;;:11;:20;;;;;;;;;21208:120;5806:79;;;;;;;;;;;;;:::i;40061:120::-;;;;;;;;;;-1:-1:-1;40061:120:0;;;;;:::i;:::-;;:::i;40740:139::-;;;;;;;;;;-1:-1:-1;40740:139:0;;;;;:::i;:::-;;:::i;19394:87::-;;;;;;;;;;;;;:::i;38847:117::-;;;;;;;;;;;;;:::i;21435:120::-;;;;;;;;;;-1:-1:-1;21524:23:0;;21435:120;;20931:269;;;;;;;;;;-1:-1:-1;20931:269:0;;;;;:::i;:::-;;:::i;15269:93::-;;;;;;;;;;-1:-1:-1;15269:93:0;;;;-1:-1:-1;;;;;15269:93:0;;;6877:305;;;;;;;;;;;;;:::i;19889:167::-;;;;;;;;;;-1:-1:-1;19889:167:0;;;;;:::i;:::-;;:::i;38972:135::-;;;;;;;;;;-1:-1:-1;38972:135:0;;;;;:::i;:::-;;:::i;43514:323::-;;;;;;;;;;-1:-1:-1;43514:323:0;;;;;:::i;:::-;;:::i;40452:110::-;;;;;;;;;;-1:-1:-1;40452:110:0;;;;;:::i;:::-;;:::i;40570:162::-;;;;;;;;;;-1:-1:-1;40570:162:0;;;;;:::i;:::-;;:::i;39439:130::-;;;;;;;;;;-1:-1:-1;39439:130:0;;;;;:::i;:::-;;:::i;44187:383::-;;;;;;;;;;-1:-1:-1;44187:383:0;;;;;:::i;:::-;;:::i;40887:171::-;;;;;;;;;;-1:-1:-1;40887:171:0;;;;;:::i;:::-;;:::i;43188:314::-;;;;;;;;;;-1:-1:-1;43188:314:0;;;;;:::i;:::-;;:::i;17754:44::-;;;;;;;;;;-1:-1:-1;17754:44:0;;;;-1:-1:-1;;;17754:44:0;;;;;;17035:35;;;;;;;;;;;;;;;;16671;;;;;;;;;;;;;;;;6639:226;;;;;;;;;;-1:-1:-1;6639:226:0;;;;;:::i;:::-;;:::i;20064:143::-;;;;;;;;;;-1:-1:-1;20064:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20172:18:0;;;20145:7;20172:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20064:143;41228:158;;;;;;;;;;-1:-1:-1;41228:158:0;;;;;:::i;:::-;;:::i;38726:113::-;;;;;;;;;;-1:-1:-1;38726:113:0;;;;;:::i;:::-;;:::i;37413:110::-;;;;;;;;;;-1:-1:-1;37413:110:0;;;;;:::i;:::-;;:::i;40331:109::-;;;;;;;;;;-1:-1:-1;40331:109:0;;;;;:::i;:::-;;:::i;16635:29::-;;;;;;;;;;;;;;;;6187:244;;;;;;;;;;-1:-1:-1;6187:244:0;;;;;:::i;:::-;;:::i;17382:34::-;;;;;;;;;;;;;;;;39695:168;;;;;;;;;;-1:-1:-1;39695:168:0;;;;;:::i;:::-;;:::i;38569:149::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;;;;;;;;;38688:22:::1;:10:::0;38701:9:::1;38688:22;:::i;:::-;38658:27;:52:::0;-1:-1:-1;38569:149:0:o;39581:98::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;39655:7:::1;:16:::0;39581:98::o;19303:83::-;19340:13;19373:5;19366:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19303:83;:::o;41610:192::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;41664:30:::1;41689:4;41664:24;:30::i;:::-;41715:1;41705:7;:11:::0;41743:2:::1;41727:13;:18:::0;41771:23:::1;41756:12;:38:::0;41610:192::o;20215:161::-;20290:4;20307:39;190:10;20330:7;20339:6;20307:8;:39::i;:::-;-1:-1:-1;20364:4:0;20215:161;;;;;:::o;39319:112::-;39392:23;;39365:7;;39392:31;;39420:2;39392:27;:31::i;:::-;39385:38;;39319:112;:::o;39115:196::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;39216:3:::1;39202:10;:17;;39194:68;;;::::0;-1:-1:-1;;;39194:68:0;;16203:2:1;39194:68:0::1;::::0;::::1;16185:21:1::0;16242:2;16222:18;;;16215:30;16281:34;16261:18;;;16254:62;-1:-1:-1;;;16332:18:1;;;16325:36;16378:19;;39194:68:0::1;16175:228:1::0;39194:68:0::1;39273:17;:30:::0;39115:196::o;20384:313::-;20482:4;20499:36;20509:6;20517:9;20528:6;20499:9;:36::i;:::-;20546:121;20555:6;190:10;20577:89;20615:6;20577:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20577:19:0;;;;;;:11;:19;;;;;;;;190:10;20577:33;;;;;;;;;;:37;:89::i;:::-;20546:8;:121::i;:::-;-1:-1:-1;20685:4:0;20384:313;;;;;:::o;41070:150::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;41140:14:::1;:25:::0;;-1:-1:-1;;;;41140:25:0::1;-1:-1:-1::0;;;41140:25:0;::::1;;;;::::0;;41181:31:::1;::::0;::::1;::::0;::::1;::::0;41140:25;8608:14:1;8601:22;8583:41;;8571:2;8556:18;;8538:92;41181:31:0::1;;;;;;;;41070:150:::0;:::o;22518:253::-;22584:7;22623;;22612;:18;;22604:73;;;;-1:-1:-1;;;22604:73:0;;11625:2:1;22604:73:0;;;11607:21:1;11664:2;11644:18;;;11637:30;11703:34;11683:18;;;11676:62;-1:-1:-1;;;11754:18:1;;;11747:40;11804:19;;22604:73:0;11597:232:1;22604:73:0;22688:19;22711:10;:8;:10::i;:::-;22688:33;-1:-1:-1;22739:24:0;:7;22688:33;22739:11;:24::i;:::-;22732:31;22518:253;-1:-1:-1;;;22518:253:0:o;17298:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17298:37:0;:::o;23122:475::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23204:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23196:56;;;::::0;-1:-1:-1;;;23196:56:0;;13558:2:1;23196:56:0::1;::::0;::::1;13540:21:1::0;13597:2;13577:18;;;13570:30;-1:-1:-1;;;13616:18:1;;;13609:53;13679:18;;23196:56:0::1;13530:173:1::0;23196:56:0::1;23268:9;23263:327;23287:9;:16:::0;23283:20;::::1;23263:327;;;23345:7;-1:-1:-1::0;;;;;23329:23:0::1;:9;23339:1;23329:12;;;;;;-1:-1:-1::0;;;23329:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23329:12:0::1;:23;23325:254;;;23388:9;23398:16:::0;;:20:::1;::::0;23417:1:::1;::::0;23398:20:::1;:::i;:::-;23388:31;;;;;;-1:-1:-1::0;;;23388:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23373:9:::1;:12:::0;;-1:-1:-1;;;;;23388:31:0;;::::1;::::0;23383:1;;23373:12;::::1;;;-1:-1:-1::0;;;23373:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23373:46:0::1;-1:-1:-1::0;;;;;23373:46:0;;::::1;;::::0;;23438:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23477:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23477:28:0::1;::::0;;23524:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23524:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23524:15:0;;;;;-1:-1:-1;;;;;;23524:15:0::1;::::0;;;;;23263:327:::1;23122:475:::0;:::o;23325:254::-:1;23305:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23263:327;;;;23122:475:::0;:::o;20705:218::-;190:10;20793:4;20842:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20842:34:0;;;;;;;;;;20793:4;;20810:83;;20833:7;;20842:50;;20881:10;20842:38;:50::i;21685:377::-;190:10;21737:14;21786:19;;;:11;:19;;;;;;;;21785:20;21777:77;;;;-1:-1:-1;;;21777:77:0;;17781:2:1;21777:77:0;;;17763:21:1;17820:2;17800:18;;;17793:30;17859:34;17839:18;;;17832:62;-1:-1:-1;;;17910:18:1;;;17903:42;17962:19;;21777:77:0;17753:234:1;21777:77:0;21866:15;21890:19;21901:7;21890:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21938:15:0;;;;;;:7;:15;;;;;;21865:44;;-1:-1:-1;21938:28:0;;:15;-1:-1:-1;21865:44:0;21938:19;:28::i;:::-;-1:-1:-1;;;;;21920:15:0;;;;;;:7;:15;;;;;:46;21987:7;;:20;;21999:7;21987:11;:20::i;:::-;21977:7;:30;22031:10;;:23;;22046:7;22031:14;:23::i;:::-;22018:10;:36;-1:-1:-1;;;21685:377:0:o;37290:111::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37359:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;37359:34:0::1;37389:4;37359:34;::::0;;37290:111::o;22074:436::-;22164:7;22203;;22192;:18;;22184:62;;;;-1:-1:-1;;;22184:62:0;;14261:2:1;22184:62:0;;;14243:21:1;14300:2;14280:18;;;14273:30;14339:33;14319:18;;;14312:61;14390:18;;22184:62:0;14233:181:1;22184:62:0;22262:17;22257:246;;22297:15;22321:19;22332:7;22321:10;:19::i;:::-;-1:-1:-1;22296:44:0;;-1:-1:-1;22355:14:0;;-1:-1:-1;;;;;22355:14:0;22257:246;22404:23;22435:19;22446:7;22435:10;:19::i;:::-;-1:-1:-1;22402:52:0;;-1:-1:-1;22469:22:0;;-1:-1:-1;;;;;22469:22:0;43849:326;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43992:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:39;;-1:-1:-1;;43992:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44042:34:::1;::::0;::::1;:51:::0;44104:40:::1;;:63:::0;43849:326::o;41398:200::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;41457:31:::1;41482:5;41457:24;:31::i;:::-;41509:1;41499:7;:11:::0;;;41521:13:::1;:17:::0;41564:26:::1;41549:12;:41:::0;41398:200::o;22779:335::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22864:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22863:21;22855:61;;;::::0;-1:-1:-1;;;22855:61:0;;13202:2:1;22855:61:0::1;::::0;::::1;13184:21:1::0;13241:2;13221:18;;;13214:30;-1:-1:-1;;;13260:18:1;;;13253:57;13327:18;;22855:61:0::1;13174:177:1::0;22855:61:0::1;-1:-1:-1::0;;;;;22930:16:0;::::1;22949:1;22930:16:::0;;;:7:::1;:16;::::0;;;;;:20;22927:108:::1;;-1:-1:-1::0;;;;;23006:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22986:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22967:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22927:108:::1;-1:-1:-1::0;;;;;23045:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23045:27:0::1;23068:4;23045:27:::0;;::::1;::::0;;;23083:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23083:23:0::1;::::0;;::::1;::::0;;22779:335::o;40189:134::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;40277:16:::1;:38:::0;40189:134::o;41948:637::-;42019:13;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;42045:35:::1;42102:7;42045:65;;42157:16;-1:-1:-1::0;;;;;42157:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42139:53:0::1;;42201:4;42208:16;-1:-1:-1::0;;;;;42208:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42139:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42131:101:::0;-1:-1:-1;;;;;;42246:19:0;::::1;42243:203;;42342:16;-1:-1:-1::0;;;;;42342:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42324:70:0::1;;42403:4;42410:16;-1:-1:-1::0;;;;;42410:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42324:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42316:118;;42243:203;42456:13;:21:::0;;-1:-1:-1;;;;;42456:21:0;;::::1;-1:-1:-1::0;;;;;;42456:21:0;;::::1;;::::0;;;42543:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;42472:5;41948:637;-1:-1:-1;41948:637:0:o;39874:175::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;39970:11:::1;:24:::0;;;;40005:17:::1;:36:::0;39874:175::o;43041:139::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;43106:21:::1;43146:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;43138:25:0::1;:34;43164:7;43138:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;19683:198:::0;-1:-1:-1;;;;;19773:20:0;;19749:7;19773:20;;;:11;:20;;;;;;;;19769:49;;;-1:-1:-1;;;;;;19802:16:0;;;;;:7;:16;;;;;;;19683:198::o;19769:49::-;-1:-1:-1;;;;;19856:16:0;;;;;;:7;:16;;;;;;19836:37;;:19;:37::i;6031:148::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;6138:1:::1;6122:6:::0;;6101:40:::1;::::0;-1:-1:-1;;;;;6122:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6101:40:0;6138:1;;6101:40:::1;6169:1;6152:19:::0;;-1:-1:-1;;;;;;6152:19:0::1;::::0;;6031:148::o;42702:327::-;42786:10;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42816:23:0;::::1;42834:4;42816:23;;42808:71;;;::::0;-1:-1:-1;;;42808:71:0;;11221:2:1;42808:71:0::1;::::0;::::1;11203:21:1::0;11260:2;11240:18;;;11233:30;11299:34;11279:18;;;11272:62;-1:-1:-1;;;11350:18:1;;;11343:33;11393:19;;42808:71:0::1;11193:225:1::0;42808:71:0::1;42917:39;::::0;-1:-1:-1;;;42917:39:0;;42890:24:::1;::::0;-1:-1:-1;;;;;42917:24:0;::::1;::::0;::::1;::::0;:39:::1;::::0;42950:4:::1;::::0;42917:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42975:46;::::0;-1:-1:-1;;;42975:46:0;;-1:-1:-1;;;;;8356:32:1;;;42975:46:0::1;::::0;::::1;8338:51:1::0;8405:18;;;8398:34;;;42890:66:0;;-1:-1:-1;42975:23:0;;::::1;::::0;::::1;::::0;8311:18:1;;42975:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42967:54:::0;42702:327;-1:-1:-1;;;;42702:327:0:o;5806:79::-;5844:7;5871:6;-1:-1:-1;;;;;5871:6:0;;5806:79::o;40061:120::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;40145:13:::1;:28:::0;40061:120::o;40740:139::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;40826:16:::1;:45:::0;;-1:-1:-1;;;;;;40826:45:0::1;-1:-1:-1::0;;;;;40826:45:0;;;::::1;::::0;;;::::1;::::0;;40740:139::o;19394:87::-;19433:13;19466:7;19459:14;;;;;:::i;38847:117::-;38928:20;;38901:7;;38928:28;;38953:2;38928:24;:28::i;20931:269::-;21024:4;21041:129;190:10;21064:7;21073:96;21112:15;21073:96;;;;;;;;;;;;;;;;;190:10;21073:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21073:34:0;;;;;;;;;;;;:38;:96::i;6877:305::-;6929:14;;-1:-1:-1;;;;;6929:14:0;6947:10;6929:28;6921:76;;;;-1:-1:-1;;;6921:76:0;;18194:2:1;6921:76:0;;;18176:21:1;18233:2;18213:18;;;18206:30;18272:34;18252:18;;;18245:62;-1:-1:-1;;;18323:18:1;;;18316:33;18366:19;;6921:76:0;18166:225:1;6921:76:0;7034:9;;7016:15;:27;7008:72;;;;-1:-1:-1;;;7008:72:0;;17421:2:1;7008:72:0;;;17403:21:1;17460:2;17440:18;;;17433:30;17499:33;17479:18;;;17472:61;17550:18;;7008:72:0;17393:181:1;7008:72:0;7125:14;;;7117:6;;7096:44;;-1:-1:-1;;;;;7125:14:0;;;;7117:6;;;;-1:-1:-1;;;;;;;;;;;7096:44:0;;7160:14;;;7151:23;;-1:-1:-1;;;;;;7151:23:0;-1:-1:-1;;;;;7160:14:0;;;7151:23;;;;;;6877:305::o;19889:167::-;19967:4;19984:42;190:10;20008:9;20019:6;19984:9;:42::i;38972:135::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;39077:22:::1;:10:::0;39090:9:::1;39077:22;:::i;:::-;39054:20;:45:::0;-1:-1:-1;38972:135:0:o;43514:323::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43656:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:39;;-1:-1:-1;;43656:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43706:33:::1;::::0;::::1;:50:::0;43767:39:::1;;:62:::0;43514:323::o;40452:110::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;40528:16:::1;:26:::0;40452:110::o;40570:162::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;40674:23:::1;:50:::0;40570:162::o;39439:130::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;39539:22:::1;:10:::0;39552:9:::1;39539:22;:::i;:::-;39513:23;:48:::0;-1:-1:-1;39439:130:0:o;44187:383::-;44292:4;44342:7;:14;44321:10;:17;:35;44313:70;;;;-1:-1:-1;;;44313:70:0;;13910:2:1;44313:70:0;;;13892:21:1;13949:2;13929:18;;;13922:30;-1:-1:-1;;;13968:18:1;;;13961:52;14030:18;;44313:70:0;13882:172:1;44313:70:0;44405:9;44400:131;44424:10;:17;44420:1;:21;44400:131;;;44467:48;44477:10;44489;44500:1;44489:13;;;;;;-1:-1:-1;;;44489:13:0;;;;;;;;;;;;;;;44504:7;44512:1;44504:10;;;;;;-1:-1:-1;;;44504:10:0;;;;;;;;;;;;;;;44467:9;:48::i;:::-;44443:3;;;;:::i;:::-;;;;44400:131;;40887:171;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;40964:21:::1;:32:::0;;-1:-1:-1;;;;40964:32:0::1;-1:-1:-1::0;;;40964:32:0;::::1;;;;::::0;;41012:38:::1;::::0;::::1;::::0;::::1;::::0;40964:32;8608:14:1;8601:22;8583:41;;8571:2;8556:18;;8538:92;43188:314:0;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43327:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:39;;-1:-1:-1;;43327:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;43377:30:0;::::1;:47:::0;43435:36:::1;;:59:::0;43188:314::o;6639:226::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;6720:6:::1;::::0;;;6703:23;;-1:-1:-1;;;;;;6703:23:0;;::::1;-1:-1:-1::0;;;;;6720:6:0;::::1;6703:23;::::0;;;6737:19:::1;::::0;;6779:22:::1;6797:4:::0;6779:15:::1;:22;:::i;:::-;6767:9;:34:::0;6854:1:::1;6838:6:::0;;6817:40:::1;::::0;-1:-1:-1;;;;;6838:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6817:40:0;6854:1;;6817:40:::1;6639:226:::0;:::o;41228:158::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;41302:14:::1;:25:::0;;-1:-1:-1;;41302:25:0::1;::::0;::::1;;;::::0;;41343:35:::1;::::0;::::1;::::0;::::1;::::0;41302:25;8608:14:1;8601:22;8583:41;;8571:2;8556:18;;8538:92;38726:113:0;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;38803:15:::1;:28:::0;38726:113::o;37413:110::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37480:27:0::1;37510:5;37480:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;37480:35:0::1;::::0;;37413:110::o;40331:109::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;40406:12:::1;:26:::0;40331:109::o;6187:244::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6276:22:0;::::1;6268:73;;;::::0;-1:-1:-1;;;6268:73:0;;12036:2:1;6268:73:0::1;::::0;::::1;12018:21:1::0;12075:2;12055:18;;;12048:30;12114:34;12094:18;;;12087:62;-1:-1:-1;;;12165:18:1;;;12158:36;12211:19;;6268:73:0::1;12008:228:1::0;6268:73:0::1;6378:6;::::0;;6357:38:::1;::::0;-1:-1:-1;;;;;6357:38:0;;::::1;::::0;6378:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6357:38:0;::::1;6406:6;:17:::0;;-1:-1:-1;;;;;;6406:17:0::1;-1:-1:-1::0;;;;;6406:17:0;;;::::1;::::0;;;::::1;::::0;;6187:244::o;39695:168::-;5940:6;;-1:-1:-1;;;;;5940:6:0;190:10;5940:22;5932:67;;;;-1:-1:-1;;;5932:67:0;;;;;;;:::i;:::-;39788:10:::1;:22:::0;;;;39821:16:::1;:34:::0;39695:168::o;23605:337::-;-1:-1:-1;;;;;23698:19:0;;23690:68;;;;-1:-1:-1;;;23690:68:0;;17016:2:1;23690:68:0;;;16998:21:1;17055:2;17035:18;;;17028:30;17094:34;17074:18;;;17067:62;-1:-1:-1;;;17145:18:1;;;17138:34;17189:19;;23690:68:0;16988:226:1;23690:68:0;-1:-1:-1;;;;;23777:21:0;;23769:68;;;;-1:-1:-1;;;23769:68:0;;12443:2:1;23769:68:0;;;12425:21:1;12482:2;12462:18;;;12455:30;12521:34;12501:18;;;12494:62;-1:-1:-1;;;12572:18:1;;;12565:32;12614:19;;23769:68:0;12415:224:1;23769:68:0;-1:-1:-1;;;;;23850:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23902:32;;18542:25:1;;;23902:32:0;;18515:18:1;23902:32:0;;;;;;;23605:337;;;:::o;1965:132::-;2023:7;2050:39;2054:1;2057;2050:39;;;;;;;;;;;;;-1:-1:-1;;;2050:39:0;;;:3;:39::i;23950:4585::-;-1:-1:-1;;;;;24072:18:0;;24064:68;;;;-1:-1:-1;;;24064:68:0;;16610:2:1;24064:68:0;;;16592:21:1;16649:2;16629:18;;;16622:30;16688:34;16668:18;;;16661:62;-1:-1:-1;;;16739:18:1;;;16732:35;16784:19;;24064:68:0;16582:227:1;24064:68:0;-1:-1:-1;;;;;24151:16:0;;24143:64;;;;-1:-1:-1;;;24143:64:0;;10817:2:1;24143:64:0;;;10799:21:1;10856:2;10836:18;;;10829:30;10895:34;10875:18;;;10868:62;-1:-1:-1;;;10946:18:1;;;10939:33;10989:19;;24143:64:0;10789:225:1;24143:64:0;24235:1;24226:6;:10;24218:64;;;;-1:-1:-1;;;24218:64:0;;15793:2:1;24218:64:0;;;15775:21:1;15832:2;15812:18;;;15805:30;15871:34;15851:18;;;15844:62;-1:-1:-1;;;15922:18:1;;;15915:39;15971:19;;24218:64:0;15765:231:1;24218:64:0;24304:7;:5;:7::i;:::-;-1:-1:-1;;;;;24296:15:0;:4;-1:-1:-1;;;;;24296:15:0;;;:32;;;;;24321:7;:5;:7::i;:::-;-1:-1:-1;;;;;24315:13:0;:2;-1:-1:-1;;;;;24315:13:0;;;24296:32;24293:139;;;24363:12;;24353:6;:22;;24345:75;;;;-1:-1:-1;;;24345:75:0;;14621:2:1;24345:75:0;;;14603:21:1;14660:2;14640:18;;;14633:30;14699:34;14679:18;;;14672:62;-1:-1:-1;;;14750:18:1;;;14743:38;14798:19;;24345:75:0;14593:230:1;24345:75:0;24444:28;24475:24;24493:4;24475:9;:24::i;:::-;24565:23;;24615:13;;24444:55;;-1:-1:-1;24541:47:0;;;;-1:-1:-1;;;;;24609:19:0;;;24615:13;;24609:19;:51;;;;-1:-1:-1;24642:13:0;;24659:1;;24632:24;;-1:-1:-1;;;;;24642:13:0;24632:9;:24::i;:::-;:28;24609:51;24605:278;;;-1:-1:-1;;;;;;;;;;;;;;24743:15:0;24724:34;;24797:25;24815:6;24797:17;:25::i;:::-;24773:21;;;;:49;;;24839:32;;;;;;;-1:-1:-1;24839:32:0;;;;;;;;;;;;;;;;;;;;;24605:278;24936:16;;-1:-1:-1;;;24936:16:0;;;;24935:17;:42;;;;-1:-1:-1;24956:21:0;;-1:-1:-1;;;24956:21:0;;;;24935:42;:74;;;;-1:-1:-1;24991:13:0;;25008:1;;24981:24;;-1:-1:-1;;;;;24991:13:0;24981:9;:24::i;:::-;:28;24935:74;24931:1934;;;25036:13;;-1:-1:-1;;;;;25030:19:0;;;25036:13;;25030:19;25026:1814;;;25074:23;:89;;;;;25148:15;25121:23;;25101:17;;:43;;;;:::i;:::-;:62;;25074:89;25070:301;;;25208:15;25188:17;:35;25269:23;;;-1:-1:-1;25315:32:0;25269:23;25315:10;:32::i;:::-;25397:14;;-1:-1:-1;;;25397:14:0;;;;25393:1432;;;25541:16;;25586:14;;25456:21;;25541:16;25586:14;;25582:840;;;25631:20;25682:17;25720:20;;25702:15;:38;;;;:::i;:::-;25682:58;;25767:11;25816:6;25811:354;25832:14;:21;25828:25;;25811:354;;;25952:9;25926:14;25941:1;25926:17;;;;;;-1:-1:-1;;;25926:17:0;;;;;;;;;;;;;;;;;;;:22;;;:35;25922:216;;26013:45;26030:14;26045:1;26030:17;;;;;;-1:-1:-1;;;26030:17:0;;;;;;;;;;;;;;;;;;;:27;;;26013:12;:16;;:45;;;;:::i;:::-;25998:60;-1:-1:-1;26099:7:0;:3;26105:1;26099:7;:::i;:::-;26093:13;;25922:216;25855:4;;;;:::i;:::-;;;;25811:354;;;;26203:1;26197:3;:7;:30;;;;;26226:1;26208:15;;:19;26197:30;26193:152;;;26301:15;;26275:42;;:21;:12;26292:3;26275:16;:21::i;:::-;:25;;:42::i;:::-;26260:57;;26193:152;26373:25;:23;:25::i;:::-;25582:840;;;;26446:20;26469:44;26509:3;26469:35;26486:17;;26469:12;:16;;:35;;;;:::i;:44::-;26446:67;-1:-1:-1;26538:17:0;26648:27;26446:67;26648:12;:27;:::i;:::-;:31;;26678:1;26648:31;:::i;:::-;26591:51;;;26608:15;26591:51;;;7328:19:1;26625:16:0;7363:12:1;;;7356:28;;;;7400:12;;26591:51:0;;;;;;;;;;;;26581:62;;;;;;26573:71;;:107;;;;:::i;:::-;26558:122;;:12;:122;:::i;:::-;26538:142;;26719:9;26709:7;:19;26705:100;;;26757:24;26771:9;26757:13;:24::i;:::-;25393:1432;;;;;-1:-1:-1;;;;;27005:24:0;;26877:12;27005:24;;;:18;:24;;;;;;26892:4;;27005:24;;;:50;;-1:-1:-1;;;;;;27033:22:0;;;;;;:18;:22;;;;;;;;27005:50;27002:1467;;;-1:-1:-1;27081:5:0;27002:1467;;;27158:13;;-1:-1:-1;;;;;27150:21:0;;;27158:13;;27150:21;27147:164;;;27191:14;:12;:14::i;:::-;27234:10;;27224:7;:20;27279:16;;27263:13;:32;27147:164;27355:13;;-1:-1:-1;;;;;27349:19:0;;;27355:13;;27349:19;27346:164;;;27388:14;:12;:14::i;:::-;27431:11;;27421:7;:21;27477:17;;27461:13;:33;27346:164;-1:-1:-1;;;;;27592:18:0;;;;;;:12;:18;;;;;:25;;;27589:869;;;27637:14;:12;:14::i;:::-;-1:-1:-1;;;;;27680:18:0;;;;;;;:12;:18;;;;;:26;;;;27670:7;:36;27741:32;;;27725:13;:48;27844:13;;27838:19;;;27844:13;;27838:19;27835:181;;;-1:-1:-1;;;;;27891:18:0;;;;;;:12;:18;;;;;:30;;;;27881:7;:40;27960:36;;;27944:13;:52;27835:181;27589:869;;;-1:-1:-1;;;;;28124:16:0;;;;;;:12;:16;;;;;:23;;;28121:322;;;28198:14;:12;:14::i;:::-;28246:13;;-1:-1:-1;;;;;28238:21:0;;;28246:13;;28238:21;28235:189;;;-1:-1:-1;;;;;28297:16:0;;;;;;:12;:16;;;;;:27;;;;28287:7;:37;28367:33;;;28351:13;:49;28235:189;28489:38;28504:4;28509:2;28512:6;28519:7;28489:14;:38::i;:::-;23950:4585;;;;;;:::o;1505:192::-;1591:7;1627:12;1619:6;;;;1611:29;;;;-1:-1:-1;;;1611:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1651:9:0;1663:5;1667:1;1663;:5;:::i;:::-;1651:17;1505:192;-1:-1:-1;;;;;1505:192:0:o;35305:163::-;35346:7;35367:15;35384;35403:19;:17;:19::i;:::-;35366:56;;-1:-1:-1;35366:56:0;-1:-1:-1;35440:20:0;35366:56;;35440:11;:20::i;:::-;35433:27;;;;35305:163;:::o;1172:181::-;1230:7;;1262:5;1266:1;1262;:5;:::i;:::-;1250:17;;1291:1;1286;:6;;1278:46;;;;-1:-1:-1;;;1278:46:0;;12846:2:1;1278:46:0;;;12828:21:1;12885:2;12865:18;;;12858:30;-1:-1:-1;;;12904:18:1;;;12897:57;12971:18;;1278:46:0;12818:177:1;34103:419:0;34162:7;34171;34180;34189;34198;34207;34228:23;34253:12;34267:18;34289:20;34301:7;34289:11;:20::i;:::-;34227:82;;;;;;34321:15;34338:23;34363:12;34379:50;34391:7;34400:4;34406:10;34418;:8;:10::i;:::-;34379:11;:50::i;:::-;34320:109;;;;-1:-1:-1;34320:109:0;;-1:-1:-1;34480:15:0;;-1:-1:-1;34497:4:0;;-1:-1:-1;34503:10:0;;-1:-1:-1;34103:419:0;;-1:-1:-1;;;;;34103:419:0:o;1361:136::-;1419:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;:43::i;2105:278::-;2191:7;2226:12;2219:5;2211:28;;;;-1:-1:-1;;;2211:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2250:9:0;2262:5;2266:1;2262;:5;:::i;37533:331::-;37646:16;;;37660:1;37646:16;;;;;;;;37602:7;;;;37646:16;37660:1;37646:16;;;;;;;;;;-1:-1:-1;37646:16:0;37622:40;;37693:4;37675;37680:1;37675:7;;;;;;-1:-1:-1;;;37675:7:0;;;;;;;;;-1:-1:-1;;;;;37675:23:0;;;:7;;;;;;;;;;:23;;;;37719:15;;:22;;;-1:-1:-1;;;37719:22:0;;;;:15;;;;;:20;;:22;;;;;37675:7;;37719:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37709:4;37714:1;37709:7;;;;;;-1:-1:-1;;;37709:7:0;;;;;;;;;-1:-1:-1;;;;;37709:32:0;;;:7;;;;;;;;;:32;37778:15;;:48;;-1:-1:-1;;;37778:48:0;;37754:21;;37778:15;;;;;:29;;:48;;37808:11;;37821:4;;37778:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37778:48:0;;;;;;;;;;;;:::i;:::-;37754:72;;37846:7;37854:1;37846:10;;;;;;-1:-1:-1;;;37846:10:0;;;;;;;;;;;;;;;37839:17;;;;37533:331;;;:::o;28543:424::-;18383:16;:23;;-1:-1:-1;;;;18383:23:0;-1:-1:-1;;;18383:23:0;;;28658:21:::1;28690:38;28707:20:::0;28690:16:::1;:38::i;:::-;28739:26;28768:41;:21;28794:14:::0;28768:25:::1;:41::i;:::-;28881:16;::::0;28922::::1;::::0;28739:70;;-1:-1:-1;28860:89:0::1;::::0;-1:-1:-1;;;;;28881:16:0;;::::1;::::0;28899:49:::1;::::0;28944:3:::1;::::0;28899:40:::1;::::0;28739:70;;28899:22:::1;:40::i;:49::-;28860:20;:89::i;:::-;-1:-1:-1::0;;18429:16:0;:24;;-1:-1:-1;;;;18429:24:0;;;-1:-1:-1;28543:424:0:o;37872:689::-;37926:9;37950:32;38003:27;;37985:15;:45;;;;:::i;:::-;37950:80;;38048:9;38043:327;38067:14;:21;38063:25;;38043:327;;;38143:24;38117:14;38132:1;38117:17;;;;;;-1:-1:-1;;;38117:17:0;;;;;;;;;;;;;;;;;;;:22;;;:50;38113:246;;38215:14;38230:1;38215:17;;;;;;-1:-1:-1;;;38215:17:0;;;;;;;;;;;;;;;;;;;:22;;;38190:14;38205:1;38190:17;;;;;;-1:-1:-1;;;38190:17:0;;;;;;;;;;;;;;;;;;;:22;;:47;;;;38286:14;38301:1;38286:17;;;;;;-1:-1:-1;;;38286:17:0;;;;;;;;;;;;;;;;;;;:27;;;38256:14;38271:1;38256:17;;;;;;-1:-1:-1;;;38256:17:0;;;;;;;;;;;;;;;;;;;:27;;:57;;;;38338:1;38342;38338:5;;;;:::i;:::-;38334:9;;38113:246;38090:4;;;;:::i;:::-;;;;38043:327;;;-1:-1:-1;38403:14:0;:21;38382:18;;38403:25;;38427:1;;38403:25;:::i;:::-;38382:46;;38446:9;38441:103;38465:10;38461:1;:14;38441:103;;;38512:14;:20;;;;;-1:-1:-1;;;38512:20:0;;;;;;;;;;;;;;;;;-1:-1:-1;;38512:20:0;;;;;;;;;;;;;;;38477:4;;;;:::i;:::-;;;;38441:103;;;;37872:689;;;:::o;1705:250::-;1763:7;1787:6;1783:47;;-1:-1:-1;1817:1:0;1810:8;;1783:47;1842:9;1854:5;1858:1;1854;:5;:::i;:::-;1842:17;-1:-1:-1;1887:1:0;1878:5;1882:1;1842:17;1878:5;:::i;:::-;:10;1870:56;;;;-1:-1:-1;;;1870:56:0;;15030:2:1;1870:56:0;;;15012:21:1;15069:2;15049:18;;;15042:30;15108:34;15088:18;;;15081:62;-1:-1:-1;;;15159:18:1;;;15152:31;15200:19;;1870:56:0;15002:223:1;28981:135:0;18383:16;:23;;-1:-1:-1;;;;18383:23:0;-1:-1:-1;;;18383:23:0;;;29052:10;;29048:61:::1;;29076:24;29093:6;29076:16;:24::i;:::-;-1:-1:-1::0;18429:16:0;:24;;-1:-1:-1;;;;18429:24:0;;;28981:135::o;36760:250::-;36806:7;;:12;:34;;;;-1:-1:-1;36822:13:0;;:18;36806:34;36803:46;;;36760:250::o;36803:46::-;36887:7;;;36869:15;:25;36929:13;;;36905:21;:37;-1:-1:-1;36963:11:0;;;;36985:17;36760:250::o;30917:704::-;31028:7;31024:40;;31050:14;:12;:14::i;:::-;-1:-1:-1;;;;;31089:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31113:22:0;;;;;;:11;:22;;;;;;;;31112:23;31089:46;31085:467;;;31152:48;31174:6;31182:9;31193:6;31152:21;:48::i;:::-;31085:467;;;-1:-1:-1;;;;;31223:19:0;;;;;;:11;:19;;;;;;;;31222:20;:46;;;;-1:-1:-1;;;;;;31246:22:0;;;;;;:11;:22;;;;;;;;31222:46;31218:334;;;31285:46;31305:6;31313:9;31324:6;31285:19;:46::i;31218:334::-;-1:-1:-1;;;;;31353:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31376:22:0;;;;;;:11;:22;;;;;;;;31353:45;31349:203;;;31415:48;31437:6;31445:9;31456:6;31415:21;:48::i;31349:203::-;31496:44;31514:6;31522:9;31533:6;31496:17;:44::i;:::-;31576:7;31572:41;;31598:15;37076;;37066:7;:25;37118:21;;37102:13;:37;37022:125;35476:561;35573:7;;35609;;35526;;;;;35633:289;35657:9;:16;35653:20;;35633:289;;;35723:7;35699;:21;35707:9;35717:1;35707:12;;;;;;-1:-1:-1;;;35707:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35707:12:0;35699:21;;;;;;;;;;;;;:31;;:66;;;35758:7;35734;:21;35742:9;35752:1;35742:12;;;;;;-1:-1:-1;;;35742:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35742:12:0;35734:21;;;;;;;;;;;;;:31;35699:66;35695:97;;;35775:7;;35784;;35767:25;;;;;;;35476:561;;:::o;35695:97::-;35817:34;35829:7;:21;35837:9;35847:1;35837:12;;;;;;-1:-1:-1;;;35837:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35837:12:0;35829:21;;;;;;;;;;;;;35817:7;;:11;:34::i;:::-;35807:44;;35876:34;35888:7;:21;35896:9;35906:1;35896:12;;;;;;-1:-1:-1;;;35896:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35896:12:0;35888:21;;;;;;;;;;;;;35876:7;;:11;:34::i;:::-;35866:44;-1:-1:-1;35675:3:0;;;;:::i;:::-;;;;35633:289;;;-1:-1:-1;35958:7:0;;35946;;:20;;:11;:20::i;:::-;35936:7;:30;35932:61;;;35976:7;;35985;;35968:25;;;;;;35476:561;;:::o;35932:61::-;36012:7;;36021;;-1:-1:-1;35476:561:0;-1:-1:-1;35476:561:0:o;34530:330::-;34590:7;34599;34608;34628:12;34643:24;34659:7;34643:15;:24::i;:::-;34628:39;;34678:18;34699:30;34721:7;34699:21;:30::i;:::-;34678:51;-1:-1:-1;34740:23:0;34766:33;34678:51;34766:17;:7;34778:4;34766:11;:17::i;:::-;:21;;:33::i;:::-;34740:59;34835:4;;-1:-1:-1;34841:10:0;;-1:-1:-1;34530:330:0;;-1:-1:-1;;;34530:330:0:o;34868:429::-;34983:7;;;;35039:24;:7;35051:11;35039;:24::i;:::-;35021:42;-1:-1:-1;35074:12:0;35089:21;:4;35098:11;35089:8;:21::i;:::-;35074:36;-1:-1:-1;35121:18:0;35142:27;:10;35157:11;35142:14;:27::i;:::-;35121:48;-1:-1:-1;35180:23:0;35206:33;35121:48;35206:17;:7;35218:4;35206:11;:17::i;:33::-;35258:7;;;;-1:-1:-1;35284:4:0;;-1:-1:-1;34868:429:0;;-1:-1:-1;;;;;;;34868:429:0:o;29128:666::-;29278:16;;;29292:1;29278:16;;;;;;;;29254:21;;29278:16;;;;;;;;;;-1:-1:-1;29278:16:0;29254:40;;29323:4;29305;29310:1;29305:7;;;;;;-1:-1:-1;;;29305:7:0;;;;;;;;;-1:-1:-1;;;;;29305:23:0;;;:7;;;;;;;;;;:23;;;;29349:15;;:22;;;-1:-1:-1;;;29349:22:0;;;;:15;;;;;:20;;:22;;;;;29305:7;;29349:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29339:4;29344:1;29339:7;;;;;;-1:-1:-1;;;29339:7:0;;;;;;;;;-1:-1:-1;;;;;29339:32:0;;;:7;;;;;;;;;:32;29416:15;;29384:62;;29401:4;;29416:15;29434:11;29384:8;:62::i;:::-;29485:15;;:240;;-1:-1:-1;;;29485:240:0;;-1:-1:-1;;;;;29485:15:0;;;;:66;;:240;;29566:11;;29485:15;;29636:4;;29663;;29699:15;;29485:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29751:35;29768:11;29781:4;29751:35;;;;;;;:::i;:::-;;;;;;;;29128:666;;:::o;41814:126::-;41906:26;;-1:-1:-1;;;;;41906:18:0;;;:26;;;;;41925:6;;41906:26;;;;41925:6;41906:18;:26;;;;;;;;;;;;;;;;;;;;;41814:126;;:::o;29806:578::-;29951:16;;;29965:1;29951:16;;;;;;;;29927:21;;29951:16;;;;;;;;-1:-1:-1;;29988:15:0;;:22;;;-1:-1:-1;;;29988:22:0;;;;29927:40;;-1:-1:-1;;;;;;29988:15:0;;;;:20;;-1:-1:-1;29988:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29978:4;29983:1;29978:7;;;;;;-1:-1:-1;;;29978:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;29978:32:0;;;-1:-1:-1;;;;;29978:32:0;;;;;30039:4;30021;30026:1;30021:7;;;;;;-1:-1:-1;;;30021:7:0;;;;;;;;;-1:-1:-1;;;;;30021:23:0;;;:7;;;;;;;;;:23;30081:15;;;:66;30155:6;30081:15;30224:4;30243:11;30285:24;:15;30305:3;30285:19;:24::i;:::-;30081:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30346:30;30363:6;30371:4;30346:30;;;;;;;:::i;32730:563::-;32833:15;32850:23;32875:12;32889:23;32914:12;32928:18;32950:19;32961:7;32950:10;:19::i;:::-;-1:-1:-1;;;;;32995:15:0;;;;;;:7;:15;;;;;;32832:137;;-1:-1:-1;32832:137:0;;-1:-1:-1;32832:137:0;;-1:-1:-1;32832:137:0;-1:-1:-1;32832:137:0;-1:-1:-1;32832:137:0;-1:-1:-1;32995:28:0;;33015:7;32995:19;:28::i;:::-;-1:-1:-1;;;;;32977:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33052:7;:15;;;;:28;;33072:7;33052:19;:28::i;:::-;-1:-1:-1;;;;;33034:15:0;;;;;;;:7;:15;;;;;;:46;;;;33112:18;;;;;;;:39;;33135:15;33112:22;:39::i;:::-;-1:-1:-1;;;;;33091:18:0;;;;;;:7;:18;;;;;:60;33165:26;33180:10;33165:14;:26::i;:::-;33202:23;33214:4;33220;33202:11;:23::i;:::-;33258:9;-1:-1:-1;;;;;33241:44:0;33250:6;-1:-1:-1;;;;;33241:44:0;;33269:15;33241:44;;;;18542:25:1;;18530:2;18515:18;;18497:76;33241:44:0;;;;;;;;32730:563;;;;;;;;;:::o;32139:583::-;32240:15;32257:23;32282:12;32296:23;32321:12;32335:18;32357:19;32368:7;32357:10;:19::i;:::-;-1:-1:-1;;;;;32402:15:0;;;;;;:7;:15;;;;;;32239:137;;-1:-1:-1;32239:137:0;;-1:-1:-1;32239:137:0;;-1:-1:-1;32239:137:0;-1:-1:-1;32239:137:0;-1:-1:-1;32239:137:0;-1:-1:-1;32402:28:0;;32239:137;32402:19;:28::i;:::-;-1:-1:-1;;;;;32384:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32462:18;;;;;:7;:18;;;;;:39;;32485:15;32462:22;:39::i;:::-;-1:-1:-1;;;;;32441:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32533:7;:18;;;;:39;;32556:15;32533:22;:39::i;33301:639::-;33404:15;33421:23;33446:12;33460:23;33485:12;33499:18;33521:19;33532:7;33521:10;:19::i;:::-;-1:-1:-1;;;;;33566:15:0;;;;;;:7;:15;;;;;;33403:137;;-1:-1:-1;33403:137:0;;-1:-1:-1;33403:137:0;;-1:-1:-1;33403:137:0;-1:-1:-1;33403:137:0;-1:-1:-1;33403:137:0;-1:-1:-1;33566:28:0;;33586:7;33566:19;:28::i;:::-;-1:-1:-1;;;;;33548:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33623:7;:15;;;;:28;;33643:7;33623:19;:28::i;31629:502::-;31728:15;31745:23;31770:12;31784:23;31809:12;31823:18;31845:19;31856:7;31845:10;:19::i;:::-;-1:-1:-1;;;;;31893:15:0;;;;;;:7;:15;;;;;;31727:137;;-1:-1:-1;31727:137:0;;-1:-1:-1;31727:137:0;;-1:-1:-1;31727:137:0;-1:-1:-1;31727:137:0;-1:-1:-1;31727:137:0;-1:-1:-1;31893:28:0;;31727:137;31893:19;:28::i;36416:154::-;36480:7;36507:55;36546:5;36507:20;36519:7;;36507;:11;;:20;;;;:::i;36582:166::-;36652:7;36679:61;36724:5;36679:26;36691:13;;36679:7;:11;;:26;;;;:::i;36049:355::-;36112:19;36135:10;:8;:10::i;:::-;36112:33;-1:-1:-1;36156:18:0;36177:27;:10;36112:33;36177:14;:27::i;:::-;36256:4;36240:22;;;;:7;:22;;;;;;36156:48;;-1:-1:-1;36240:38:0;;36156:48;36240:26;:38::i;:::-;36231:4;36215:22;;;;:7;:22;;;;;;;;:63;;;;36292:11;:26;;;;;;36289:107;;;36374:4;36358:22;;;;:7;:22;;;;;;:38;;36385:10;36358:26;:38::i;:::-;36349:4;36333:22;;;;:7;:22;;;;;:63;36049:355;;;:::o;33948:147::-;34026:7;;:17;;34038:4;34026:11;:17::i;:::-;34016:7;:27;34067:10;;:20;;34082:4;34067:14;:20::i;:::-;34054:10;:33;-1:-1:-1;;33948:147:0:o;14:693:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:163;529:2;526:1;523:9;515:163;;;586:17;;574:30;;624:12;;;;656;;;;547:1;540:9;515:163;;;-1:-1:-1;696:5:1;;78:629;-1:-1:-1;;;;;;;78:629:1:o;712:257::-;771:6;824:2;812:9;803:7;799:23;795:32;792:2;;;845:6;837;830:22;792:2;889:9;876:23;908:31;933:5;908:31;:::i;974:261::-;1044:6;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1155:9;1149:16;1174:31;1199:5;1174:31;:::i;1240:398::-;1308:6;1316;1369:2;1357:9;1348:7;1344:23;1340:32;1337:2;;;1390:6;1382;1375:22;1337:2;1434:9;1421:23;1453:31;1478:5;1453:31;:::i;:::-;1503:5;-1:-1:-1;1560:2:1;1545:18;;1532:32;1573:33;1532:32;1573:33;:::i;:::-;1625:7;1615:17;;;1327:311;;;;;:::o;1643:466::-;1720:6;1728;1736;1789:2;1777:9;1768:7;1764:23;1760:32;1757:2;;;1810:6;1802;1795:22;1757:2;1854:9;1841:23;1873:31;1898:5;1873:31;:::i;:::-;1923:5;-1:-1:-1;1980:2:1;1965:18;;1952:32;1993:33;1952:32;1993:33;:::i;:::-;1747:362;;2045:7;;-1:-1:-1;;;2099:2:1;2084:18;;;;2071:32;;1747:362::o;2114:529::-;2197:6;2205;2213;2221;2274:3;2262:9;2253:7;2249:23;2245:33;2242:2;;;2296:6;2288;2281:22;2242:2;2340:9;2327:23;2359:31;2384:5;2359:31;:::i;:::-;2409:5;-1:-1:-1;2466:2:1;2451:18;;2438:32;2479:30;2438:32;2479:30;:::i;:::-;2232:411;;2528:7;;-1:-1:-1;;;;2582:2:1;2567:18;;2554:32;;2633:2;2618:18;2605:32;;2232:411::o;2648:325::-;2716:6;2724;2777:2;2765:9;2756:7;2752:23;2748:32;2745:2;;;2798:6;2790;2783:22;2745:2;2842:9;2829:23;2861:31;2886:5;2861:31;:::i;:::-;2911:5;2963:2;2948:18;;;;2935:32;;-1:-1:-1;;;2735:238:1:o;2978:1281::-;3096:6;3104;3157:2;3145:9;3136:7;3132:23;3128:32;3125:2;;;3178:6;3170;3163:22;3125:2;3210:23;;-1:-1:-1;;;;;3282:14:1;;;3279:2;;;3314:6;3306;3299:22;3279:2;3357:6;3346:9;3342:22;3332:32;;3402:7;3395:4;3391:2;3387:13;3383:27;3373:2;;3429:6;3421;3414:22;3373:2;3470;3457:16;3492:4;3516:60;3532:43;3572:2;3532:43;:::i;3516:60::-;3598:3;3622:2;3617:3;3610:15;3650:2;3645:3;3641:12;3634:19;;3681:2;3677;3673:11;3729:7;3724:2;3718;3715:1;3711:10;3707:2;3703:19;3699:28;3696:41;3693:2;;;3755:6;3747;3740:22;3693:2;3782:6;3773:15;;3797:238;3811:2;3808:1;3805:9;3797:238;;;3882:3;3869:17;3899:31;3924:5;3899:31;:::i;:::-;3943:18;;3829:1;3822:9;;;;;3981:12;;;;4013;;3797:238;;;-1:-1:-1;4054:5:1;-1:-1:-1;;4097:18:1;;4084:32;;-1:-1:-1;;4128:16:1;;;4125:2;;;4162:6;4154;4147:22;4125:2;;4190:63;4245:7;4234:8;4223:9;4219:24;4190:63;:::i;:::-;4180:73;;;3115:1144;;;;;:::o;4264:937::-;4359:6;4390:2;4433;4421:9;4412:7;4408:23;4404:32;4401:2;;;4454:6;4446;4439:22;4401:2;4486:16;;-1:-1:-1;;;;;4514:30:1;;4511:2;;;4562:6;4554;4547:22;4511:2;4590:22;;4643:4;4635:13;;4631:27;-1:-1:-1;4621:2:1;;4677:6;4669;4662:22;4621:2;4711;4705:9;4734:60;4750:43;4790:2;4750:43;:::i;4734:60::-;4816:3;4840:2;4835:3;4828:15;4868:2;4863:3;4859:12;4852:19;;4899:2;4895;4891:11;4947:7;4942:2;4936;4933:1;4929:10;4925:2;4921:19;4917:28;4914:41;4911:2;;;4973:6;4965;4958:22;4911:2;5000:6;4991:15;;5015:156;5029:2;5026:1;5023:9;5015:156;;;5086:10;;5074:23;;5047:1;5040:9;;;;;5117:12;;;;5149;;5015:156;;;-1:-1:-1;5190:5:1;4370:831;-1:-1:-1;;;;;;;4370:831:1:o;5206:251::-;5262:6;5315:2;5303:9;5294:7;5290:23;5286:32;5283:2;;;5336:6;5328;5321:22;5283:2;5380:9;5367:23;5399:28;5421:5;5399:28;:::i;5462:255::-;5529:6;5582:2;5570:9;5561:7;5557:23;5553:32;5550:2;;;5603:6;5595;5588:22;5550:2;5640:9;5634:16;5659:28;5681:5;5659:28;:::i;5722:190::-;5781:6;5834:2;5822:9;5813:7;5809:23;5805:32;5802:2;;;5855:6;5847;5840:22;5802:2;-1:-1:-1;5883:23:1;;5792:120;-1:-1:-1;5792:120:1:o;5917:194::-;5987:6;6040:2;6028:9;6019:7;6015:23;6011:32;6008:2;;;6061:6;6053;6046:22;6008:2;-1:-1:-1;6089:16:1;;5998:113;-1:-1:-1;5998:113:1:o;6116:319::-;6181:6;6189;6242:2;6230:9;6221:7;6217:23;6213:32;6210:2;;;6263:6;6255;6248:22;6210:2;6304:9;6291:23;6281:33;;6364:2;6353:9;6349:18;6336:32;6377:28;6399:5;6377:28;:::i;6440:258::-;6508:6;6516;6569:2;6557:9;6548:7;6544:23;6540:32;6537:2;;;6590:6;6582;6575:22;6537:2;-1:-1:-1;;6618:23:1;;;6688:2;6673:18;;;6660:32;;-1:-1:-1;6527:171:1:o;6703:463::-;6756:3;6794:5;6788:12;6821:6;6816:3;6809:19;6847:4;6876:2;6871:3;6867:12;6860:19;;6913:2;6906:5;6902:14;6934:3;6946:195;6960:6;6957:1;6954:13;6946:195;;;7025:13;;-1:-1:-1;;;;;7021:39:1;7009:52;;7081:12;;;;7116:15;;;;7057:1;6975:9;6946:195;;;-1:-1:-1;7157:3:1;;6764:402;-1:-1:-1;;;;;6764:402:1:o;7423:203::-;-1:-1:-1;;;;;7587:32:1;;;;7569:51;;7557:2;7542:18;;7524:102::o;7855:304::-;-1:-1:-1;;;;;8085:15:1;;;8067:34;;8137:15;;8132:2;8117:18;;8110:43;8017:2;8002:18;;7984:175::o;9492:510::-;9763:6;9752:9;9745:25;9806:3;9801:2;9790:9;9786:18;9779:31;9726:4;9827:57;9879:3;9868:9;9864:19;9856:6;9827:57;:::i;:::-;-1:-1:-1;;;;;9920:32:1;;;;9915:2;9900:18;;9893:60;-1:-1:-1;9984:2:1;9969:18;9962:34;9819:65;9735:267;-1:-1:-1;;9735:267:1:o;10007:603::-;10119:4;10148:2;10177;10166:9;10159:21;10209:6;10203:13;10252:6;10247:2;10236:9;10232:18;10225:34;10277:4;10290:140;10304:6;10301:1;10298:13;10290:140;;;10399:14;;;10395:23;;10389:30;10365:17;;;10384:2;10361:26;10354:66;10319:10;;10290:140;;;10448:6;10445:1;10442:13;10439:2;;;10518:4;10513:2;10504:6;10493:9;10489:22;10485:31;10478:45;10439:2;-1:-1:-1;10594:2:1;10573:15;-1:-1:-1;;10569:29:1;10554:45;;;;10601:2;10550:54;;10128:482;-1:-1:-1;;;10128:482:1:o;15230:356::-;15432:2;15414:21;;;15451:18;;;15444:30;15510:34;15505:2;15490:18;;15483:62;15577:2;15562:18;;15404:182::o;18578:332::-;18785:6;18774:9;18767:25;18828:2;18823;18812:9;18808:18;18801:30;18748:4;18848:56;18900:2;18889:9;18885:18;18877:6;18848:56;:::i;18915:582::-;19214:6;19203:9;19196:25;19257:6;19252:2;19241:9;19237:18;19230:34;19300:3;19295:2;19284:9;19280:18;19273:31;19177:4;19321:57;19373:3;19362:9;19358:19;19350:6;19321:57;:::i;:::-;-1:-1:-1;;;;;19414:32:1;;;;19409:2;19394:18;;19387:60;-1:-1:-1;19478:3:1;19463:19;19456:35;19313:65;19186:311;-1:-1:-1;;;19186:311:1:o;19944:275::-;20015:2;20009:9;20080:2;20061:13;;-1:-1:-1;;20057:27:1;20045:40;;-1:-1:-1;;;;;20100:34:1;;20136:22;;;20097:62;20094:2;;;20162:18;;:::i;:::-;20198:2;20191:22;19989:230;;-1:-1:-1;19989:230:1:o;20224:183::-;20284:4;-1:-1:-1;;;;;20306:30:1;;20303:2;;;20339:18;;:::i;:::-;-1:-1:-1;20384:1:1;20380:14;20396:4;20376:25;;20293:114::o;20412:128::-;20452:3;20483:1;20479:6;20476:1;20473:13;20470:2;;;20489:18;;:::i;:::-;-1:-1:-1;20525:9:1;;20460:80::o;20545:120::-;20585:1;20611;20601:2;;20616:18;;:::i;:::-;-1:-1:-1;20650:9:1;;20591:74::o;20670:168::-;20710:7;20776:1;20772;20768:6;20764:14;20761:1;20758:21;20753:1;20746:9;20739:17;20735:45;20732:2;;;20783:18;;:::i;:::-;-1:-1:-1;20823:9:1;;20722:116::o;20843:125::-;20883:4;20911:1;20908;20905:8;20902:2;;;20916:18;;:::i;:::-;-1:-1:-1;20953:9:1;;20892:76::o;20973:380::-;21052:1;21048:12;;;;21095;;;21116:2;;21170:4;21162:6;21158:17;21148:27;;21116:2;21223;21215:6;21212:14;21192:18;21189:38;21186:2;;;21269:10;21264:3;21260:20;21257:1;21250:31;21304:4;21301:1;21294:15;21332:4;21329:1;21322:15;21186:2;;21028:325;;;:::o;21358:135::-;21397:3;-1:-1:-1;;21418:17:1;;21415:2;;;21438:18;;:::i;:::-;-1:-1:-1;21485:1:1;21474:13;;21405:88::o;21498:112::-;21530:1;21556;21546:2;;21561:18;;:::i;:::-;-1:-1:-1;21595:9:1;;21536:74::o;21615:127::-;21676:10;21671:3;21667:20;21664:1;21657:31;21707:4;21704:1;21697:15;21731:4;21728:1;21721:15;21747:127;21808:10;21803:3;21799:20;21796:1;21789:31;21839:4;21836:1;21829:15;21863:4;21860:1;21853:15;21879:127;21940:10;21935:3;21931:20;21928:1;21921:31;21971:4;21968:1;21961:15;21995:4;21992:1;21985:15;22011:131;-1:-1:-1;;;;;22086:31:1;;22076:42;;22066:2;;22132:1;22129;22122:12;22066:2;22056:86;:::o;22147:118::-;22233:5;22226:13;22219:21;22212:5;22209:32;22199:2;;22255:1;22252;22245:12

Swarm Source

ipfs://a8fc6a2dd148118c5bdb63924f16cc25ebadefe7919fdb1f5881d94d98c25a8b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.