ETH Price: $3,502.38 (+2.88%)
Gas: 3 Gwei

Token

Banana Killer (APPLE)
 

Overview

Max Total Supply

1,000,000,000,000 APPLE

Holders

225

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
527,035,973.39052812780028042 APPLE

Value
$0.00
0x55335771b4101fdc7bda60771fb34c0ea01eae99
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BananaKiller

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-11
*/

/*
https://twitter.com/BananaKillerETH

https://t.me/BananaKillerETH
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.21;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    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;
}
 
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;
}
 
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);
}
 
interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual 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 _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    
}
 
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;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    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 {
       
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
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);
}
 
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 BananaKiller is ERC20, Ownable {

    string _name = unicode"Banana Killer";
    string _symbol = unicode"APPLE";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

    uint256 public totalBuyTax;
    uint256 public devBuyTax;
    uint256 public liqBuyTax;
 
    uint256 public totalSellTax;
    uint256 public devSellTax;
    uint256 public liqSellTax;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
   
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _devBuyTax = 20;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 30;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 1000000000000 * 1e18;
 
        maxTransaction = totalSupply * 10 / 1000; // 2%
        maxWalletHolding = totalSupply * 10 / 1000; // 2% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        devWallet = address(msg.sender);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
        _mint(address(this), totalSupply * 96/ 100);
        _mint(msg.sender, totalSupply * 4 / 100);
        
        
    }
 
    receive() external payable {
 
    }
 

    function complete() external onlyOwner{



        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this)) * 90 / 100;
        

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
            devWallet,
            block.timestamp
        );
    }


    

    function removeStuckETH() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(devWallet).call{value: ethBalance}("");
        require(success, "Failed to clear ETH balance");
    }

    function removeStuckTokenBalance() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }

    function deactivateLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function nukeContractHoldings(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function switchFees(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
        require(totalBuyTax <= 30, "MAX 30% tax allowed");
        require(totalSellTax <= 30, "MAX 30% tax allowed");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newDevWallet) external onlyOwner{
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, 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),
            block.timestamp
        );
 
    }
 
    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
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"complete","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"nukeContractHoldings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"switchFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","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":"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":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600d81526020017f42616e616e61204b696c6c657200000000000000000000000000000000000000815250600690816200004a919062000c1a565b506040518060400160405280600581526020017f4150504c450000000000000000000000000000000000000000000000000000008152506007908162000091919062000c1a565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000a1a565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000a1a565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000a1a565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000a1a565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000c1a565b50806004908162000218919062000c1a565b5050505f6200022c6200054160201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601490505f80601e90505f806c0c9f2c9cd04674edea4000000090506103e8600a82620002f8919062000d2b565b62000304919062000da2565b600c819055506103e8600a826200031c919062000d2b565b62000328919062000da2565b600e819055506103e860018262000340919062000d2b565b6200034c919062000da2565b600d81905550846011819055508360128190555060125460115462000372919062000dd9565b601081905550826014819055508160158190555060155460145462000398919062000dd9565b60138190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000400620003f26200054860201b60201c565b60016200057060201b60201c565b620004133060016200057060201b60201c565b6200042861dead60016200057060201b60201c565b6200045c600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200057060201b60201c565b6200047e620004706200054860201b60201c565b6001620006b960201b60201c565b62000491306001620006b960201b60201c565b620004a661dead6001620006b960201b60201c565b620004da600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006b960201b60201c565b62000508306064606084620004f0919062000d2b565b620004fc919062000da2565b620007b260201b60201c565b620005363360646004846200051e919062000d2b565b6200052a919062000da2565b620007b260201b60201c565b505050505062000fd0565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005806200054160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000611576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006089062000e71565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006ad919062000ead565b60405180910390a25050565b620006c96200054160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200075a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007519062000e71565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000823576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200081a9062000f16565b60405180910390fd5b620008365f83836200094f60201b60201c565b6200084d816002546200095460201b90919060201c565b600281905550620008a4815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200095460201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000943919062000f47565b60405180910390a35050565b505050565b5f80828462000964919062000dd9565b905083811015620009ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a39062000fb0565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a3257607f821691505b60208210810362000a485762000a47620009ed565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000aac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a6f565b62000ab8868362000a6f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b0262000afc62000af68462000ad0565b62000ad9565b62000ad0565b9050919050565b5f819050919050565b62000b1d8362000ae2565b62000b3562000b2c8262000b09565b84845462000a7b565b825550505050565b5f90565b62000b4b62000b3d565b62000b5881848462000b12565b505050565b5b8181101562000b7f5762000b735f8262000b41565b60018101905062000b5e565b5050565b601f82111562000bce5762000b988162000a4e565b62000ba38462000a60565b8101602085101562000bb3578190505b62000bcb62000bc28562000a60565b83018262000b5d565b50505b505050565b5f82821c905092915050565b5f62000bf05f198460080262000bd3565b1980831691505092915050565b5f62000c0a838362000bdf565b9150826002028217905092915050565b62000c2582620009b6565b67ffffffffffffffff81111562000c415762000c40620009c0565b5b62000c4d825462000a1a565b62000c5a82828562000b83565b5f60209050601f83116001811462000c90575f841562000c7b578287015190505b62000c87858262000bfd565b86555062000cf6565b601f19841662000ca08662000a4e565b5f5b8281101562000cc95784890151825560018201915060208501945060208101905062000ca2565b8683101562000ce9578489015162000ce5601f89168262000bdf565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d378262000ad0565b915062000d448362000ad0565b925082820262000d548162000ad0565b9150828204841483151762000d6e5762000d6d62000cfe565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000dae8262000ad0565b915062000dbb8362000ad0565b92508262000dce5762000dcd62000d75565b5b828204905092915050565b5f62000de58262000ad0565b915062000df28362000ad0565b925082820190508082111562000e0d5762000e0c62000cfe565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e5960208362000e13565b915062000e668262000e23565b602082019050919050565b5f6020820190508181035f83015262000e8a8162000e4b565b9050919050565b5f8115159050919050565b62000ea78162000e91565b82525050565b5f60208201905062000ec25f83018462000e9c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000efe601f8362000e13565b915062000f0b8262000ec8565b602082019050919050565b5f6020820190508181035f83015262000f2f8162000ef0565b9050919050565b62000f418162000ad0565b82525050565b5f60208201905062000f5c5f83018462000f36565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f98601b8362000e13565b915062000fa58262000f62565b602082019050919050565b5f6020820190508181035f83015262000fc98162000f8a565b9050919050565b6147688062000fde5f395ff3fe60806040526004361061025f575f3560e01c8063679a864411610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108c4578063c3f70b52146108ec578063dd62ed3e14610916578063df6f93be14610952578063f044b4101461097c578063f2fde38b1461099257610266565b8063a457c2d7146107bc578063a9059cbb146107f8578063b62496f514610834578063b69ef8a814610870578063be8575041461089a57610266565b80638da5cb5b116101075780638da5cb5b146106d6578063945674fe1461070057806395d89b411461072a5780639a7a23d6146107545780639ee2e9241461077c5780639fccce321461079257610266565b8063679a86441461060a5780636c7e15c91461063257806370a082311461065c578063715018a6146106985780637571336a146106ae57610266565b80631bff7898116101dc57806346469afb116101a057806346469afb1461051057806348d791551461053a57806349bd5a5e146105645780634fbee1931461058e578063522e1177146105ca5780635de0f2a0146105e057610266565b80631bff78981461041a57806322eb66311461044457806323b872dd1461046e578063313ce567146104aa57806339509351146104d457610266565b806310d5de531161022357806310d5de53146103385780631694505e1461037457806318160ddd1461039e5780631816467f146103c85780631a8145bb146103f057610266565b806306db39db1461026a57806306fdde0314610292578063095ea7b3146102bc5780630e947809146102f85780630f299cf11461032257610266565b3661026657005b5f80fd5b348015610275575f80fd5b50610290600480360381019061028b919061363f565b6109ba565b005b34801561029d575f80fd5b506102a6610b2a565b6040516102b3919061372d565b60405180910390f35b3480156102c7575f80fd5b506102e260048036038101906102dd91906137a7565b610bba565b6040516102ef91906137ff565b60405180910390f35b348015610303575f80fd5b5061030c610bd7565b60405161031991906137ff565b60405180910390f35b34801561032d575f80fd5b50610336610be9565b005b348015610343575f80fd5b5061035e60048036038101906103599190613818565b610d92565b60405161036b91906137ff565b60405180910390f35b34801561037f575f80fd5b50610388610daf565b604051610395919061389e565b60405180910390f35b3480156103a9575f80fd5b506103b2610dd4565b6040516103bf91906138c6565b60405180910390f35b3480156103d3575f80fd5b506103ee60048036038101906103e99190613818565b610ddd565b005b3480156103fb575f80fd5b50610404610f31565b60405161041191906138c6565b60405180910390f35b348015610425575f80fd5b5061042e610f37565b60405161043b91906138c6565b60405180910390f35b34801561044f575f80fd5b50610458610f3d565b60405161046591906138c6565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f91906138df565b610f43565b6040516104a191906137ff565b60405180910390f35b3480156104b5575f80fd5b506104be611017565b6040516104cb919061394a565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f591906137a7565b61101f565b60405161050791906137ff565b60405180910390f35b34801561051b575f80fd5b506105246110cd565b60405161053191906138c6565b60405180910390f35b348015610545575f80fd5b5061054e6110d3565b60405161055b91906138c6565b60405180910390f35b34801561056f575f80fd5b506105786110d9565b6040516105859190613972565b60405180910390f35b348015610599575f80fd5b506105b460048036038101906105af9190613818565b6110fe565b6040516105c191906137ff565b60405180910390f35b3480156105d5575f80fd5b506105de611150565b005b3480156105eb575f80fd5b506105f4611556565b60405161060191906138c6565b60405180910390f35b348015610615575f80fd5b50610630600480360381019061062b91906139b5565b61155c565b005b34801561063d575f80fd5b5061064661160f565b60405161065391906138c6565b60405180910390f35b348015610667575f80fd5b50610682600480360381019061067d9190613818565b611615565b60405161068f91906138c6565b60405180910390f35b3480156106a3575f80fd5b506106ac61165a565b005b3480156106b9575f80fd5b506106d460048036038101906106cf91906139e0565b6117ad565b005b3480156106e1575f80fd5b506106ea61189b565b6040516106f79190613972565b60405180910390f35b34801561070b575f80fd5b506107146118c3565b60405161072191906137ff565b60405180910390f35b348015610735575f80fd5b5061073e6118d6565b60405161074b919061372d565b60405180910390f35b34801561075f575f80fd5b5061077a600480360381019061077591906139e0565b611966565b005b348015610787575f80fd5b50610790611a99565b005b34801561079d575f80fd5b506107a6611bac565b6040516107b391906138c6565b60405180910390f35b3480156107c7575f80fd5b506107e260048036038101906107dd91906137a7565b611bb2565b6040516107ef91906137ff565b60405180910390f35b348015610803575f80fd5b5061081e600480360381019061081991906137a7565b611c7a565b60405161082b91906137ff565b60405180910390f35b34801561083f575f80fd5b5061085a60048036038101906108559190613818565b611c97565b60405161086791906137ff565b60405180910390f35b34801561087b575f80fd5b50610884611cb4565b60405161089191906138c6565b60405180910390f35b3480156108a5575f80fd5b506108ae611cba565b6040516108bb91906138c6565b60405180910390f35b3480156108cf575f80fd5b506108ea60048036038101906108e591906139e0565b611cc0565b005b3480156108f7575f80fd5b50610900611dfc565b60405161090d91906138c6565b60405180910390f35b348015610921575f80fd5b5061093c60048036038101906109379190613a1e565b611e02565b60405161094991906138c6565b60405180910390f35b34801561095d575f80fd5b50610966611e84565b60405161097391906138c6565b60405180910390f35b348015610987575f80fd5b50610990611e8a565b005b34801561099d575f80fd5b506109b860048036038101906109b39190613818565b611f3b565b005b6109c261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4790613aa6565b60405180910390fd5b8360118190555081601281905550601254601154610a6e9190613af1565b6010819055508260148190555080601581905550601554601454610a929190613af1565b601381905550601e6010541115610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613b6e565b60405180910390fd5b601e6013541115610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90613b6e565b60405180910390fd5b50505050565b606060038054610b3990613bb9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6590613bb9565b8015610bb05780601f10610b8757610100808354040283529160200191610bb0565b820191905f5260205f20905b815481529060010190602001808311610b9357829003601f168201915b5050505050905090565b5f610bcd610bc661208f565b8484612096565b6001905092915050565b600f5f9054906101000a900460ff1681565b610bf161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690613aa6565b60405180910390fd5b5f4790505f8111610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90613c59565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d0b90613ca4565b5f6040518083038185875af1925050503d805f8114610d45576040519150601f19603f3d011682016040523d82523d5f602084013e610d4a565b606091505b5050905080610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8590613d02565b60405180910390fd5b5050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610de561208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90613aa6565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f610f4f848484612259565b61100c84610f5b61208f565b611007856040518060600160405280602881526020016146e66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fbe61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b600190509392505050565b5f6012905090565b5f6110c361102b61208f565b846110be8560015f61103b61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612be090919063ffffffff16565b612096565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61115861208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dd90613aa6565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506112098160016117ad565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611292573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b69190613d34565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561131b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061133f9190613d34565b6040518363ffffffff1660e01b815260040161135c929190613d5f565b6020604051808303815f875af1158015611378573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139c9190613d34565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061140760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016117ad565b61143360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c3d565b5f4790505f6064605a61144530611615565b61144f9190613d86565b6114599190613df4565b90506114873060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161150d96959493929190613e5d565b60606040518083038185885af1158015611529573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061154e9190613ed0565b505050505050565b600d5481565b61156461208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613aa6565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61166261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613aa6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117b561208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90613aa6565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b6060600480546118e590613bb9565b80601f016020809104026020016040519081016040528092919081815260200182805461191190613bb9565b801561195c5780601f106119335761010080835404028352916020019161195c565b820191905f5260205f20905b81548152906001019060200180831161193f57829003601f168201915b5050505050905090565b61196e61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390613aa6565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613f90565b60405180910390fd5b611a958282612c3d565b5050565b611aa161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2690613aa6565b60405180910390fd5b5f611b3930611615565b90505f8111611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061401e565b60405180910390fd5b611ba930600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612259565b50565b60175481565b5f611c70611bbe61208f565b84611c6b8560405180606001604052806025815260200161470e6025913960015f611be761208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b6001905092915050565b5f611c8d611c8661208f565b8484612259565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611cc861208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613aa6565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611df091906137ff565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611e9261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1790613aa6565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611f4361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890613aa6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906140ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061413a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224c91906138c6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614256565b60405180910390fd5b5f810361234c5761234783835f612cdb565b612b79565b600f5f9054906101000a900460ff16156127415761236861189b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123d657506123a661189b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561240e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612448575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124615750600960149054906101000a900460ff16155b1561274057601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125035750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125aa57600c5481111561254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906142e4565b60405180910390fd5b600e5461255983611615565b826125649190613af1565b11156125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c9061434c565b60405180910390fd5b61273f565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126475750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561269657600c54811115612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906143da565b60405180910390fd5b61273e565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661273d57600e546126f083611615565b826126fb9190613af1565b111561273c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127339061434c565b60405180910390fd5b5b5b5b5b5b5f61274b30611615565b90505f600d5482101590508080156127705750600960149054906101000a900460ff16155b80156127c35750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612816575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612869575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128ac576001600960146101000a81548160ff021916908315150217905550612891612f64565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061295b575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612964575f90505b5f8115612b6957601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129c257505f601354115b15612a5a576129ef60646129e16013548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060135460155482612a029190613d86565b612a0c9190613df4565b60165f828254612a1c9190613af1565b9250508190555060135460145482612a349190613d86565b612a3e9190613df4565b60175f828254612a4e9190613af1565b92505081905550612b46565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ab157505f601054115b15612b4557612ade6064612ad06010548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060105460125482612af19190613d86565b612afb9190613df4565b60165f828254612b0b9190613af1565b9250508190555060105460115482612b239190613d86565b612b2d9190613df4565b60175f828254612b3d9190613af1565b925050819055505b5b5f811115612b5a57612b59873083612cdb565b5b8085612b6691906143f8565b94505b612b74878787612cdb565b505050505b505050565b5f838311158290612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc919061372d565b60405180910390fd5b505f8385612bd391906143f8565b9050809150509392505050565b5f808284612bee9190613af1565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614475565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90614256565b60405180910390fd5b612dc283838361324a565b612e2b816040518060600160405280602681526020016146c0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612be090919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f5791906138c6565b60405180910390a3505050565b5f612f6e30611615565b90505f601754601654612f819190613af1565b90505f80831480612f9157505f82145b15612f9e57505050613188565b5f1515600f60019054906101000a900460ff16151503612fe5576014600d54612fc79190613d86565b831115612fe0576014600d54612fdd9190613d86565b92505b612ff1565b612fee30611615565b92505b5f600283601654866130039190613d86565b61300d9190613df4565b6130179190613df4565b90505f61302d828661324f90919063ffffffff16565b90505f47905061303c82613298565b5f613050824761324f90919063ffffffff16565b90505f61307a8761306c6017548561318a90919063ffffffff16565b61320190919063ffffffff16565b90505f818361308991906143f8565b90505f6016819055505f6017819055505f861180156130a757505f81115b156130f4576130b686826134ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130eb93929190614493565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313990613ca4565b5f6040518083038185875af1925050503d805f8114613173576040519150601f19603f3d011682016040523d82523d5f602084013e613178565b606091505b5050809750505050505050505050505b565b5f80830361319a575f90506131fb565b5f82846131a79190613d86565b90508284826131b69190613df4565b146131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90614538565b60405180910390fd5b809150505b92915050565b5f61324283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135a7565b905092915050565b505050565b5f61329083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b7e565b905092915050565b5f600267ffffffffffffffff8111156132b4576132b3614556565b5b6040519080825280602002602001820160405280156132e25781602001602082028036833780820191505090505b50905030815f815181106132f9576132f8614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c19190613d34565b816001815181106133d5576133d4614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349d959493929190614667565b5f604051808303815f87803b1580156134b4575f80fd5b505af11580156134c6573d5f803e3d5ffd5b505050505050565b6134fa3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161355f96959493929190613e5d565b60606040518083038185885af115801561357b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135a09190613ed0565b5050505050565b5f80831182906135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e4919061372d565b60405180910390fd5b505f83856135fb9190613df4565b9050809150509392505050565b5f80fd5b5f819050919050565b61361e8161360c565b8114613628575f80fd5b50565b5f8135905061363981613615565b92915050565b5f805f806080858703121561365757613656613608565b5b5f6136648782880161362b565b94505060206136758782880161362b565b93505060406136868782880161362b565b92505060606136978782880161362b565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156136da5780820151818401526020810190506136bf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6136ff826136a3565b61370981856136ad565b93506137198185602086016136bd565b613722816136e5565b840191505092915050565b5f6020820190508181035f83015261374581846136f5565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137768261374d565b9050919050565b6137868161376c565b8114613790575f80fd5b50565b5f813590506137a18161377d565b92915050565b5f80604083850312156137bd576137bc613608565b5b5f6137ca85828601613793565b92505060206137db8582860161362b565b9150509250929050565b5f8115159050919050565b6137f9816137e5565b82525050565b5f6020820190506138125f8301846137f0565b92915050565b5f6020828403121561382d5761382c613608565b5b5f61383a84828501613793565b91505092915050565b5f819050919050565b5f61386661386161385c8461374d565b613843565b61374d565b9050919050565b5f6138778261384c565b9050919050565b5f6138888261386d565b9050919050565b6138988161387e565b82525050565b5f6020820190506138b15f83018461388f565b92915050565b6138c08161360c565b82525050565b5f6020820190506138d95f8301846138b7565b92915050565b5f805f606084860312156138f6576138f5613608565b5b5f61390386828701613793565b935050602061391486828701613793565b92505060406139258682870161362b565b9150509250925092565b5f60ff82169050919050565b6139448161392f565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c8161376c565b82525050565b5f6020820190506139855f830184613963565b92915050565b613994816137e5565b811461399e575f80fd5b50565b5f813590506139af8161398b565b92915050565b5f602082840312156139ca576139c9613608565b5b5f6139d7848285016139a1565b91505092915050565b5f80604083850312156139f6576139f5613608565b5b5f613a0385828601613793565b9250506020613a14858286016139a1565b9150509250929050565b5f8060408385031215613a3457613a33613608565b5b5f613a4185828601613793565b9250506020613a5285828601613793565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a906020836136ad565b9150613a9b82613a5c565b602082019050919050565b5f6020820190508181035f830152613abd81613a84565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613afb8261360c565b9150613b068361360c565b9250828201905080821115613b1e57613b1d613ac4565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613b586013836136ad565b9150613b6382613b24565b602082019050919050565b5f6020820190508181035f830152613b8581613b4c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613bd057607f821691505b602082108103613be357613be2613b8c565b5b50919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c436022836136ad565b9150613c4e82613be9565b604082019050919050565b5f6020820190508181035f830152613c7081613c37565b9050919050565b5f81905092915050565b50565b5f613c8f5f83613c77565b9150613c9a82613c81565b5f82019050919050565b5f613cae82613c84565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613cec601b836136ad565b9150613cf782613cb8565b602082019050919050565b5f6020820190508181035f830152613d1981613ce0565b9050919050565b5f81519050613d2e8161377d565b92915050565b5f60208284031215613d4957613d48613608565b5b5f613d5684828501613d20565b91505092915050565b5f604082019050613d725f830185613963565b613d7f6020830184613963565b9392505050565b5f613d908261360c565b9150613d9b8361360c565b9250828202613da98161360c565b91508282048414831517613dc057613dbf613ac4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613dfe8261360c565b9150613e098361360c565b925082613e1957613e18613dc7565b5b828204905092915050565b5f819050919050565b5f613e47613e42613e3d84613e24565b613843565b61360c565b9050919050565b613e5781613e2d565b82525050565b5f60c082019050613e705f830189613963565b613e7d60208301886138b7565b613e8a6040830187613e4e565b613e976060830186613e4e565b613ea46080830185613963565b613eb160a08301846138b7565b979650505050505050565b5f81519050613eca81613615565b92915050565b5f805f60608486031215613ee757613ee6613608565b5b5f613ef486828701613ebc565b9350506020613f0586828701613ebc565b9250506040613f1686828701613ebc565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613f7a6039836136ad565b9150613f8582613f20565b604082019050919050565b5f6020820190508181035f830152613fa781613f6e565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f6140086024836136ad565b915061401382613fae565b604082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6140966024836136ad565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141246022836136ad565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141b26025836136ad565b91506141bd82614158565b604082019050919050565b5f6020820190508181035f8301526141df816141a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6142406023836136ad565b915061424b826141e6565b604082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6142ce6035836136ad565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6143366013836136ad565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6143c46036836136ad565b91506143cf8261436a565b604082019050919050565b5f6020820190508181035f8301526143f1816143b8565b9050919050565b5f6144028261360c565b915061440d8361360c565b925082820390508181111561442557614424613ac4565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61445f601b836136ad565b915061446a8261442b565b602082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f6060820190506144a65f8301866138b7565b6144b360208301856138b7565b6144c060408301846138b7565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145226021836136ad565b915061452d826144c8565b604082019050919050565b5f6020820190508181035f83015261454f81614516565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145e28161376c565b82525050565b5f6145f383836145d9565b60208301905092915050565b5f602082019050919050565b5f614615826145b0565b61461f81856145ba565b935061462a836145ca565b805f5b8381101561465a57815161464188826145e8565b975061464c836145ff565b92505060018101905061462d565b5085935050505092915050565b5f60a08201905061467a5f8301886138b7565b6146876020830187613e4e565b8181036040830152614699818661460b565b90506146a86060830185613963565b6146b560808301846138b7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122062127e88f1b0c34512ea9118a3850005f70ae3458ae6430b9d33a7d629b046e364736f6c63430008150033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c8063679a864411610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108c4578063c3f70b52146108ec578063dd62ed3e14610916578063df6f93be14610952578063f044b4101461097c578063f2fde38b1461099257610266565b8063a457c2d7146107bc578063a9059cbb146107f8578063b62496f514610834578063b69ef8a814610870578063be8575041461089a57610266565b80638da5cb5b116101075780638da5cb5b146106d6578063945674fe1461070057806395d89b411461072a5780639a7a23d6146107545780639ee2e9241461077c5780639fccce321461079257610266565b8063679a86441461060a5780636c7e15c91461063257806370a082311461065c578063715018a6146106985780637571336a146106ae57610266565b80631bff7898116101dc57806346469afb116101a057806346469afb1461051057806348d791551461053a57806349bd5a5e146105645780634fbee1931461058e578063522e1177146105ca5780635de0f2a0146105e057610266565b80631bff78981461041a57806322eb66311461044457806323b872dd1461046e578063313ce567146104aa57806339509351146104d457610266565b806310d5de531161022357806310d5de53146103385780631694505e1461037457806318160ddd1461039e5780631816467f146103c85780631a8145bb146103f057610266565b806306db39db1461026a57806306fdde0314610292578063095ea7b3146102bc5780630e947809146102f85780630f299cf11461032257610266565b3661026657005b5f80fd5b348015610275575f80fd5b50610290600480360381019061028b919061363f565b6109ba565b005b34801561029d575f80fd5b506102a6610b2a565b6040516102b3919061372d565b60405180910390f35b3480156102c7575f80fd5b506102e260048036038101906102dd91906137a7565b610bba565b6040516102ef91906137ff565b60405180910390f35b348015610303575f80fd5b5061030c610bd7565b60405161031991906137ff565b60405180910390f35b34801561032d575f80fd5b50610336610be9565b005b348015610343575f80fd5b5061035e60048036038101906103599190613818565b610d92565b60405161036b91906137ff565b60405180910390f35b34801561037f575f80fd5b50610388610daf565b604051610395919061389e565b60405180910390f35b3480156103a9575f80fd5b506103b2610dd4565b6040516103bf91906138c6565b60405180910390f35b3480156103d3575f80fd5b506103ee60048036038101906103e99190613818565b610ddd565b005b3480156103fb575f80fd5b50610404610f31565b60405161041191906138c6565b60405180910390f35b348015610425575f80fd5b5061042e610f37565b60405161043b91906138c6565b60405180910390f35b34801561044f575f80fd5b50610458610f3d565b60405161046591906138c6565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f91906138df565b610f43565b6040516104a191906137ff565b60405180910390f35b3480156104b5575f80fd5b506104be611017565b6040516104cb919061394a565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f591906137a7565b61101f565b60405161050791906137ff565b60405180910390f35b34801561051b575f80fd5b506105246110cd565b60405161053191906138c6565b60405180910390f35b348015610545575f80fd5b5061054e6110d3565b60405161055b91906138c6565b60405180910390f35b34801561056f575f80fd5b506105786110d9565b6040516105859190613972565b60405180910390f35b348015610599575f80fd5b506105b460048036038101906105af9190613818565b6110fe565b6040516105c191906137ff565b60405180910390f35b3480156105d5575f80fd5b506105de611150565b005b3480156105eb575f80fd5b506105f4611556565b60405161060191906138c6565b60405180910390f35b348015610615575f80fd5b50610630600480360381019061062b91906139b5565b61155c565b005b34801561063d575f80fd5b5061064661160f565b60405161065391906138c6565b60405180910390f35b348015610667575f80fd5b50610682600480360381019061067d9190613818565b611615565b60405161068f91906138c6565b60405180910390f35b3480156106a3575f80fd5b506106ac61165a565b005b3480156106b9575f80fd5b506106d460048036038101906106cf91906139e0565b6117ad565b005b3480156106e1575f80fd5b506106ea61189b565b6040516106f79190613972565b60405180910390f35b34801561070b575f80fd5b506107146118c3565b60405161072191906137ff565b60405180910390f35b348015610735575f80fd5b5061073e6118d6565b60405161074b919061372d565b60405180910390f35b34801561075f575f80fd5b5061077a600480360381019061077591906139e0565b611966565b005b348015610787575f80fd5b50610790611a99565b005b34801561079d575f80fd5b506107a6611bac565b6040516107b391906138c6565b60405180910390f35b3480156107c7575f80fd5b506107e260048036038101906107dd91906137a7565b611bb2565b6040516107ef91906137ff565b60405180910390f35b348015610803575f80fd5b5061081e600480360381019061081991906137a7565b611c7a565b60405161082b91906137ff565b60405180910390f35b34801561083f575f80fd5b5061085a60048036038101906108559190613818565b611c97565b60405161086791906137ff565b60405180910390f35b34801561087b575f80fd5b50610884611cb4565b60405161089191906138c6565b60405180910390f35b3480156108a5575f80fd5b506108ae611cba565b6040516108bb91906138c6565b60405180910390f35b3480156108cf575f80fd5b506108ea60048036038101906108e591906139e0565b611cc0565b005b3480156108f7575f80fd5b50610900611dfc565b60405161090d91906138c6565b60405180910390f35b348015610921575f80fd5b5061093c60048036038101906109379190613a1e565b611e02565b60405161094991906138c6565b60405180910390f35b34801561095d575f80fd5b50610966611e84565b60405161097391906138c6565b60405180910390f35b348015610987575f80fd5b50610990611e8a565b005b34801561099d575f80fd5b506109b860048036038101906109b39190613818565b611f3b565b005b6109c261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4790613aa6565b60405180910390fd5b8360118190555081601281905550601254601154610a6e9190613af1565b6010819055508260148190555080601581905550601554601454610a929190613af1565b601381905550601e6010541115610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613b6e565b60405180910390fd5b601e6013541115610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90613b6e565b60405180910390fd5b50505050565b606060038054610b3990613bb9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6590613bb9565b8015610bb05780601f10610b8757610100808354040283529160200191610bb0565b820191905f5260205f20905b815481529060010190602001808311610b9357829003601f168201915b5050505050905090565b5f610bcd610bc661208f565b8484612096565b6001905092915050565b600f5f9054906101000a900460ff1681565b610bf161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690613aa6565b60405180910390fd5b5f4790505f8111610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90613c59565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d0b90613ca4565b5f6040518083038185875af1925050503d805f8114610d45576040519150601f19603f3d011682016040523d82523d5f602084013e610d4a565b606091505b5050905080610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8590613d02565b60405180910390fd5b5050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610de561208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90613aa6565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f610f4f848484612259565b61100c84610f5b61208f565b611007856040518060600160405280602881526020016146e66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fbe61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b600190509392505050565b5f6012905090565b5f6110c361102b61208f565b846110be8560015f61103b61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612be090919063ffffffff16565b612096565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61115861208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dd90613aa6565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506112098160016117ad565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611292573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b69190613d34565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561131b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061133f9190613d34565b6040518363ffffffff1660e01b815260040161135c929190613d5f565b6020604051808303815f875af1158015611378573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139c9190613d34565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061140760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016117ad565b61143360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c3d565b5f4790505f6064605a61144530611615565b61144f9190613d86565b6114599190613df4565b90506114873060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161150d96959493929190613e5d565b60606040518083038185885af1158015611529573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061154e9190613ed0565b505050505050565b600d5481565b61156461208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613aa6565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61166261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613aa6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117b561208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90613aa6565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b6060600480546118e590613bb9565b80601f016020809104026020016040519081016040528092919081815260200182805461191190613bb9565b801561195c5780601f106119335761010080835404028352916020019161195c565b820191905f5260205f20905b81548152906001019060200180831161193f57829003601f168201915b5050505050905090565b61196e61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390613aa6565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613f90565b60405180910390fd5b611a958282612c3d565b5050565b611aa161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2690613aa6565b60405180910390fd5b5f611b3930611615565b90505f8111611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061401e565b60405180910390fd5b611ba930600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612259565b50565b60175481565b5f611c70611bbe61208f565b84611c6b8560405180606001604052806025815260200161470e6025913960015f611be761208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b6001905092915050565b5f611c8d611c8661208f565b8484612259565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611cc861208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613aa6565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611df091906137ff565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611e9261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1790613aa6565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611f4361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890613aa6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906140ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061413a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224c91906138c6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614256565b60405180910390fd5b5f810361234c5761234783835f612cdb565b612b79565b600f5f9054906101000a900460ff16156127415761236861189b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123d657506123a661189b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561240e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612448575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124615750600960149054906101000a900460ff16155b1561274057601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125035750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125aa57600c5481111561254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906142e4565b60405180910390fd5b600e5461255983611615565b826125649190613af1565b11156125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c9061434c565b60405180910390fd5b61273f565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126475750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561269657600c54811115612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906143da565b60405180910390fd5b61273e565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661273d57600e546126f083611615565b826126fb9190613af1565b111561273c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127339061434c565b60405180910390fd5b5b5b5b5b5b5f61274b30611615565b90505f600d5482101590508080156127705750600960149054906101000a900460ff16155b80156127c35750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612816575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612869575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128ac576001600960146101000a81548160ff021916908315150217905550612891612f64565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061295b575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612964575f90505b5f8115612b6957601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129c257505f601354115b15612a5a576129ef60646129e16013548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060135460155482612a029190613d86565b612a0c9190613df4565b60165f828254612a1c9190613af1565b9250508190555060135460145482612a349190613d86565b612a3e9190613df4565b60175f828254612a4e9190613af1565b92505081905550612b46565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ab157505f601054115b15612b4557612ade6064612ad06010548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060105460125482612af19190613d86565b612afb9190613df4565b60165f828254612b0b9190613af1565b9250508190555060105460115482612b239190613d86565b612b2d9190613df4565b60175f828254612b3d9190613af1565b925050819055505b5b5f811115612b5a57612b59873083612cdb565b5b8085612b6691906143f8565b94505b612b74878787612cdb565b505050505b505050565b5f838311158290612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc919061372d565b60405180910390fd5b505f8385612bd391906143f8565b9050809150509392505050565b5f808284612bee9190613af1565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614475565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90614256565b60405180910390fd5b612dc283838361324a565b612e2b816040518060600160405280602681526020016146c0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612be090919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f5791906138c6565b60405180910390a3505050565b5f612f6e30611615565b90505f601754601654612f819190613af1565b90505f80831480612f9157505f82145b15612f9e57505050613188565b5f1515600f60019054906101000a900460ff16151503612fe5576014600d54612fc79190613d86565b831115612fe0576014600d54612fdd9190613d86565b92505b612ff1565b612fee30611615565b92505b5f600283601654866130039190613d86565b61300d9190613df4565b6130179190613df4565b90505f61302d828661324f90919063ffffffff16565b90505f47905061303c82613298565b5f613050824761324f90919063ffffffff16565b90505f61307a8761306c6017548561318a90919063ffffffff16565b61320190919063ffffffff16565b90505f818361308991906143f8565b90505f6016819055505f6017819055505f861180156130a757505f81115b156130f4576130b686826134ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130eb93929190614493565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313990613ca4565b5f6040518083038185875af1925050503d805f8114613173576040519150601f19603f3d011682016040523d82523d5f602084013e613178565b606091505b5050809750505050505050505050505b565b5f80830361319a575f90506131fb565b5f82846131a79190613d86565b90508284826131b69190613df4565b146131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90614538565b60405180910390fd5b809150505b92915050565b5f61324283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135a7565b905092915050565b505050565b5f61329083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b7e565b905092915050565b5f600267ffffffffffffffff8111156132b4576132b3614556565b5b6040519080825280602002602001820160405280156132e25781602001602082028036833780820191505090505b50905030815f815181106132f9576132f8614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c19190613d34565b816001815181106133d5576133d4614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349d959493929190614667565b5f604051808303815f87803b1580156134b4575f80fd5b505af11580156134c6573d5f803e3d5ffd5b505050505050565b6134fa3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161355f96959493929190613e5d565b60606040518083038185885af115801561357b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135a09190613ed0565b5050505050565b5f80831182906135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e4919061372d565b60405180910390fd5b505f83856135fb9190613df4565b9050809150509392505050565b5f80fd5b5f819050919050565b61361e8161360c565b8114613628575f80fd5b50565b5f8135905061363981613615565b92915050565b5f805f806080858703121561365757613656613608565b5b5f6136648782880161362b565b94505060206136758782880161362b565b93505060406136868782880161362b565b92505060606136978782880161362b565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156136da5780820151818401526020810190506136bf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6136ff826136a3565b61370981856136ad565b93506137198185602086016136bd565b613722816136e5565b840191505092915050565b5f6020820190508181035f83015261374581846136f5565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137768261374d565b9050919050565b6137868161376c565b8114613790575f80fd5b50565b5f813590506137a18161377d565b92915050565b5f80604083850312156137bd576137bc613608565b5b5f6137ca85828601613793565b92505060206137db8582860161362b565b9150509250929050565b5f8115159050919050565b6137f9816137e5565b82525050565b5f6020820190506138125f8301846137f0565b92915050565b5f6020828403121561382d5761382c613608565b5b5f61383a84828501613793565b91505092915050565b5f819050919050565b5f61386661386161385c8461374d565b613843565b61374d565b9050919050565b5f6138778261384c565b9050919050565b5f6138888261386d565b9050919050565b6138988161387e565b82525050565b5f6020820190506138b15f83018461388f565b92915050565b6138c08161360c565b82525050565b5f6020820190506138d95f8301846138b7565b92915050565b5f805f606084860312156138f6576138f5613608565b5b5f61390386828701613793565b935050602061391486828701613793565b92505060406139258682870161362b565b9150509250925092565b5f60ff82169050919050565b6139448161392f565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c8161376c565b82525050565b5f6020820190506139855f830184613963565b92915050565b613994816137e5565b811461399e575f80fd5b50565b5f813590506139af8161398b565b92915050565b5f602082840312156139ca576139c9613608565b5b5f6139d7848285016139a1565b91505092915050565b5f80604083850312156139f6576139f5613608565b5b5f613a0385828601613793565b9250506020613a14858286016139a1565b9150509250929050565b5f8060408385031215613a3457613a33613608565b5b5f613a4185828601613793565b9250506020613a5285828601613793565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a906020836136ad565b9150613a9b82613a5c565b602082019050919050565b5f6020820190508181035f830152613abd81613a84565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613afb8261360c565b9150613b068361360c565b9250828201905080821115613b1e57613b1d613ac4565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613b586013836136ad565b9150613b6382613b24565b602082019050919050565b5f6020820190508181035f830152613b8581613b4c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613bd057607f821691505b602082108103613be357613be2613b8c565b5b50919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c436022836136ad565b9150613c4e82613be9565b604082019050919050565b5f6020820190508181035f830152613c7081613c37565b9050919050565b5f81905092915050565b50565b5f613c8f5f83613c77565b9150613c9a82613c81565b5f82019050919050565b5f613cae82613c84565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613cec601b836136ad565b9150613cf782613cb8565b602082019050919050565b5f6020820190508181035f830152613d1981613ce0565b9050919050565b5f81519050613d2e8161377d565b92915050565b5f60208284031215613d4957613d48613608565b5b5f613d5684828501613d20565b91505092915050565b5f604082019050613d725f830185613963565b613d7f6020830184613963565b9392505050565b5f613d908261360c565b9150613d9b8361360c565b9250828202613da98161360c565b91508282048414831517613dc057613dbf613ac4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613dfe8261360c565b9150613e098361360c565b925082613e1957613e18613dc7565b5b828204905092915050565b5f819050919050565b5f613e47613e42613e3d84613e24565b613843565b61360c565b9050919050565b613e5781613e2d565b82525050565b5f60c082019050613e705f830189613963565b613e7d60208301886138b7565b613e8a6040830187613e4e565b613e976060830186613e4e565b613ea46080830185613963565b613eb160a08301846138b7565b979650505050505050565b5f81519050613eca81613615565b92915050565b5f805f60608486031215613ee757613ee6613608565b5b5f613ef486828701613ebc565b9350506020613f0586828701613ebc565b9250506040613f1686828701613ebc565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613f7a6039836136ad565b9150613f8582613f20565b604082019050919050565b5f6020820190508181035f830152613fa781613f6e565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f6140086024836136ad565b915061401382613fae565b604082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6140966024836136ad565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141246022836136ad565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141b26025836136ad565b91506141bd82614158565b604082019050919050565b5f6020820190508181035f8301526141df816141a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6142406023836136ad565b915061424b826141e6565b604082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6142ce6035836136ad565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6143366013836136ad565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6143c46036836136ad565b91506143cf8261436a565b604082019050919050565b5f6020820190508181035f8301526143f1816143b8565b9050919050565b5f6144028261360c565b915061440d8361360c565b925082820390508181111561442557614424613ac4565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61445f601b836136ad565b915061446a8261442b565b602082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f6060820190506144a65f8301866138b7565b6144b360208301856138b7565b6144c060408301846138b7565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145226021836136ad565b915061452d826144c8565b604082019050919050565b5f6020820190508181035f83015261454f81614516565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145e28161376c565b82525050565b5f6145f383836145d9565b60208301905092915050565b5f602082019050919050565b5f614615826145b0565b61461f81856145ba565b935061462a836145ca565b805f5b8381101561465a57815161464188826145e8565b975061464c836145ff565b92505060018101905061462d565b5085935050505092915050565b5f60a08201905061467a5f8301886138b7565b6146876020830187613e4e565b8181036040830152614699818661460b565b90506146a86060830185613963565b6146b560808301846138b7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122062127e88f1b0c34512ea9118a3850005f70ae3458ae6430b9d33a7d629b046e364736f6c63430008150033

Deployed Bytecode Sourcemap

17566:12647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23020:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4829:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5743:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18034:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22070:311;;;;;;;;;;;;;:::i;:::-;;18607:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17735:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5150:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24170:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18316:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18215:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18249:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5920:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5049:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6283:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18117:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17993:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17783:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24343:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21013:1039;;;;;;;;;;;;;:::i;:::-;;17951:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22747:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18150:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5266:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10810:148;;;;;;;;;;;;;:::i;:::-;;22864:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10596:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18071:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4937:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23719:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22389:256;;;;;;;;;;;;;:::i;:::-;;18356:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6509:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5401:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18830:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17851:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18281:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23528:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17915:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5584:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18181:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22653:85;;;;;;;;;;;;;:::i;:::-;;10966:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23020:500;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23195:7:::1;23183:9;:19;;;;23225:7;23213:9;:19;;;;23269:9;;23257;;:21;;;;:::i;:::-;23243:11;:35;;;;23302:8;23289:10;:21;;;;23334:8;23321:10;:21;;;;23381:10;;23368;;:23;;;;:::i;:::-;23353:12;:38;;;;23425:2;23410:11;;:17;;23402:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23486:2;23470:12;;:18;;23462:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;23020:500:::0;;;;:::o;4829:100::-;4883:13;4916:5;4909:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4829:100;:::o;5743:169::-;5826:4;5843:39;5852:12;:10;:12::i;:::-;5866:7;5875:6;5843:8;:39::i;:::-;5900:4;5893:11;;5743:169;;;;:::o;18034:30::-;;;;;;;;;;;;;:::o;22070:311::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22126:18:::1;22147:21;22126:42;;22200:1;22187:10;:14;22179:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22252:12;22277:9;;;;;;;;;;;22269:23;;22300:10;22269:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22251:64;;;22334:7;22326:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22115:266;;22070:311::o:0;18607:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17735:41::-;;;;;;;;;;;;;:::o;5150:108::-;5211:7;5238:12;;5231:19;;5150:108;:::o;24170:165::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24282:9:::1;;;;;;;;;;;24251:41;;24268:12;24251:41;;;;;;;;;;;;24315:12;24303:9;;:24;;;;;;;;;;;;;;;;;;24170:165:::0;:::o;18316:33::-;;;;:::o;18215:27::-;;;;:::o;18249:25::-;;;;:::o;5920:355::-;6060:4;6077:36;6087:6;6095:9;6106:6;6077:9;:36::i;:::-;6124:121;6133:6;6141:12;:10;:12::i;:::-;6155:89;6193:6;6155:89;;;;;;;;;;;;;;;;;:11;:19;6167:6;6155:19;;;;;;;;;;;;;;;:33;6175:12;:10;:12::i;:::-;6155:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6124:8;:121::i;:::-;6263:4;6256:11;;5920:355;;;;;:::o;5049:93::-;5107:5;5132:2;5125:9;;5049:93;:::o;6283:218::-;6371:4;6388:83;6397:12;:10;:12::i;:::-;6411:7;6420:50;6459:10;6420:11;:25;6432:12;:10;:12::i;:::-;6420:25;;;;;;;;;;;;;;;:34;6446:7;6420:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6388:8;:83::i;:::-;6489:4;6482:11;;6283:218;;;;:::o;18117:26::-;;;;:::o;17993:31::-;;;;:::o;17783:28::-;;;;;;;;;;;;;:::o;24343:125::-;24408:4;24432:19;:28;24452:7;24432:28;;;;;;;;;;;;;;;;;;;;;;;;;24425:35;;24343:125;;;:::o;21013:1039::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21068:35:::1;21125:42;21068:100;;21182:58;21216:16;21235:4;21182:25;:58::i;:::-;21269:16;21251:15;;:34;;;;;;;;;;;;;;;;;;21333:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21315:56;;;21380:4;21387:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21315:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21299:13;;:112;;;;;;;;;;;;;;;;;;21422:55;21456:13;;;;;;;;;;;21472:4;21422:25;:55::i;:::-;21488:58;21525:13;;;;;;;;;;;21541:4;21488:28;:58::i;:::-;21567:17;21587:21;21567:41;;21619:19;21673:3;21668:2;21641:24;21659:4;21641:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21619:57;;21707:62;21724:4;21739:15;;;;;;;;;;;21757:11;21707:8;:62::i;:::-;21782:15;;;;;;;;;;;:31;;;21821:9;21854:4;21874:11;21904:1;21951::::0;21994:9:::1;;;;;;;;;;;22018:15;21782:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21051:1001;;;21013:1039::o:0;17951:35::-;;;;:::o;22747:108::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22840:7:::1;22820:17;;:27;;;;;;;;;;;;;;;;;;22747:108:::0;:::o;18150:24::-;;;;:::o;5266:127::-;5340:7;5367:9;:18;5377:7;5367:18;;;;;;;;;;;;;;;;5360:25;;5266:127;;;:::o;10810:148::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10917:1:::1;10880:40;;10901:6;;;;;;;;;;;10880:40;;;;;;;;;;;;10948:1;10931:6;;:19;;;;;;;;;;;;;;;;;;10810:148::o:0;22864:144::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22996:4:::1;22954:31;:39;22986:6;22954:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22864:144:::0;;:::o;10596:79::-;10634:7;10661:6;;;;;;;;;;;10654:13;;10596:79;:::o;18071:37::-;;;;;;;;;;;;;:::o;4937:104::-;4993:13;5026:7;5019:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4937:104;:::o;23719:245::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23826:13:::1;;;;;;;;;;;23818:21;;:4;:21;;::::0;23810:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23915:41;23944:4;23950:5;23915:28;:41::i;:::-;23719:245:::0;;:::o;22389:256::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22454:20:::1;22477:24;22495:4;22477:9;:24::i;:::-;22454:47;;22535:1;22520:12;:16;22512:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22588:49;22606:4;22613:9;;;;;;;;;;;22624:12;22588:9;:49::i;:::-;22443:202;22389:256::o:0;18356:27::-;;;;:::o;6509:269::-;6602:4;6619:129;6628:12;:10;:12::i;:::-;6642:7;6651:96;6690:15;6651:96;;;;;;;;;;;;;;;;;:11;:25;6663:12;:10;:12::i;:::-;6651:25;;;;;;;;;;;;;;;:34;6677:7;6651:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6619:8;:129::i;:::-;6766:4;6759:11;;6509:269;;;;:::o;5401:175::-;5487:4;5504:42;5514:12;:10;:12::i;:::-;5528:9;5539:6;5504:9;:42::i;:::-;5564:4;5557:11;;5401:175;;;;:::o;18830:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17851:22::-;;;;:::o;18281:25::-;;;;:::o;23528:182::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23644:8:::1;23613:19;:28;23633:7;23613:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23684:7;23668:34;;;23693:8;23668:34;;;;;;:::i;:::-;;;;;;;;23528:182:::0;;:::o;17915:29::-;;;;:::o;5584:151::-;5673:7;5700:11;:18;5712:5;5700:18;;;;;;;;;;;;;;;:27;5719:7;5700:27;;;;;;;;;;;;;;;;5693:34;;5584:151;;;;:::o;18181:24::-;;;;:::o;22653:85::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22725:5:::1;22711:11;;:19;;;;;;;;;;;;;;;;;;22653:85::o:0;10966:169::-;10733:12;:10;:12::i;:::-;10723:22;;:6;;;;;;;;;;;:22;;;10715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11090:8:::1;11061:38;;11082:6;;;;;;;;;;;11061:38;;;;;;;;;;;;11119:8;11110:6;;:17;;;;;;;;;;;;;;;;;;10966:169:::0;:::o;182:98::-;235:7;262:10;255:17;;182:98;:::o;8185:381::-;8338:1;8321:19;;:5;:19;;;8313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8419:1;8400:21;;:7;:21;;;8392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8504:6;8474:11;:18;8486:5;8474:18;;;;;;;;;;;;;;;:27;8493:7;8474:27;;;;;;;;;;;;;;;:36;;;;8542:7;8526:32;;8535:5;8526:32;;;8551:6;8526:32;;;;;;:::i;:::-;;;;;;;;8185:381;;;:::o;24477:3112::-;24625:1;24609:18;;:4;:18;;;24601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24702:1;24688:16;;:2;:16;;;24680:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24769:1;24759:6;:11;24756:92;;24787:28;24803:4;24809:2;24813:1;24787:15;:28::i;:::-;24830:7;;24756:92;24864:11;;;;;;;;;;;24861:1083;;;24921:7;:5;:7::i;:::-;24913:15;;:4;:15;;;;:49;;;;;24955:7;:5;:7::i;:::-;24949:13;;:2;:13;;;;24913:49;:86;;;;;24997:1;24983:16;;:2;:16;;;;24913:86;:128;;;;;25034:6;25020:21;;:2;:21;;;;24913:128;:160;;;;;25063:10;;;;;;;;;;;25062:11;24913:160;24891:1042;;;25157:25;:31;25183:4;25157:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25193:31;:35;25225:2;25193:35;;;;;;;;;;;;;;;;;;;;;;;;;25192:36;25157:71;25153:765;;;25275:14;;25265:6;:24;;25257:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25408:16;;25391:13;25401:2;25391:9;:13::i;:::-;25382:6;:22;;;;:::i;:::-;:42;;25374:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25153:765;;;25527:25;:29;25553:2;25527:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25561:31;:37;25593:4;25561:37;;;;;;;;;;;;;;;;;;;;;;;;;25560:38;25527:71;25523:395;;;25645:14;;25635:6;:24;;25627:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25523:395;;;25765:31;:35;25797:2;25765:35;;;;;;;;;;;;;;;;;;;;;;;;;25761:157;;25858:16;;25841:13;25851:2;25841:9;:13::i;:::-;25832:6;:22;;;;:::i;:::-;:42;;25824:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25761:157;25523:395;25153:765;24891:1042;24861:1083;25957:28;25988:24;26006:4;25988:9;:24::i;:::-;25957:55;;26026:12;26065:20;;26041;:44;;26026:59;;26117:7;:35;;;;;26142:10;;;;;;;;;;;26141:11;26117:35;:84;;;;;26170:25;:31;26196:4;26170:31;;;;;;;;;;;;;;;;;;;;;;;;;26169:32;26117:84;:127;;;;;26219:19;:25;26239:4;26219:25;;;;;;;;;;;;;;;;;;;;;;;;;26218:26;26117:127;:168;;;;;26262:19;:23;26282:2;26262:23;;;;;;;;;;;;;;;;;;;;;;;;;26261:24;26117:168;26099:306;;;26325:4;26312:10;;:17;;;;;;;;;;;;;;;;;;26347:10;:8;:10::i;:::-;26388:5;26375:10;;:18;;;;;;;;;;;;;;;;;;26099:306;26418:12;26434:10;;;;;;;;;;;26433:11;26418:26;;26546:19;:25;26566:4;26546:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26575:19;:23;26595:2;26575:23;;;;;;;;;;;;;;;;;;;;;;;;;26546:52;26543:99;;;26625:5;26615:15;;26543:99;26655:12;26759:7;26756:779;;;26810:25;:29;26836:2;26810:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26858:1;26843:12;;:16;26810:49;26806:576;;;26886:33;26915:3;26886:24;26897:12;;26886:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26879:40;;26980:12;;26967:10;;26960:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26938:18;;:54;;;;;;;:::i;:::-;;;;;;;;27047:12;;27034:10;;27027:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27011:12;;:48;;;;;;;:::i;:::-;;;;;;;;26806:576;;;27120:25;:31;27146:4;27120:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27169:1;27155:11;;:15;27120:50;27117:265;;;27198:32;27226:3;27198:23;27209:11;;27198:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27191:39;;27290:11;;27278:9;;27271:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27249:18;;:52;;;;;;;:::i;:::-;;;;;;;;27355:11;;27343:9;;27336:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27320:12;;:46;;;;;;;:::i;:::-;;;;;;;;27117:265;26806:576;27409:1;27402:4;:8;27399:93;;;27434:42;27450:4;27464;27471;27434:15;:42::i;:::-;27399:93;27519:4;27509:14;;;;;:::i;:::-;;;26756:779;27548:33;27564:4;27570:2;27574:6;27548:15;:33::i;:::-;24590:2999;;;;24477:3112;;;;:::o;9073:193::-;9159:7;9192:1;9187;:6;;9195:12;9179:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9219:9;9235:1;9231;:5;;;;:::i;:::-;9219:17;;9257:1;9250:8;;;9073:193;;;;;:::o;8739:182::-;8797:7;8817:9;8833:1;8829;:5;;;;:::i;:::-;8817:17;;8858:1;8853;:6;;8845:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8912:1;8905:8;;;8739:182;;;;:::o;23973:189::-;24090:5;24056:25;:31;24082:4;24056:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24148:5;24114:40;;24142:4;24114:40;;;;;;;;;;;;23973:189;;:::o;6786:575::-;6944:1;6926:20;;:6;:20;;;6918:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7028:1;7007:23;;:9;:23;;;6999:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7084:47;7105:6;7113:9;7124:6;7084:20;:47::i;:::-;7165:71;7187:6;7165:71;;;;;;;;;;;;;;;;;:9;:17;7175:6;7165:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7145:9;:17;7155:6;7145:17;;;;;;;;;;;;;;;:91;;;;7270:32;7295:6;7270:9;:20;7280:9;7270:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7247:9;:20;7257:9;7247:20;;;;;;;;;;;;;;;:55;;;;7335:9;7318:35;;7327:6;7318:35;;;7346:6;7318:35;;;;;;:::i;:::-;;;;;;;;6786:575;;;:::o;28733:1477::-;28772:23;28798:24;28816:4;28798:9;:24::i;:::-;28772:50;;28833:25;28882:12;;28861:18;;:33;;;;:::i;:::-;28833:61;;28905:12;28953:1;28934:15;:20;:46;;;;28979:1;28958:17;:22;28934:46;28931:60;;;28983:7;;;;;28931:60;29028:5;29007:26;;:17;;;;;;;;;;;:26;;;29004:254;;29093:2;29070:20;;:25;;;;:::i;:::-;29052:15;:43;29049:125;;;29156:2;29133:20;;:25;;;;:::i;:::-;29115:43;;29049:125;29004:254;;;29222:24;29240:4;29222:9;:24::i;:::-;29204:42;;29004:254;29330:23;29415:1;29395:17;29374:18;;29356:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29330:86;;29427:26;29456:36;29476:15;29456;:19;;:36;;;;:::i;:::-;29427:65;;29506:25;29534:21;29506:49;;29569:36;29586:18;29569:16;:36::i;:::-;29620:18;29641:44;29667:17;29641:21;:25;;:44;;;;:::i;:::-;29620:65;;29699:17;29719:51;29752:17;29719:28;29734:12;;29719:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29699:71;;29781:23;29820:9;29807:10;:22;;;;:::i;:::-;29781:48;;29867:1;29846:18;:22;;;;29894:1;29879:12;:16;;;;29930:1;29912:15;:19;:42;;;;;29953:1;29935:15;:19;29912:42;29909:210;;;29970:46;29983:15;30000;29970:12;:46::i;:::-;30036:71;30051:18;30071:15;30088:18;;30036:71;;;;;;;;:::i;:::-;;;;;;;;29909:210;30153:9;;;;;;;;;;;30145:23;;30176:21;30145:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30132:70;;;;;28761:1449;;;;;;;;;28733:1477;:::o;9274:254::-;9332:7;9363:1;9358;:6;9354:47;;9388:1;9381:8;;;;9354:47;9414:9;9430:1;9426;:5;;;;:::i;:::-;9414:17;;9459:1;9454;9450;:5;;;;:::i;:::-;:10;9442:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9519:1;9512:8;;;9274:254;;;;;:::o;9536:132::-;9594:7;9621:39;9625:1;9628;9621:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9614:46;;9536:132;;;;:::o;8574:125::-;;;;:::o;8929:136::-;8987:7;9014:43;9018:1;9021;9014:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9007:50;;8929:136;;;;:::o;27598:597::-;27727:21;27765:1;27751:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27727:40;;27796:4;27778;27783:1;27778:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27822:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27812:4;27817:1;27812:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27858:62;27875:4;27890:15;;;;;;;;;;;27908:11;27858:8;:62::i;:::-;27960:15;;;;;;;;;;;:66;;;28041:11;28067:1;28111:4;28138;28158:15;27960:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27653:542;27598:597;:::o;28204:520::-;28352:62;28369:4;28384:15;;;;;;;;;;;28402:11;28352:8;:62::i;:::-;28458:15;;;;;;;;;;;:31;;;28497:9;28530:4;28550:11;28576:1;28619;28670:4;28690:15;28458:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28204:520;;:::o;9676:279::-;9762:7;9794:1;9790;:5;9797:12;9782:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9821:9;9837:1;9833;:5;;;;:::i;:::-;9821:17;;9946:1;9939:8;;;9676:279;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:765::-;776:6;784;792;800;849:3;837:9;828:7;824:23;820:33;817:120;;;856:79;;:::i;:::-;817:120;976:1;1001:53;1046:7;1037:6;1026:9;1022:22;1001:53;:::i;:::-;991:63;;947:117;1103:2;1129:53;1174:7;1165:6;1154:9;1150:22;1129:53;:::i;:::-;1119:63;;1074:118;1231:2;1257:53;1302:7;1293:6;1282:9;1278:22;1257:53;:::i;:::-;1247:63;;1202:118;1359:2;1385:53;1430:7;1421:6;1410:9;1406:22;1385:53;:::i;:::-;1375:63;;1330:118;690:765;;;;;;;:::o;1461:99::-;1513:6;1547:5;1541:12;1531:22;;1461:99;;;:::o;1566:169::-;1650:11;1684:6;1679:3;1672:19;1724:4;1719:3;1715:14;1700:29;;1566:169;;;;:::o;1741:246::-;1822:1;1832:113;1846:6;1843:1;1840:13;1832:113;;;1931:1;1926:3;1922:11;1916:18;1912:1;1907:3;1903:11;1896:39;1868:2;1865:1;1861:10;1856:15;;1832:113;;;1979:1;1970:6;1965:3;1961:16;1954:27;1803:184;1741:246;;;:::o;1993:102::-;2034:6;2085:2;2081:7;2076:2;2069:5;2065:14;2061:28;2051:38;;1993:102;;;:::o;2101:377::-;2189:3;2217:39;2250:5;2217:39;:::i;:::-;2272:71;2336:6;2331:3;2272:71;:::i;:::-;2265:78;;2352:65;2410:6;2405:3;2398:4;2391:5;2387:16;2352:65;:::i;:::-;2442:29;2464:6;2442:29;:::i;:::-;2437:3;2433:39;2426:46;;2193:285;2101:377;;;;:::o;2484:313::-;2597:4;2635:2;2624:9;2620:18;2612:26;;2684:9;2678:4;2674:20;2670:1;2659:9;2655:17;2648:47;2712:78;2785:4;2776:6;2712:78;:::i;:::-;2704:86;;2484:313;;;;:::o;2803:126::-;2840:7;2880:42;2873:5;2869:54;2858:65;;2803:126;;;:::o;2935:96::-;2972:7;3001:24;3019:5;3001:24;:::i;:::-;2990:35;;2935:96;;;:::o;3037:122::-;3110:24;3128:5;3110:24;:::i;:::-;3103:5;3100:35;3090:63;;3149:1;3146;3139:12;3090:63;3037:122;:::o;3165:139::-;3211:5;3249:6;3236:20;3227:29;;3265:33;3292:5;3265:33;:::i;:::-;3165:139;;;;:::o;3310:474::-;3378:6;3386;3435:2;3423:9;3414:7;3410:23;3406:32;3403:119;;;3441:79;;:::i;:::-;3403:119;3561:1;3586:53;3631:7;3622:6;3611:9;3607:22;3586:53;:::i;:::-;3576:63;;3532:117;3688:2;3714:53;3759:7;3750:6;3739:9;3735:22;3714:53;:::i;:::-;3704:63;;3659:118;3310:474;;;;;:::o;3790:90::-;3824:7;3867:5;3860:13;3853:21;3842:32;;3790:90;;;:::o;3886:109::-;3967:21;3982:5;3967:21;:::i;:::-;3962:3;3955:34;3886:109;;:::o;4001:210::-;4088:4;4126:2;4115:9;4111:18;4103:26;;4139:65;4201:1;4190:9;4186:17;4177:6;4139:65;:::i;:::-;4001:210;;;;:::o;4217:329::-;4276:6;4325:2;4313:9;4304:7;4300:23;4296:32;4293:119;;;4331:79;;:::i;:::-;4293:119;4451:1;4476:53;4521:7;4512:6;4501:9;4497:22;4476:53;:::i;:::-;4466:63;;4422:117;4217:329;;;;:::o;4552:60::-;4580:3;4601:5;4594:12;;4552:60;;;:::o;4618:142::-;4668:9;4701:53;4719:34;4728:24;4746:5;4728:24;:::i;:::-;4719:34;:::i;:::-;4701:53;:::i;:::-;4688:66;;4618:142;;;:::o;4766:126::-;4816:9;4849:37;4880:5;4849:37;:::i;:::-;4836:50;;4766:126;;;:::o;4898:153::-;4975:9;5008:37;5039:5;5008:37;:::i;:::-;4995:50;;4898:153;;;:::o;5057:185::-;5171:64;5229:5;5171:64;:::i;:::-;5166:3;5159:77;5057:185;;:::o;5248:276::-;5368:4;5406:2;5395:9;5391:18;5383:26;;5419:98;5514:1;5503:9;5499:17;5490:6;5419:98;:::i;:::-;5248:276;;;;:::o;5530:118::-;5617:24;5635:5;5617:24;:::i;:::-;5612:3;5605:37;5530:118;;:::o;5654:222::-;5747:4;5785:2;5774:9;5770:18;5762:26;;5798:71;5866:1;5855:9;5851:17;5842:6;5798:71;:::i;:::-;5654:222;;;;:::o;5882:619::-;5959:6;5967;5975;6024:2;6012:9;6003:7;5999:23;5995:32;5992:119;;;6030:79;;:::i;:::-;5992:119;6150:1;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6121:117;6277:2;6303:53;6348:7;6339:6;6328:9;6324:22;6303:53;:::i;:::-;6293:63;;6248:118;6405:2;6431:53;6476:7;6467:6;6456:9;6452:22;6431:53;:::i;:::-;6421:63;;6376:118;5882:619;;;;;:::o;6507:86::-;6542:7;6582:4;6575:5;6571:16;6560:27;;6507:86;;;:::o;6599:112::-;6682:22;6698:5;6682:22;:::i;:::-;6677:3;6670:35;6599:112;;:::o;6717:214::-;6806:4;6844:2;6833:9;6829:18;6821:26;;6857:67;6921:1;6910:9;6906:17;6897:6;6857:67;:::i;:::-;6717:214;;;;:::o;6937:118::-;7024:24;7042:5;7024:24;:::i;:::-;7019:3;7012:37;6937:118;;:::o;7061:222::-;7154:4;7192:2;7181:9;7177:18;7169:26;;7205:71;7273:1;7262:9;7258:17;7249:6;7205:71;:::i;:::-;7061:222;;;;:::o;7289:116::-;7359:21;7374:5;7359:21;:::i;:::-;7352:5;7349:32;7339:60;;7395:1;7392;7385:12;7339:60;7289:116;:::o;7411:133::-;7454:5;7492:6;7479:20;7470:29;;7508:30;7532:5;7508:30;:::i;:::-;7411:133;;;;:::o;7550:323::-;7606:6;7655:2;7643:9;7634:7;7630:23;7626:32;7623:119;;;7661:79;;:::i;:::-;7623:119;7781:1;7806:50;7848:7;7839:6;7828:9;7824:22;7806:50;:::i;:::-;7796:60;;7752:114;7550:323;;;;:::o;7879:468::-;7944:6;7952;8001:2;7989:9;7980:7;7976:23;7972:32;7969:119;;;8007:79;;:::i;:::-;7969:119;8127:1;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8098:117;8254:2;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8225:115;7879:468;;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::o;8833:182::-;8973:34;8969:1;8961:6;8957:14;8950:58;8833:182;:::o;9021:366::-;9163:3;9184:67;9248:2;9243:3;9184:67;:::i;:::-;9177:74;;9260:93;9349:3;9260:93;:::i;:::-;9378:2;9373:3;9369:12;9362:19;;9021:366;;;:::o;9393:419::-;9559:4;9597:2;9586:9;9582:18;9574:26;;9646:9;9640:4;9636:20;9632:1;9621:9;9617:17;9610:47;9674:131;9800:4;9674:131;:::i;:::-;9666:139;;9393:419;;;:::o;9818:180::-;9866:77;9863:1;9856:88;9963:4;9960:1;9953:15;9987:4;9984:1;9977:15;10004:191;10044:3;10063:20;10081:1;10063:20;:::i;:::-;10058:25;;10097:20;10115:1;10097:20;:::i;:::-;10092:25;;10140:1;10137;10133:9;10126:16;;10161:3;10158:1;10155:10;10152:36;;;10168:18;;:::i;:::-;10152:36;10004:191;;;;:::o;10201:169::-;10341:21;10337:1;10329:6;10325:14;10318:45;10201:169;:::o;10376:366::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10376:366;;;:::o;10748:419::-;10914:4;10952:2;10941:9;10937:18;10929:26;;11001:9;10995:4;10991:20;10987:1;10976:9;10972:17;10965:47;11029:131;11155:4;11029:131;:::i;:::-;11021:139;;10748:419;;;:::o;11173:180::-;11221:77;11218:1;11211:88;11318:4;11315:1;11308:15;11342:4;11339:1;11332:15;11359:320;11403:6;11440:1;11434:4;11430:12;11420:22;;11487:1;11481:4;11477:12;11508:18;11498:81;;11564:4;11556:6;11552:17;11542:27;;11498:81;11626:2;11618:6;11615:14;11595:18;11592:38;11589:84;;11645:18;;:::i;:::-;11589:84;11410:269;11359:320;;;:::o;11685:221::-;11825:34;11821:1;11813:6;11809:14;11802:58;11894:4;11889:2;11881:6;11877:15;11870:29;11685:221;:::o;11912:366::-;12054:3;12075:67;12139:2;12134:3;12075:67;:::i;:::-;12068:74;;12151:93;12240:3;12151:93;:::i;:::-;12269:2;12264:3;12260:12;12253:19;;11912:366;;;:::o;12284:419::-;12450:4;12488:2;12477:9;12473:18;12465:26;;12537:9;12531:4;12527:20;12523:1;12512:9;12508:17;12501:47;12565:131;12691:4;12565:131;:::i;:::-;12557:139;;12284:419;;;:::o;12709:147::-;12810:11;12847:3;12832:18;;12709:147;;;;:::o;12862:114::-;;:::o;12982:398::-;13141:3;13162:83;13243:1;13238:3;13162:83;:::i;:::-;13155:90;;13254:93;13343:3;13254:93;:::i;:::-;13372:1;13367:3;13363:11;13356:18;;12982:398;;;:::o;13386:379::-;13570:3;13592:147;13735:3;13592:147;:::i;:::-;13585:154;;13756:3;13749:10;;13386:379;;;:::o;13771:177::-;13911:29;13907:1;13899:6;13895:14;13888:53;13771:177;:::o;13954:366::-;14096:3;14117:67;14181:2;14176:3;14117:67;:::i;:::-;14110:74;;14193:93;14282:3;14193:93;:::i;:::-;14311:2;14306:3;14302:12;14295:19;;13954:366;;;:::o;14326:419::-;14492:4;14530:2;14519:9;14515:18;14507:26;;14579:9;14573:4;14569:20;14565:1;14554:9;14550:17;14543:47;14607:131;14733:4;14607:131;:::i;:::-;14599:139;;14326:419;;;:::o;14751:143::-;14808:5;14839:6;14833:13;14824:22;;14855:33;14882:5;14855:33;:::i;:::-;14751:143;;;;:::o;14900:351::-;14970:6;15019:2;15007:9;14998:7;14994:23;14990:32;14987:119;;;15025:79;;:::i;:::-;14987:119;15145:1;15170:64;15226:7;15217:6;15206:9;15202:22;15170:64;:::i;:::-;15160:74;;15116:128;14900:351;;;;:::o;15257:332::-;15378:4;15416:2;15405:9;15401:18;15393:26;;15429:71;15497:1;15486:9;15482:17;15473:6;15429:71;:::i;:::-;15510:72;15578:2;15567:9;15563:18;15554:6;15510:72;:::i;:::-;15257:332;;;;;:::o;15595:410::-;15635:7;15658:20;15676:1;15658:20;:::i;:::-;15653:25;;15692:20;15710:1;15692:20;:::i;:::-;15687:25;;15747:1;15744;15740:9;15769:30;15787:11;15769:30;:::i;:::-;15758:41;;15948:1;15939:7;15935:15;15932:1;15929:22;15909:1;15902:9;15882:83;15859:139;;15978:18;;:::i;:::-;15859:139;15643:362;15595:410;;;;:::o;16011:180::-;16059:77;16056:1;16049:88;16156:4;16153:1;16146:15;16180:4;16177:1;16170:15;16197:185;16237:1;16254:20;16272:1;16254:20;:::i;:::-;16249:25;;16288:20;16306:1;16288:20;:::i;:::-;16283:25;;16327:1;16317:35;;16332:18;;:::i;:::-;16317:35;16374:1;16371;16367:9;16362:14;;16197:185;;;;:::o;16388:85::-;16433:7;16462:5;16451:16;;16388:85;;;:::o;16479:158::-;16537:9;16570:61;16588:42;16597:32;16623:5;16597:32;:::i;:::-;16588:42;:::i;:::-;16570:61;:::i;:::-;16557:74;;16479:158;;;:::o;16643:147::-;16738:45;16777:5;16738:45;:::i;:::-;16733:3;16726:58;16643:147;;:::o;16796:807::-;17045:4;17083:3;17072:9;17068:19;17060:27;;17097:71;17165:1;17154:9;17150:17;17141:6;17097:71;:::i;:::-;17178:72;17246:2;17235:9;17231:18;17222:6;17178:72;:::i;:::-;17260:80;17336:2;17325:9;17321:18;17312:6;17260:80;:::i;:::-;17350;17426:2;17415:9;17411:18;17402:6;17350:80;:::i;:::-;17440:73;17508:3;17497:9;17493:19;17484:6;17440:73;:::i;:::-;17523;17591:3;17580:9;17576:19;17567:6;17523:73;:::i;:::-;16796:807;;;;;;;;;:::o;17609:143::-;17666:5;17697:6;17691:13;17682:22;;17713:33;17740:5;17713:33;:::i;:::-;17609:143;;;;:::o;17758:663::-;17846:6;17854;17862;17911:2;17899:9;17890:7;17886:23;17882:32;17879:119;;;17917:79;;:::i;:::-;17879:119;18037:1;18062:64;18118:7;18109:6;18098:9;18094:22;18062:64;:::i;:::-;18052:74;;18008:128;18175:2;18201:64;18257:7;18248:6;18237:9;18233:22;18201:64;:::i;:::-;18191:74;;18146:129;18314:2;18340:64;18396:7;18387:6;18376:9;18372:22;18340:64;:::i;:::-;18330:74;;18285:129;17758:663;;;;;:::o;18427:244::-;18567:34;18563:1;18555:6;18551:14;18544:58;18636:27;18631:2;18623:6;18619:15;18612:52;18427:244;:::o;18677:366::-;18819:3;18840:67;18904:2;18899:3;18840:67;:::i;:::-;18833:74;;18916:93;19005:3;18916:93;:::i;:::-;19034:2;19029:3;19025:12;19018:19;;18677:366;;;:::o;19049:419::-;19215:4;19253:2;19242:9;19238:18;19230:26;;19302:9;19296:4;19292:20;19288:1;19277:9;19273:17;19266:47;19330:131;19456:4;19330:131;:::i;:::-;19322:139;;19049:419;;;:::o;19474:223::-;19614:34;19610:1;19602:6;19598:14;19591:58;19683:6;19678:2;19670:6;19666:15;19659:31;19474:223;:::o;19703:366::-;19845:3;19866:67;19930:2;19925:3;19866:67;:::i;:::-;19859:74;;19942:93;20031:3;19942:93;:::i;:::-;20060:2;20055:3;20051:12;20044:19;;19703:366;;;:::o;20075:419::-;20241:4;20279:2;20268:9;20264:18;20256:26;;20328:9;20322:4;20318:20;20314:1;20303:9;20299:17;20292:47;20356:131;20482:4;20356:131;:::i;:::-;20348:139;;20075:419;;;:::o;20500:223::-;20640:34;20636:1;20628:6;20624:14;20617:58;20709:6;20704:2;20696:6;20692:15;20685:31;20500:223;:::o;20729:366::-;20871:3;20892:67;20956:2;20951:3;20892:67;:::i;:::-;20885:74;;20968:93;21057:3;20968:93;:::i;:::-;21086:2;21081:3;21077:12;21070:19;;20729:366;;;:::o;21101:419::-;21267:4;21305:2;21294:9;21290:18;21282:26;;21354:9;21348:4;21344:20;21340:1;21329:9;21325:17;21318:47;21382:131;21508:4;21382:131;:::i;:::-;21374:139;;21101:419;;;:::o;21526:221::-;21666:34;21662:1;21654:6;21650:14;21643:58;21735:4;21730:2;21722:6;21718:15;21711:29;21526:221;:::o;21753:366::-;21895:3;21916:67;21980:2;21975:3;21916:67;:::i;:::-;21909:74;;21992:93;22081:3;21992:93;:::i;:::-;22110:2;22105:3;22101:12;22094:19;;21753:366;;;:::o;22125:419::-;22291:4;22329:2;22318:9;22314:18;22306:26;;22378:9;22372:4;22368:20;22364:1;22353:9;22349:17;22342:47;22406:131;22532:4;22406:131;:::i;:::-;22398:139;;22125:419;;;:::o;22550:224::-;22690:34;22686:1;22678:6;22674:14;22667:58;22759:7;22754:2;22746:6;22742:15;22735:32;22550:224;:::o;22780:366::-;22922:3;22943:67;23007:2;23002:3;22943:67;:::i;:::-;22936:74;;23019:93;23108:3;23019:93;:::i;:::-;23137:2;23132:3;23128:12;23121:19;;22780:366;;;:::o;23152:419::-;23318:4;23356:2;23345:9;23341:18;23333:26;;23405:9;23399:4;23395:20;23391:1;23380:9;23376:17;23369:47;23433:131;23559:4;23433:131;:::i;:::-;23425:139;;23152:419;;;:::o;23577:222::-;23717:34;23713:1;23705:6;23701:14;23694:58;23786:5;23781:2;23773:6;23769:15;23762:30;23577:222;:::o;23805:366::-;23947:3;23968:67;24032:2;24027:3;23968:67;:::i;:::-;23961:74;;24044:93;24133:3;24044:93;:::i;:::-;24162:2;24157:3;24153:12;24146:19;;23805:366;;;:::o;24177:419::-;24343:4;24381:2;24370:9;24366:18;24358:26;;24430:9;24424:4;24420:20;24416:1;24405:9;24401:17;24394:47;24458:131;24584:4;24458:131;:::i;:::-;24450:139;;24177:419;;;:::o;24602:240::-;24742:34;24738:1;24730:6;24726:14;24719:58;24811:23;24806:2;24798:6;24794:15;24787:48;24602:240;:::o;24848:366::-;24990:3;25011:67;25075:2;25070:3;25011:67;:::i;:::-;25004:74;;25087:93;25176:3;25087:93;:::i;:::-;25205:2;25200:3;25196:12;25189:19;;24848:366;;;:::o;25220:419::-;25386:4;25424:2;25413:9;25409:18;25401:26;;25473:9;25467:4;25463:20;25459:1;25448:9;25444:17;25437:47;25501:131;25627:4;25501:131;:::i;:::-;25493:139;;25220:419;;;:::o;25645:169::-;25785:21;25781:1;25773:6;25769:14;25762:45;25645:169;:::o;25820:366::-;25962:3;25983:67;26047:2;26042:3;25983:67;:::i;:::-;25976:74;;26059:93;26148:3;26059:93;:::i;:::-;26177:2;26172:3;26168:12;26161:19;;25820:366;;;:::o;26192:419::-;26358:4;26396:2;26385:9;26381:18;26373:26;;26445:9;26439:4;26435:20;26431:1;26420:9;26416:17;26409:47;26473:131;26599:4;26473:131;:::i;:::-;26465:139;;26192:419;;;:::o;26617:241::-;26757:34;26753:1;26745:6;26741:14;26734:58;26826:24;26821:2;26813:6;26809:15;26802:49;26617:241;:::o;26864:366::-;27006:3;27027:67;27091:2;27086:3;27027:67;:::i;:::-;27020:74;;27103:93;27192:3;27103:93;:::i;:::-;27221:2;27216:3;27212:12;27205:19;;26864:366;;;:::o;27236:419::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:131;27643:4;27517:131;:::i;:::-;27509:139;;27236:419;;;:::o;27661:194::-;27701:4;27721:20;27739:1;27721:20;:::i;:::-;27716:25;;27755:20;27773:1;27755:20;:::i;:::-;27750:25;;27799:1;27796;27792:9;27784:17;;27823:1;27817:4;27814:11;27811:37;;;27828:18;;:::i;:::-;27811:37;27661:194;;;;:::o;27861:177::-;28001:29;27997:1;27989:6;27985:14;27978:53;27861:177;:::o;28044:366::-;28186:3;28207:67;28271:2;28266:3;28207:67;:::i;:::-;28200:74;;28283:93;28372:3;28283:93;:::i;:::-;28401:2;28396:3;28392:12;28385:19;;28044:366;;;:::o;28416:419::-;28582:4;28620:2;28609:9;28605:18;28597:26;;28669:9;28663:4;28659:20;28655:1;28644:9;28640:17;28633:47;28697:131;28823:4;28697:131;:::i;:::-;28689:139;;28416:419;;;:::o;28841:442::-;28990:4;29028:2;29017:9;29013:18;29005:26;;29041:71;29109:1;29098:9;29094:17;29085:6;29041:71;:::i;:::-;29122:72;29190:2;29179:9;29175:18;29166:6;29122:72;:::i;:::-;29204;29272:2;29261:9;29257:18;29248:6;29204:72;:::i;:::-;28841:442;;;;;;:::o;29289:220::-;29429:34;29425:1;29417:6;29413:14;29406:58;29498:3;29493:2;29485:6;29481:15;29474:28;29289:220;:::o;29515:366::-;29657:3;29678:67;29742:2;29737:3;29678:67;:::i;:::-;29671:74;;29754:93;29843:3;29754:93;:::i;:::-;29872:2;29867:3;29863:12;29856:19;;29515:366;;;:::o;29887:419::-;30053:4;30091:2;30080:9;30076:18;30068:26;;30140:9;30134:4;30130:20;30126:1;30115:9;30111:17;30104:47;30168:131;30294:4;30168:131;:::i;:::-;30160:139;;29887:419;;;:::o;30312:180::-;30360:77;30357:1;30350:88;30457:4;30454:1;30447:15;30481:4;30478:1;30471:15;30498:180;30546:77;30543:1;30536:88;30643:4;30640:1;30633:15;30667:4;30664:1;30657:15;30684:114;30751:6;30785:5;30779:12;30769:22;;30684:114;;;:::o;30804:184::-;30903:11;30937:6;30932:3;30925:19;30977:4;30972:3;30968:14;30953:29;;30804:184;;;;:::o;30994:132::-;31061:4;31084:3;31076:11;;31114:4;31109:3;31105:14;31097:22;;30994:132;;;:::o;31132:108::-;31209:24;31227:5;31209:24;:::i;:::-;31204:3;31197:37;31132:108;;:::o;31246:179::-;31315:10;31336:46;31378:3;31370:6;31336:46;:::i;:::-;31414:4;31409:3;31405:14;31391:28;;31246:179;;;;:::o;31431:113::-;31501:4;31533;31528:3;31524:14;31516:22;;31431:113;;;:::o;31580:732::-;31699:3;31728:54;31776:5;31728:54;:::i;:::-;31798:86;31877:6;31872:3;31798:86;:::i;:::-;31791:93;;31908:56;31958:5;31908:56;:::i;:::-;31987:7;32018:1;32003:284;32028:6;32025:1;32022:13;32003:284;;;32104:6;32098:13;32131:63;32190:3;32175:13;32131:63;:::i;:::-;32124:70;;32217:60;32270:6;32217:60;:::i;:::-;32207:70;;32063:224;32050:1;32047;32043:9;32038:14;;32003:284;;;32007:14;32303:3;32296:10;;31704:608;;;31580:732;;;;:::o;32318:831::-;32581:4;32619:3;32608:9;32604:19;32596:27;;32633:71;32701:1;32690:9;32686:17;32677:6;32633:71;:::i;:::-;32714:80;32790:2;32779:9;32775:18;32766:6;32714:80;:::i;:::-;32841:9;32835:4;32831:20;32826:2;32815:9;32811:18;32804:48;32869:108;32972:4;32963:6;32869:108;:::i;:::-;32861:116;;32987:72;33055:2;33044:9;33040:18;33031:6;32987:72;:::i;:::-;33069:73;33137:3;33126:9;33122:19;33113:6;33069:73;:::i;:::-;32318:831;;;;;;;;:::o

Swarm Source

ipfs://62127e88f1b0c34512ea9118a3850005f70ae3458ae6430b9d33a7d629b046e3
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.