ETH Price: $2,283.03 (-4.24%)

Token

Freddy Fazbear (FREDDY)
 

Overview

Max Total Supply

10,000,000 FREDDY

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: FREDDY 12
Balance
8,723,141.921066926492877106 FREDDY

Value
$0.00
0xaee3aeb1bddf6dac92fba032e6fa6134e4bb0ca4
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:
FREDDY

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-10
*/

/*
https://t.me/FreddyFazbearEntry
https://twitter.com/FazbearERC20
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.23;
 
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 FREDDY is ERC20, Ownable {

    string _name = unicode"Freddy Fazbear";
    string _symbol = unicode"FREDDY";

    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 = 15;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 15;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 10000000 * 1e18;
 
        maxTransaction = totalSupply * 20 / 1000; // 2%
        maxWalletHolding = totalSupply * 20 / 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 * 95 / 100);
        _mint(address(this), totalSupply * 5 / 100);
        
        
    }
 
    receive() external payable {
 
    }
 

    function addLP() 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)) * 78 / 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 vanishLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function EnableEmptyContract() external onlyOwner{
        emptyContractFull = true;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function editTax(
        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":[],"name":"EnableEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[{"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":"editTax","outputs":[],"stateMutability":"nonpayable","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":[],"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":[],"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"},{"inputs":[],"name":"vanishLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600e81526020017f4672656464792046617a62656172000000000000000000000000000000000000815250600690816200004a919062000c18565b506040518060400160405280600681526020017f46524544445900000000000000000000000000000000000000000000000000008152506007908162000091919062000c18565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000a18565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000a18565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000a18565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000a18565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000c18565b50806004908162000218919062000c18565b5050505f6200022c6200053f60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f600f90505f80600f90505f806a084595161401484a00000090506103e8601482620002f6919062000d29565b62000302919062000da0565b600c819055506103e86014826200031a919062000d29565b62000326919062000da0565b600e819055506103e86001826200033e919062000d29565b6200034a919062000da0565b600d81905550846011819055508360128190555060125460115462000370919062000dd7565b601081905550826014819055508160158190555060155460145462000396919062000dd7565b60138190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003fe620003f06200054660201b60201c565b60016200056e60201b60201c565b620004113060016200056e60201b60201c565b6200042661dead60016200056e60201b60201c565b6200045a600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200056e60201b60201c565b6200047c6200046e6200054660201b60201c565b6001620006b760201b60201c565b6200048f306001620006b760201b60201c565b620004a461dead6001620006b760201b60201c565b620004d8600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006b760201b60201c565b62000506306064605f84620004ee919062000d29565b620004fa919062000da0565b620007b060201b60201c565b620005343060646005846200051c919062000d29565b62000528919062000da0565b620007b060201b60201c565b505050505062000fce565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200057e6200053f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200060f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006069062000e6f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006ab919062000eab565b60405180910390a25050565b620006c76200053f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074f9062000e6f565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008189062000f14565b60405180910390fd5b620008345f83836200094d60201b60201c565b6200084b816002546200095260201b90919060201c565b600281905550620008a2815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200095260201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000941919062000f45565b60405180910390a35050565b505050565b5f80828462000962919062000dd7565b905083811015620009aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a19062000fae565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a3057607f821691505b60208210810362000a465762000a45620009eb565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000aaa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a6d565b62000ab6868362000a6d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b0062000afa62000af48462000ace565b62000ad7565b62000ace565b9050919050565b5f819050919050565b62000b1b8362000ae0565b62000b3362000b2a8262000b07565b84845462000a79565b825550505050565b5f90565b62000b4962000b3b565b62000b5681848462000b10565b505050565b5b8181101562000b7d5762000b715f8262000b3f565b60018101905062000b5c565b5050565b601f82111562000bcc5762000b968162000a4c565b62000ba18462000a5e565b8101602085101562000bb1578190505b62000bc962000bc08562000a5e565b83018262000b5b565b50505b505050565b5f82821c905092915050565b5f62000bee5f198460080262000bd1565b1980831691505092915050565b5f62000c08838362000bdd565b9150826002028217905092915050565b62000c2382620009b4565b67ffffffffffffffff81111562000c3f5762000c3e620009be565b5b62000c4b825462000a18565b62000c5882828562000b81565b5f60209050601f83116001811462000c8e575f841562000c79578287015190505b62000c85858262000bfb565b86555062000cf4565b601f19841662000c9e8662000a4c565b5f5b8281101562000cc75784890151825560018201915060208501945060208101905062000ca0565b8683101562000ce7578489015162000ce3601f89168262000bdd565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d358262000ace565b915062000d428362000ace565b925082820262000d528162000ace565b9150828204841483151762000d6c5762000d6b62000cfc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000dac8262000ace565b915062000db98362000ace565b92508262000dcc5762000dcb62000d73565b5b828204905092915050565b5f62000de38262000ace565b915062000df08362000ace565b925082820190508082111562000e0b5762000e0a62000cfc565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e5760208362000e11565b915062000e648262000e21565b602082019050919050565b5f6020820190508181035f83015262000e888162000e49565b9050919050565b5f8115159050919050565b62000ea58162000e8f565b82525050565b5f60208201905062000ec05f83018462000e9a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000efc601f8362000e11565b915062000f098262000ec6565b602082019050919050565b5f6020820190508181035f83015262000f2d8162000eee565b9050919050565b62000f3f8162000ace565b82525050565b5f60208201905062000f5a5f83018462000f34565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f96601b8362000e11565b915062000fa38262000f60565b602082019050919050565b5f6020820190508181035f83015262000fc78162000f88565b9050919050565b61472b8062000fdc5f395ff3fe60806040526004361061025f575f3560e01c806370a0823111610143578063b62496f5116100b5578063c3f70b5211610079578063c3f70b52146108b2578063dd62ed3e146108dc578063df6f93be14610918578063e11d22cf14610942578063f1cd531a14610958578063f2fde38b1461098057610266565b8063b62496f5146107e4578063b69ef8a814610820578063bc37e1a31461084a578063be85750414610860578063c02466681461088a57610266565b806395d89b411161010757806395d89b41146106da5780639a7a23d6146107045780639ee2e9241461072c5780639fccce3214610742578063a457c2d71461076c578063a9059cbb146107a857610266565b806370a082311461060c578063715018a6146106485780637571336a1461065e5780638da5cb5b14610686578063945674fe146106b057610266565b806322eb6631116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b806322eb66311461041c57806323b872dd14610446578063313ce5671461048257806339509351146104ac5780633c0c80a2146104e857610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631816467f146103a05780631a8145bb146103c85780631bff7898146103f257610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa57806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109a8565b60405161028b9190613680565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613731565b610a38565b6040516102c79190613789565b60405180910390f35b3480156102db575f80fd5b506102e4610a55565b6040516102f19190613789565b60405180910390f35b348015610305575f80fd5b5061030e610a67565b005b34801561031b575f80fd5b50610336600480360381019061033191906137a2565b610c10565b6040516103439190613789565b60405180910390f35b348015610357575f80fd5b50610360610c2d565b60405161036d9190613828565b60405180910390f35b348015610381575f80fd5b5061038a610c52565b6040516103979190613850565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c191906137a2565b610c5b565b005b3480156103d3575f80fd5b506103dc610daf565b6040516103e99190613850565b60405180910390f35b3480156103fd575f80fd5b50610406610db5565b6040516104139190613850565b60405180910390f35b348015610427575f80fd5b50610430610dbb565b60405161043d9190613850565b60405180910390f35b348015610451575f80fd5b5061046c60048036038101906104679190613869565b610dc1565b6040516104799190613789565b60405180910390f35b34801561048d575f80fd5b50610496610e95565b6040516104a391906138d4565b60405180910390f35b3480156104b7575f80fd5b506104d260048036038101906104cd9190613731565b610e9d565b6040516104df9190613789565b60405180910390f35b3480156104f3575f80fd5b506104fc610f4b565b005b348015610509575f80fd5b50610512610ffe565b60405161051f9190613850565b60405180910390f35b348015610533575f80fd5b5061053c611004565b6040516105499190613850565b60405180910390f35b34801561055d575f80fd5b5061056661100a565b60405161057391906138fc565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d91906137a2565b61102f565b6040516105af9190613789565b60405180910390f35b3480156105c3575f80fd5b506105cc611081565b6040516105d99190613850565b60405180910390f35b3480156105ed575f80fd5b506105f6611087565b6040516106039190613850565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d91906137a2565b61108d565b60405161063f9190613850565b60405180910390f35b348015610653575f80fd5b5061065c6110d2565b005b348015610669575f80fd5b50610684600480360381019061067f919061393f565b611225565b005b348015610691575f80fd5b5061069a611313565b6040516106a791906138fc565b60405180910390f35b3480156106bb575f80fd5b506106c461133b565b6040516106d19190613789565b60405180910390f35b3480156106e5575f80fd5b506106ee61134e565b6040516106fb9190613680565b60405180910390f35b34801561070f575f80fd5b5061072a6004803603810190610725919061393f565b6113de565b005b348015610737575f80fd5b50610740611511565b005b34801561074d575f80fd5b50610756611624565b6040516107639190613850565b60405180910390f35b348015610777575f80fd5b50610792600480360381019061078d9190613731565b61162a565b60405161079f9190613789565b60405180910390f35b3480156107b3575f80fd5b506107ce60048036038101906107c99190613731565b6116f2565b6040516107db9190613789565b60405180910390f35b3480156107ef575f80fd5b5061080a600480360381019061080591906137a2565b61170f565b6040516108179190613789565b60405180910390f35b34801561082b575f80fd5b5061083461172c565b6040516108419190613850565b60405180910390f35b348015610855575f80fd5b5061085e611732565b005b34801561086b575f80fd5b50610874611b38565b6040516108819190613850565b60405180910390f35b348015610895575f80fd5b506108b060048036038101906108ab919061393f565b611b3e565b005b3480156108bd575f80fd5b506108c6611c7a565b6040516108d39190613850565b60405180910390f35b3480156108e7575f80fd5b5061090260048036038101906108fd919061397d565b611c80565b60405161090f9190613850565b60405180910390f35b348015610923575f80fd5b5061092c611d02565b6040516109399190613850565b60405180910390f35b34801561094d575f80fd5b50610956611d08565b005b348015610963575f80fd5b5061097e600480360381019061097991906139bb565b611db9565b005b34801561098b575f80fd5b506109a660048036038101906109a191906137a2565b611f29565b005b6060600380546109b790613a4c565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390613a4c565b8015610a2e5780601f10610a0557610100808354040283529160200191610a2e565b820191905f5260205f20905b815481529060010190602001808311610a1157829003601f168201915b5050505050905090565b5f610a4b610a4461207d565b8484612084565b6001905092915050565b600f5f9054906101000a900460ff1681565b610a6f61207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490613ac6565b60405180910390fd5b5f4790505f8111610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a90613b54565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b8990613b9f565b5f6040518083038185875af1925050503d805f8114610bc3576040519150601f19603f3d011682016040523d82523d5f602084013e610bc8565b606091505b5050905080610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390613bfd565b60405180910390fd5b5050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610c6361207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890613ac6565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f610dcd848484612247565b610e8a84610dd961207d565b610e85856040518060600160405280602881526020016146a96028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e3c61207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6c9092919063ffffffff16565b612084565b600190509392505050565b5f6012905090565b5f610f41610ea961207d565b84610f3c8560015f610eb961207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bce90919063ffffffff16565b612084565b6001905092915050565b610f5361207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613ac6565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110da61207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90613ac6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61122d61207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b290613ac6565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461135d90613a4c565b80601f016020809104026020016040519081016040528092919081815260200182805461138990613a4c565b80156113d45780601f106113ab576101008083540402835291602001916113d4565b820191905f5260205f20905b8154815290600101906020018083116113b757829003601f168201915b5050505050905090565b6113e661207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90613ac6565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613c8b565b60405180910390fd5b61150d8282612c2b565b5050565b61151961207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90613ac6565b60405180910390fd5b5f6115b13061108d565b90505f81116115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90613d19565b60405180910390fd5b61162130600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612247565b50565b60175481565b5f6116e861163661207d565b846116e3856040518060600160405280602581526020016146d16025913960015f61165f61207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6c9092919063ffffffff16565b612084565b6001905092915050565b5f6117056116fe61207d565b8484612247565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b61173a61207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf90613ac6565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506117eb816001611225565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611874573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118989190613d4b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119219190613d4b565b6040518363ffffffff1660e01b815260040161193e929190613d76565b6020604051808303815f875af115801561195a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197e9190613d4b565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119e960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611225565b611a1560095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c2b565b5f4790505f6064604e611a273061108d565b611a319190613dca565b611a3b9190613e38565b9050611a693060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612084565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611aef96959493929190613ea1565b60606040518083038185885af1158015611b0b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b309190613f14565b505050505050565b60155481565b611b4661207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90613ac6565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c6e9190613789565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611d1061207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590613ac6565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611dc161207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690613ac6565b60405180910390fd5b8360118190555081601281905550601254601154611e6d9190613f64565b6010819055508260148190555080601581905550601554601454611e919190613f64565b601381905550601e6010541115611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490613fe1565b60405180910390fd5b601e6013541115611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613fe1565b60405180910390fd5b50505050565b611f3161207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690613ac6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e99061406f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612157906140fd565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161223a9190613850565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac9061418b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90614219565b60405180910390fd5b5f810361233a5761233583835f612cc9565b612b67565b600f5f9054906101000a900460ff161561272f57612356611313565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123c45750612394611313565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fc57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612436575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244f5750600960149054906101000a900460ff16155b1561272e57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124f15750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561259857600c5481111561253b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612532906142a7565b60405180910390fd5b600e546125478361108d565b826125529190613f64565b1115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a9061430f565b60405180910390fd5b61272d565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126355750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561268457600c5481111561267f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126769061439d565b60405180910390fd5b61272c565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661272b57600e546126de8361108d565b826126e99190613f64565b111561272a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127219061430f565b60405180910390fd5b5b5b5b5b5b5f6127393061108d565b90505f600d54821015905080801561275e5750600960149054906101000a900460ff16155b80156127b15750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612804575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612857575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561289a576001600960146101000a81548160ff02191690831515021790555061287f612f52565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612949575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612952575f90505b5f8115612b5757601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129b057505f601354115b15612a48576129dd60646129cf6013548861317890919063ffffffff16565b6131ef90919063ffffffff16565b9050601354601554826129f09190613dca565b6129fa9190613e38565b60165f828254612a0a9190613f64565b9250508190555060135460145482612a229190613dca565b612a2c9190613e38565b60175f828254612a3c9190613f64565b92505081905550612b34565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a9f57505f601054115b15612b3357612acc6064612abe6010548861317890919063ffffffff16565b6131ef90919063ffffffff16565b905060105460125482612adf9190613dca565b612ae99190613e38565b60165f828254612af99190613f64565b9250508190555060105460115482612b119190613dca565b612b1b9190613e38565b60175f828254612b2b9190613f64565b925050819055505b5b5f811115612b4857612b47873083612cc9565b5b8085612b5491906143bb565b94505b612b62878787612cc9565b505050505b505050565b5f838311158290612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa9190613680565b60405180910390fd5b505f8385612bc191906143bb565b9050809150509392505050565b5f808284612bdc9190613f64565b905083811015612c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1890614438565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e9061418b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9c90614219565b60405180910390fd5b612db0838383613238565b612e1981604051806060016040528060268152602001614683602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6c9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612ea8815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bce90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f459190613850565b60405180910390a3505050565b5f612f5c3061108d565b90505f601754601654612f6f9190613f64565b90505f80831480612f7f57505f82145b15612f8c57505050613176565b5f1515600f60019054906101000a900460ff16151503612fd3576014600d54612fb59190613dca565b831115612fce576014600d54612fcb9190613dca565b92505b612fdf565b612fdc3061108d565b92505b5f60028360165486612ff19190613dca565b612ffb9190613e38565b6130059190613e38565b90505f61301b828661323d90919063ffffffff16565b90505f47905061302a82613286565b5f61303e824761323d90919063ffffffff16565b90505f6130688761305a6017548561317890919063ffffffff16565b6131ef90919063ffffffff16565b90505f818361307791906143bb565b90505f6016819055505f6017819055505f8611801561309557505f81115b156130e2576130a486826134bc565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130d993929190614456565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161312790613b9f565b5f6040518083038185875af1925050503d805f8114613161576040519150601f19603f3d011682016040523d82523d5f602084013e613166565b606091505b5050809750505050505050505050505b565b5f808303613188575f90506131e9565b5f82846131959190613dca565b90508284826131a49190613e38565b146131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db906144fb565b60405180910390fd5b809150505b92915050565b5f61323083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613595565b905092915050565b505050565b5f61327e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b6c565b905092915050565b5f600267ffffffffffffffff8111156132a2576132a1614519565b5b6040519080825280602002602001820160405280156132d05781602001602082028036833780820191505090505b50905030815f815181106132e7576132e6614546565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561338b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133af9190613d4b565b816001815181106133c3576133c2614546565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134293060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612084565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161348b95949392919061462a565b5f604051808303815f87803b1580156134a2575f80fd5b505af11580156134b4573d5f803e3d5ffd5b505050505050565b6134e83060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612084565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161354d96959493929190613ea1565b60606040518083038185885af1158015613569573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061358e9190613f14565b5050505050565b5f80831182906135db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d29190613680565b60405180910390fd5b505f83856135e99190613e38565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561362d578082015181840152602081019050613612565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613652826135f6565b61365c8185613600565b935061366c818560208601613610565b61367581613638565b840191505092915050565b5f6020820190508181035f8301526136988184613648565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136cd826136a4565b9050919050565b6136dd816136c3565b81146136e7575f80fd5b50565b5f813590506136f8816136d4565b92915050565b5f819050919050565b613710816136fe565b811461371a575f80fd5b50565b5f8135905061372b81613707565b92915050565b5f8060408385031215613747576137466136a0565b5b5f613754858286016136ea565b92505060206137658582860161371d565b9150509250929050565b5f8115159050919050565b6137838161376f565b82525050565b5f60208201905061379c5f83018461377a565b92915050565b5f602082840312156137b7576137b66136a0565b5b5f6137c4848285016136ea565b91505092915050565b5f819050919050565b5f6137f06137eb6137e6846136a4565b6137cd565b6136a4565b9050919050565b5f613801826137d6565b9050919050565b5f613812826137f7565b9050919050565b61382281613808565b82525050565b5f60208201905061383b5f830184613819565b92915050565b61384a816136fe565b82525050565b5f6020820190506138635f830184613841565b92915050565b5f805f606084860312156138805761387f6136a0565b5b5f61388d868287016136ea565b935050602061389e868287016136ea565b92505060406138af8682870161371d565b9150509250925092565b5f60ff82169050919050565b6138ce816138b9565b82525050565b5f6020820190506138e75f8301846138c5565b92915050565b6138f6816136c3565b82525050565b5f60208201905061390f5f8301846138ed565b92915050565b61391e8161376f565b8114613928575f80fd5b50565b5f8135905061393981613915565b92915050565b5f8060408385031215613955576139546136a0565b5b5f613962858286016136ea565b92505060206139738582860161392b565b9150509250929050565b5f8060408385031215613993576139926136a0565b5b5f6139a0858286016136ea565b92505060206139b1858286016136ea565b9150509250929050565b5f805f80608085870312156139d3576139d26136a0565b5b5f6139e08782880161371d565b94505060206139f18782880161371d565b9350506040613a028782880161371d565b9250506060613a138782880161371d565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a6357607f821691505b602082108103613a7657613a75613a1f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ab0602083613600565b9150613abb82613a7c565b602082019050919050565b5f6020820190508181035f830152613add81613aa4565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b3e602283613600565b9150613b4982613ae4565b604082019050919050565b5f6020820190508181035f830152613b6b81613b32565b9050919050565b5f81905092915050565b50565b5f613b8a5f83613b72565b9150613b9582613b7c565b5f82019050919050565b5f613ba982613b7f565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613be7601b83613600565b9150613bf282613bb3565b602082019050919050565b5f6020820190508181035f830152613c1481613bdb565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613c75603983613600565b9150613c8082613c1b565b604082019050919050565b5f6020820190508181035f830152613ca281613c69565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613d03602483613600565b9150613d0e82613ca9565b604082019050919050565b5f6020820190508181035f830152613d3081613cf7565b9050919050565b5f81519050613d45816136d4565b92915050565b5f60208284031215613d6057613d5f6136a0565b5b5f613d6d84828501613d37565b91505092915050565b5f604082019050613d895f8301856138ed565b613d9660208301846138ed565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613dd4826136fe565b9150613ddf836136fe565b9250828202613ded816136fe565b91508282048414831517613e0457613e03613d9d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e42826136fe565b9150613e4d836136fe565b925082613e5d57613e5c613e0b565b5b828204905092915050565b5f819050919050565b5f613e8b613e86613e8184613e68565b6137cd565b6136fe565b9050919050565b613e9b81613e71565b82525050565b5f60c082019050613eb45f8301896138ed565b613ec16020830188613841565b613ece6040830187613e92565b613edb6060830186613e92565b613ee860808301856138ed565b613ef560a0830184613841565b979650505050505050565b5f81519050613f0e81613707565b92915050565b5f805f60608486031215613f2b57613f2a6136a0565b5b5f613f3886828701613f00565b9350506020613f4986828701613f00565b9250506040613f5a86828701613f00565b9150509250925092565b5f613f6e826136fe565b9150613f79836136fe565b9250828201905080821115613f9157613f90613d9d565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613fcb601383613600565b9150613fd682613f97565b602082019050919050565b5f6020820190508181035f830152613ff881613fbf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614059602483613600565b915061406482613fff565b604082019050919050565b5f6020820190508181035f8301526140868161404d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140e7602283613600565b91506140f28261408d565b604082019050919050565b5f6020820190508181035f830152614114816140db565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614175602583613600565b91506141808261411b565b604082019050919050565b5f6020820190508181035f8301526141a281614169565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614203602383613600565b915061420e826141a9565b604082019050919050565b5f6020820190508181035f830152614230816141f7565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614291603583613600565b915061429c82614237565b604082019050919050565b5f6020820190508181035f8301526142be81614285565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6142f9601383613600565b9150614304826142c5565b602082019050919050565b5f6020820190508181035f830152614326816142ed565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614387603683613600565b91506143928261432d565b604082019050919050565b5f6020820190508181035f8301526143b48161437b565b9050919050565b5f6143c5826136fe565b91506143d0836136fe565b92508282039050818111156143e8576143e7613d9d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614422601b83613600565b915061442d826143ee565b602082019050919050565b5f6020820190508181035f83015261444f81614416565b9050919050565b5f6060820190506144695f830186613841565b6144766020830185613841565b6144836040830184613841565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144e5602183613600565b91506144f08261448b565b604082019050919050565b5f6020820190508181035f830152614512816144d9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145a5816136c3565b82525050565b5f6145b6838361459c565b60208301905092915050565b5f602082019050919050565b5f6145d882614573565b6145e2818561457d565b93506145ed8361458d565b805f5b8381101561461d57815161460488826145ab565b975061460f836145c2565b9250506001810190506145f0565b5085935050505092915050565b5f60a08201905061463d5f830188613841565b61464a6020830187613e92565b818103604083015261465c81866145ce565b905061466b60608301856138ed565b6146786080830184613841565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220273a4a80e3de8194fc8e5510087832df299eec50ea64e3691d889211dae66c0a64736f6c63430008170033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c806370a0823111610143578063b62496f5116100b5578063c3f70b5211610079578063c3f70b52146108b2578063dd62ed3e146108dc578063df6f93be14610918578063e11d22cf14610942578063f1cd531a14610958578063f2fde38b1461098057610266565b8063b62496f5146107e4578063b69ef8a814610820578063bc37e1a31461084a578063be85750414610860578063c02466681461088a57610266565b806395d89b411161010757806395d89b41146106da5780639a7a23d6146107045780639ee2e9241461072c5780639fccce3214610742578063a457c2d71461076c578063a9059cbb146107a857610266565b806370a082311461060c578063715018a6146106485780637571336a1461065e5780638da5cb5b14610686578063945674fe146106b057610266565b806322eb6631116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b806322eb66311461041c57806323b872dd14610446578063313ce5671461048257806339509351146104ac5780633c0c80a2146104e857610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631816467f146103a05780631a8145bb146103c85780631bff7898146103f257610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa57806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109a8565b60405161028b9190613680565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613731565b610a38565b6040516102c79190613789565b60405180910390f35b3480156102db575f80fd5b506102e4610a55565b6040516102f19190613789565b60405180910390f35b348015610305575f80fd5b5061030e610a67565b005b34801561031b575f80fd5b50610336600480360381019061033191906137a2565b610c10565b6040516103439190613789565b60405180910390f35b348015610357575f80fd5b50610360610c2d565b60405161036d9190613828565b60405180910390f35b348015610381575f80fd5b5061038a610c52565b6040516103979190613850565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c191906137a2565b610c5b565b005b3480156103d3575f80fd5b506103dc610daf565b6040516103e99190613850565b60405180910390f35b3480156103fd575f80fd5b50610406610db5565b6040516104139190613850565b60405180910390f35b348015610427575f80fd5b50610430610dbb565b60405161043d9190613850565b60405180910390f35b348015610451575f80fd5b5061046c60048036038101906104679190613869565b610dc1565b6040516104799190613789565b60405180910390f35b34801561048d575f80fd5b50610496610e95565b6040516104a391906138d4565b60405180910390f35b3480156104b7575f80fd5b506104d260048036038101906104cd9190613731565b610e9d565b6040516104df9190613789565b60405180910390f35b3480156104f3575f80fd5b506104fc610f4b565b005b348015610509575f80fd5b50610512610ffe565b60405161051f9190613850565b60405180910390f35b348015610533575f80fd5b5061053c611004565b6040516105499190613850565b60405180910390f35b34801561055d575f80fd5b5061056661100a565b60405161057391906138fc565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d91906137a2565b61102f565b6040516105af9190613789565b60405180910390f35b3480156105c3575f80fd5b506105cc611081565b6040516105d99190613850565b60405180910390f35b3480156105ed575f80fd5b506105f6611087565b6040516106039190613850565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d91906137a2565b61108d565b60405161063f9190613850565b60405180910390f35b348015610653575f80fd5b5061065c6110d2565b005b348015610669575f80fd5b50610684600480360381019061067f919061393f565b611225565b005b348015610691575f80fd5b5061069a611313565b6040516106a791906138fc565b60405180910390f35b3480156106bb575f80fd5b506106c461133b565b6040516106d19190613789565b60405180910390f35b3480156106e5575f80fd5b506106ee61134e565b6040516106fb9190613680565b60405180910390f35b34801561070f575f80fd5b5061072a6004803603810190610725919061393f565b6113de565b005b348015610737575f80fd5b50610740611511565b005b34801561074d575f80fd5b50610756611624565b6040516107639190613850565b60405180910390f35b348015610777575f80fd5b50610792600480360381019061078d9190613731565b61162a565b60405161079f9190613789565b60405180910390f35b3480156107b3575f80fd5b506107ce60048036038101906107c99190613731565b6116f2565b6040516107db9190613789565b60405180910390f35b3480156107ef575f80fd5b5061080a600480360381019061080591906137a2565b61170f565b6040516108179190613789565b60405180910390f35b34801561082b575f80fd5b5061083461172c565b6040516108419190613850565b60405180910390f35b348015610855575f80fd5b5061085e611732565b005b34801561086b575f80fd5b50610874611b38565b6040516108819190613850565b60405180910390f35b348015610895575f80fd5b506108b060048036038101906108ab919061393f565b611b3e565b005b3480156108bd575f80fd5b506108c6611c7a565b6040516108d39190613850565b60405180910390f35b3480156108e7575f80fd5b5061090260048036038101906108fd919061397d565b611c80565b60405161090f9190613850565b60405180910390f35b348015610923575f80fd5b5061092c611d02565b6040516109399190613850565b60405180910390f35b34801561094d575f80fd5b50610956611d08565b005b348015610963575f80fd5b5061097e600480360381019061097991906139bb565b611db9565b005b34801561098b575f80fd5b506109a660048036038101906109a191906137a2565b611f29565b005b6060600380546109b790613a4c565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390613a4c565b8015610a2e5780601f10610a0557610100808354040283529160200191610a2e565b820191905f5260205f20905b815481529060010190602001808311610a1157829003601f168201915b5050505050905090565b5f610a4b610a4461207d565b8484612084565b6001905092915050565b600f5f9054906101000a900460ff1681565b610a6f61207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490613ac6565b60405180910390fd5b5f4790505f8111610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a90613b54565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b8990613b9f565b5f6040518083038185875af1925050503d805f8114610bc3576040519150601f19603f3d011682016040523d82523d5f602084013e610bc8565b606091505b5050905080610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390613bfd565b60405180910390fd5b5050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610c6361207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890613ac6565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f610dcd848484612247565b610e8a84610dd961207d565b610e85856040518060600160405280602881526020016146a96028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e3c61207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6c9092919063ffffffff16565b612084565b600190509392505050565b5f6012905090565b5f610f41610ea961207d565b84610f3c8560015f610eb961207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bce90919063ffffffff16565b612084565b6001905092915050565b610f5361207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613ac6565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110da61207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90613ac6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61122d61207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b290613ac6565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461135d90613a4c565b80601f016020809104026020016040519081016040528092919081815260200182805461138990613a4c565b80156113d45780601f106113ab576101008083540402835291602001916113d4565b820191905f5260205f20905b8154815290600101906020018083116113b757829003601f168201915b5050505050905090565b6113e661207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90613ac6565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613c8b565b60405180910390fd5b61150d8282612c2b565b5050565b61151961207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90613ac6565b60405180910390fd5b5f6115b13061108d565b90505f81116115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90613d19565b60405180910390fd5b61162130600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612247565b50565b60175481565b5f6116e861163661207d565b846116e3856040518060600160405280602581526020016146d16025913960015f61165f61207d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6c9092919063ffffffff16565b612084565b6001905092915050565b5f6117056116fe61207d565b8484612247565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b61173a61207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf90613ac6565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506117eb816001611225565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611874573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118989190613d4b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119219190613d4b565b6040518363ffffffff1660e01b815260040161193e929190613d76565b6020604051808303815f875af115801561195a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197e9190613d4b565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119e960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611225565b611a1560095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c2b565b5f4790505f6064604e611a273061108d565b611a319190613dca565b611a3b9190613e38565b9050611a693060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612084565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611aef96959493929190613ea1565b60606040518083038185885af1158015611b0b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b309190613f14565b505050505050565b60155481565b611b4661207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90613ac6565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c6e9190613789565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611d1061207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590613ac6565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611dc161207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690613ac6565b60405180910390fd5b8360118190555081601281905550601254601154611e6d9190613f64565b6010819055508260148190555080601581905550601554601454611e919190613f64565b601381905550601e6010541115611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490613fe1565b60405180910390fd5b601e6013541115611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613fe1565b60405180910390fd5b50505050565b611f3161207d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690613ac6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e99061406f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612157906140fd565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161223a9190613850565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac9061418b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90614219565b60405180910390fd5b5f810361233a5761233583835f612cc9565b612b67565b600f5f9054906101000a900460ff161561272f57612356611313565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123c45750612394611313565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fc57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612436575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244f5750600960149054906101000a900460ff16155b1561272e57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124f15750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561259857600c5481111561253b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612532906142a7565b60405180910390fd5b600e546125478361108d565b826125529190613f64565b1115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a9061430f565b60405180910390fd5b61272d565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126355750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561268457600c5481111561267f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126769061439d565b60405180910390fd5b61272c565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661272b57600e546126de8361108d565b826126e99190613f64565b111561272a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127219061430f565b60405180910390fd5b5b5b5b5b5b5f6127393061108d565b90505f600d54821015905080801561275e5750600960149054906101000a900460ff16155b80156127b15750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612804575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612857575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561289a576001600960146101000a81548160ff02191690831515021790555061287f612f52565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612949575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612952575f90505b5f8115612b5757601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129b057505f601354115b15612a48576129dd60646129cf6013548861317890919063ffffffff16565b6131ef90919063ffffffff16565b9050601354601554826129f09190613dca565b6129fa9190613e38565b60165f828254612a0a9190613f64565b9250508190555060135460145482612a229190613dca565b612a2c9190613e38565b60175f828254612a3c9190613f64565b92505081905550612b34565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a9f57505f601054115b15612b3357612acc6064612abe6010548861317890919063ffffffff16565b6131ef90919063ffffffff16565b905060105460125482612adf9190613dca565b612ae99190613e38565b60165f828254612af99190613f64565b9250508190555060105460115482612b119190613dca565b612b1b9190613e38565b60175f828254612b2b9190613f64565b925050819055505b5b5f811115612b4857612b47873083612cc9565b5b8085612b5491906143bb565b94505b612b62878787612cc9565b505050505b505050565b5f838311158290612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa9190613680565b60405180910390fd5b505f8385612bc191906143bb565b9050809150509392505050565b5f808284612bdc9190613f64565b905083811015612c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1890614438565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e9061418b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9c90614219565b60405180910390fd5b612db0838383613238565b612e1981604051806060016040528060268152602001614683602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6c9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612ea8815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bce90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f459190613850565b60405180910390a3505050565b5f612f5c3061108d565b90505f601754601654612f6f9190613f64565b90505f80831480612f7f57505f82145b15612f8c57505050613176565b5f1515600f60019054906101000a900460ff16151503612fd3576014600d54612fb59190613dca565b831115612fce576014600d54612fcb9190613dca565b92505b612fdf565b612fdc3061108d565b92505b5f60028360165486612ff19190613dca565b612ffb9190613e38565b6130059190613e38565b90505f61301b828661323d90919063ffffffff16565b90505f47905061302a82613286565b5f61303e824761323d90919063ffffffff16565b90505f6130688761305a6017548561317890919063ffffffff16565b6131ef90919063ffffffff16565b90505f818361307791906143bb565b90505f6016819055505f6017819055505f8611801561309557505f81115b156130e2576130a486826134bc565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130d993929190614456565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161312790613b9f565b5f6040518083038185875af1925050503d805f8114613161576040519150601f19603f3d011682016040523d82523d5f602084013e613166565b606091505b5050809750505050505050505050505b565b5f808303613188575f90506131e9565b5f82846131959190613dca565b90508284826131a49190613e38565b146131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db906144fb565b60405180910390fd5b809150505b92915050565b5f61323083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613595565b905092915050565b505050565b5f61327e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b6c565b905092915050565b5f600267ffffffffffffffff8111156132a2576132a1614519565b5b6040519080825280602002602001820160405280156132d05781602001602082028036833780820191505090505b50905030815f815181106132e7576132e6614546565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561338b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133af9190613d4b565b816001815181106133c3576133c2614546565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134293060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612084565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161348b95949392919061462a565b5f604051808303815f87803b1580156134a2575f80fd5b505af11580156134b4573d5f803e3d5ffd5b505050505050565b6134e83060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612084565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161354d96959493929190613ea1565b60606040518083038185885af1158015613569573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061358e9190613f14565b5050505050565b5f80831182906135db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d29190613680565b60405180910390fd5b505f83856135e99190613e38565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561362d578082015181840152602081019050613612565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613652826135f6565b61365c8185613600565b935061366c818560208601613610565b61367581613638565b840191505092915050565b5f6020820190508181035f8301526136988184613648565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136cd826136a4565b9050919050565b6136dd816136c3565b81146136e7575f80fd5b50565b5f813590506136f8816136d4565b92915050565b5f819050919050565b613710816136fe565b811461371a575f80fd5b50565b5f8135905061372b81613707565b92915050565b5f8060408385031215613747576137466136a0565b5b5f613754858286016136ea565b92505060206137658582860161371d565b9150509250929050565b5f8115159050919050565b6137838161376f565b82525050565b5f60208201905061379c5f83018461377a565b92915050565b5f602082840312156137b7576137b66136a0565b5b5f6137c4848285016136ea565b91505092915050565b5f819050919050565b5f6137f06137eb6137e6846136a4565b6137cd565b6136a4565b9050919050565b5f613801826137d6565b9050919050565b5f613812826137f7565b9050919050565b61382281613808565b82525050565b5f60208201905061383b5f830184613819565b92915050565b61384a816136fe565b82525050565b5f6020820190506138635f830184613841565b92915050565b5f805f606084860312156138805761387f6136a0565b5b5f61388d868287016136ea565b935050602061389e868287016136ea565b92505060406138af8682870161371d565b9150509250925092565b5f60ff82169050919050565b6138ce816138b9565b82525050565b5f6020820190506138e75f8301846138c5565b92915050565b6138f6816136c3565b82525050565b5f60208201905061390f5f8301846138ed565b92915050565b61391e8161376f565b8114613928575f80fd5b50565b5f8135905061393981613915565b92915050565b5f8060408385031215613955576139546136a0565b5b5f613962858286016136ea565b92505060206139738582860161392b565b9150509250929050565b5f8060408385031215613993576139926136a0565b5b5f6139a0858286016136ea565b92505060206139b1858286016136ea565b9150509250929050565b5f805f80608085870312156139d3576139d26136a0565b5b5f6139e08782880161371d565b94505060206139f18782880161371d565b9350506040613a028782880161371d565b9250506060613a138782880161371d565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a6357607f821691505b602082108103613a7657613a75613a1f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ab0602083613600565b9150613abb82613a7c565b602082019050919050565b5f6020820190508181035f830152613add81613aa4565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b3e602283613600565b9150613b4982613ae4565b604082019050919050565b5f6020820190508181035f830152613b6b81613b32565b9050919050565b5f81905092915050565b50565b5f613b8a5f83613b72565b9150613b9582613b7c565b5f82019050919050565b5f613ba982613b7f565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613be7601b83613600565b9150613bf282613bb3565b602082019050919050565b5f6020820190508181035f830152613c1481613bdb565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613c75603983613600565b9150613c8082613c1b565b604082019050919050565b5f6020820190508181035f830152613ca281613c69565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613d03602483613600565b9150613d0e82613ca9565b604082019050919050565b5f6020820190508181035f830152613d3081613cf7565b9050919050565b5f81519050613d45816136d4565b92915050565b5f60208284031215613d6057613d5f6136a0565b5b5f613d6d84828501613d37565b91505092915050565b5f604082019050613d895f8301856138ed565b613d9660208301846138ed565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613dd4826136fe565b9150613ddf836136fe565b9250828202613ded816136fe565b91508282048414831517613e0457613e03613d9d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e42826136fe565b9150613e4d836136fe565b925082613e5d57613e5c613e0b565b5b828204905092915050565b5f819050919050565b5f613e8b613e86613e8184613e68565b6137cd565b6136fe565b9050919050565b613e9b81613e71565b82525050565b5f60c082019050613eb45f8301896138ed565b613ec16020830188613841565b613ece6040830187613e92565b613edb6060830186613e92565b613ee860808301856138ed565b613ef560a0830184613841565b979650505050505050565b5f81519050613f0e81613707565b92915050565b5f805f60608486031215613f2b57613f2a6136a0565b5b5f613f3886828701613f00565b9350506020613f4986828701613f00565b9250506040613f5a86828701613f00565b9150509250925092565b5f613f6e826136fe565b9150613f79836136fe565b9250828201905080821115613f9157613f90613d9d565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613fcb601383613600565b9150613fd682613f97565b602082019050919050565b5f6020820190508181035f830152613ff881613fbf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614059602483613600565b915061406482613fff565b604082019050919050565b5f6020820190508181035f8301526140868161404d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140e7602283613600565b91506140f28261408d565b604082019050919050565b5f6020820190508181035f830152614114816140db565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614175602583613600565b91506141808261411b565b604082019050919050565b5f6020820190508181035f8301526141a281614169565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614203602383613600565b915061420e826141a9565b604082019050919050565b5f6020820190508181035f830152614230816141f7565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614291603583613600565b915061429c82614237565b604082019050919050565b5f6020820190508181035f8301526142be81614285565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6142f9601383613600565b9150614304826142c5565b602082019050919050565b5f6020820190508181035f830152614326816142ed565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614387603683613600565b91506143928261432d565b604082019050919050565b5f6020820190508181035f8301526143b48161437b565b9050919050565b5f6143c5826136fe565b91506143d0836136fe565b92508282039050818111156143e8576143e7613d9d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614422601b83613600565b915061442d826143ee565b602082019050919050565b5f6020820190508181035f83015261444f81614416565b9050919050565b5f6060820190506144695f830186613841565b6144766020830185613841565b6144836040830184613841565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144e5602183613600565b91506144f08261448b565b604082019050919050565b5f6020820190508181035f830152614512816144d9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145a5816136c3565b82525050565b5f6145b6838361459c565b60208301905092915050565b5f602082019050919050565b5f6145d882614573565b6145e2818561457d565b93506145ed8361458d565b805f5b8381101561461d57815161460488826145ab565b975061460f836145c2565b9250506001810190506145f0565b5085935050505092915050565b5f60a08201905061463d5f830188613841565b61464a6020830187613e92565b818103604083015261465c81866145ce565b905061466b60608301856138ed565b6146786080830184613841565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220273a4a80e3de8194fc8e5510087832df299eec50ea64e3691d889211dae66c0a64736f6c63430008170033

Deployed Bytecode Sourcemap

17564:12616:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4827:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5741:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18028:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22060:311;;;;;;;;;;;;;:::i;:::-;;18601:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17729:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5148:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24137:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18310:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18209:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18243:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5918:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5047:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6281:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22733:92;;;;;;;;;;;;;:::i;:::-;;18111:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17987:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17777:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24310:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17945:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18144:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5264:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10808:148;;;;;;;;;;;;;:::i;:::-;;22834:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10594:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18065:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4935:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23686:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22379:256;;;;;;;;;;;;;:::i;:::-;;18350:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6507:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5399:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18824:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17845:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21006:1036;;;;;;;;;;;;;:::i;:::-;;18275:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23495:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17909:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5582:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18175:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22643:81;;;;;;;;;;;;;:::i;:::-;;22990:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10964:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4827:100;4881:13;4914:5;4907:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4827:100;:::o;5741:169::-;5824:4;5841:39;5850:12;:10;:12::i;:::-;5864:7;5873:6;5841:8;:39::i;:::-;5898:4;5891:11;;5741:169;;;;:::o;18028:30::-;;;;;;;;;;;;;:::o;22060:311::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22116:18:::1;22137:21;22116:42;;22190:1;22177:10;:14;22169:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22242:12;22267:9;;;;;;;;;;;22259:23;;22290:10;22259:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22241:64;;;22324:7;22316:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22105:266;;22060:311::o:0;18601:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17729:41::-;;;;;;;;;;;;;:::o;5148:108::-;5209:7;5236:12;;5229:19;;5148:108;:::o;24137:165::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24249:9:::1;;;;;;;;;;;24218:41;;24235:12;24218:41;;;;;;;;;;;;24282:12;24270:9;;:24;;;;;;;;;;;;;;;;;;24137:165:::0;:::o;18310:33::-;;;;:::o;18209:27::-;;;;:::o;18243:25::-;;;;:::o;5918:355::-;6058:4;6075:36;6085:6;6093:9;6104:6;6075:9;:36::i;:::-;6122:121;6131:6;6139:12;:10;:12::i;:::-;6153:89;6191:6;6153:89;;;;;;;;;;;;;;;;;:11;:19;6165:6;6153:19;;;;;;;;;;;;;;;:33;6173:12;:10;:12::i;:::-;6153:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6122:8;:121::i;:::-;6261:4;6254:11;;5918:355;;;;;:::o;5047:93::-;5105:5;5130:2;5123:9;;5047:93;:::o;6281:218::-;6369:4;6386:83;6395:12;:10;:12::i;:::-;6409:7;6418:50;6457:10;6418:11;:25;6430:12;:10;:12::i;:::-;6418:25;;;;;;;;;;;;;;;:34;6444:7;6418:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6386:8;:83::i;:::-;6487:4;6480:11;;6281:218;;;;:::o;22733:92::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22813:4:::1;22793:17;;:24;;;;;;;;;;;;;;;;;;22733:92::o:0;18111:26::-;;;;:::o;17987:31::-;;;;:::o;17777:28::-;;;;;;;;;;;;;:::o;24310:125::-;24375:4;24399:19;:28;24419:7;24399:28;;;;;;;;;;;;;;;;;;;;;;;;;24392:35;;24310:125;;;:::o;17945:35::-;;;;:::o;18144:24::-;;;;:::o;5264:127::-;5338:7;5365:9;:18;5375:7;5365:18;;;;;;;;;;;;;;;;5358:25;;5264:127;;;:::o;10808:148::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10915:1:::1;10878:40;;10899:6;;;;;;;;;;;10878:40;;;;;;;;;;;;10946:1;10929:6;;:19;;;;;;;;;;;;;;;;;;10808:148::o:0;22834:144::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22966:4:::1;22924:31;:39;22956:6;22924:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22834:144:::0;;:::o;10594:79::-;10632:7;10659:6;;;;;;;;;;;10652:13;;10594:79;:::o;18065:37::-;;;;;;;;;;;;;:::o;4935:104::-;4991:13;5024:7;5017:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4935:104;:::o;23686:245::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23793:13:::1;;;;;;;;;;;23785:21;;:4;:21;;::::0;23777:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23882:41;23911:4;23917:5;23882:28;:41::i;:::-;23686:245:::0;;:::o;22379:256::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:20:::1;22467:24;22485:4;22467:9;:24::i;:::-;22444:47;;22525:1;22510:12;:16;22502:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22578:49;22596:4;22603:9;;;;;;;;;;;22614:12;22578:9;:49::i;:::-;22433:202;22379:256::o:0;18350:27::-;;;;:::o;6507:269::-;6600:4;6617:129;6626:12;:10;:12::i;:::-;6640:7;6649:96;6688:15;6649:96;;;;;;;;;;;;;;;;;:11;:25;6661:12;:10;:12::i;:::-;6649:25;;;;;;;;;;;;;;;:34;6675:7;6649:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6617:8;:129::i;:::-;6764:4;6757:11;;6507:269;;;;:::o;5399:175::-;5485:4;5502:42;5512:12;:10;:12::i;:::-;5526:9;5537:6;5502:9;:42::i;:::-;5562:4;5555:11;;5399:175;;;;:::o;18824:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17845:22::-;;;;:::o;21006:1036::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21058:35:::1;21115:42;21058:100;;21172:58;21206:16;21225:4;21172:25;:58::i;:::-;21259:16;21241:15;;:34;;;;;;;;;;;;;;;;;;21323:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21305:56;;;21370:4;21377:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21305:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21289:13;;:112;;;;;;;;;;;;;;;;;;21412:55;21446:13;;;;;;;;;;;21462:4;21412:25;:55::i;:::-;21478:58;21515:13;;;;;;;;;;;21531:4;21478:28;:58::i;:::-;21557:17;21577:21;21557:41;;21609:19;21663:3;21658:2;21631:24;21649:4;21631:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21609:57;;21697:62;21714:4;21729:15;;;;;;;;;;;21747:11;21697:8;:62::i;:::-;21772:15;;;;;;;;;;;:31;;;21811:9;21844:4;21864:11;21894:1;21941::::0;21984:9:::1;;;;;;;;;;;22008:15;21772:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21041:1001;;;21006:1036::o:0;18275:25::-;;;;:::o;23495:182::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23611:8:::1;23580:19;:28;23600:7;23580:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23651:7;23635:34;;;23660:8;23635:34;;;;;;:::i;:::-;;;;;;;;23495:182:::0;;:::o;17909:29::-;;;;:::o;5582:151::-;5671:7;5698:11;:18;5710:5;5698:18;;;;;;;;;;;;;;;:27;5717:7;5698:27;;;;;;;;;;;;;;;;5691:34;;5582:151;;;;:::o;18175:24::-;;;;:::o;22643:81::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22711:5:::1;22697:11;;:19;;;;;;;;;;;;;;;;;;22643:81::o:0;22990:497::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23162:7:::1;23150:9;:19;;;;23192:7;23180:9;:19;;;;23236:9;;23224;;:21;;;;:::i;:::-;23210:11;:35;;;;23269:8;23256:10;:21;;;;23301:8;23288:10;:21;;;;23348:10;;23335;;:23;;;;:::i;:::-;23320:12;:38;;;;23392:2;23377:11;;:17;;23369:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23453:2;23437:12;;:18;;23429:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;22990:497:::0;;;;:::o;10964:169::-;10731:12;:10;:12::i;:::-;10721:22;;:6;;;;;;;;;;;:22;;;10713:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11088:8:::1;11059:38;;11080:6;;;;;;;;;;;11059:38;;;;;;;;;;;;11117:8;11108:6;;:17;;;;;;;;;;;;;;;;;;10964:169:::0;:::o;180:98::-;233:7;260:10;253:17;;180:98;:::o;8183:381::-;8336:1;8319:19;;:5;:19;;;8311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8417:1;8398:21;;:7;:21;;;8390:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8502:6;8472:11;:18;8484:5;8472:18;;;;;;;;;;;;;;;:27;8491:7;8472:27;;;;;;;;;;;;;;;:36;;;;8540:7;8524:32;;8533:5;8524:32;;;8549:6;8524:32;;;;;;:::i;:::-;;;;;;;;8183:381;;;:::o;24444:3112::-;24592:1;24576:18;;:4;:18;;;24568:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24669:1;24655:16;;:2;:16;;;24647:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24736:1;24726:6;:11;24723:92;;24754:28;24770:4;24776:2;24780:1;24754:15;:28::i;:::-;24797:7;;24723:92;24831:11;;;;;;;;;;;24828:1083;;;24888:7;:5;:7::i;:::-;24880:15;;:4;:15;;;;:49;;;;;24922:7;:5;:7::i;:::-;24916:13;;:2;:13;;;;24880:49;:86;;;;;24964:1;24950:16;;:2;:16;;;;24880:86;:128;;;;;25001:6;24987:21;;:2;:21;;;;24880:128;:160;;;;;25030:10;;;;;;;;;;;25029:11;24880:160;24858:1042;;;25124:25;:31;25150:4;25124:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25160:31;:35;25192:2;25160:35;;;;;;;;;;;;;;;;;;;;;;;;;25159:36;25124:71;25120:765;;;25242:14;;25232:6;:24;;25224:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25375:16;;25358:13;25368:2;25358:9;:13::i;:::-;25349:6;:22;;;;:::i;:::-;:42;;25341:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25120:765;;;25494:25;:29;25520:2;25494:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25528:31;:37;25560:4;25528:37;;;;;;;;;;;;;;;;;;;;;;;;;25527:38;25494:71;25490:395;;;25612:14;;25602:6;:24;;25594:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25490:395;;;25732:31;:35;25764:2;25732:35;;;;;;;;;;;;;;;;;;;;;;;;;25728:157;;25825:16;;25808:13;25818:2;25808:9;:13::i;:::-;25799:6;:22;;;;:::i;:::-;:42;;25791:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25728:157;25490:395;25120:765;24858:1042;24828:1083;25924:28;25955:24;25973:4;25955:9;:24::i;:::-;25924:55;;25993:12;26032:20;;26008;:44;;25993:59;;26084:7;:35;;;;;26109:10;;;;;;;;;;;26108:11;26084:35;:84;;;;;26137:25;:31;26163:4;26137:31;;;;;;;;;;;;;;;;;;;;;;;;;26136:32;26084:84;:127;;;;;26186:19;:25;26206:4;26186:25;;;;;;;;;;;;;;;;;;;;;;;;;26185:26;26084:127;:168;;;;;26229:19;:23;26249:2;26229:23;;;;;;;;;;;;;;;;;;;;;;;;;26228:24;26084:168;26066:306;;;26292:4;26279:10;;:17;;;;;;;;;;;;;;;;;;26314:10;:8;:10::i;:::-;26355:5;26342:10;;:18;;;;;;;;;;;;;;;;;;26066:306;26385:12;26401:10;;;;;;;;;;;26400:11;26385:26;;26513:19;:25;26533:4;26513:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26542:19;:23;26562:2;26542:23;;;;;;;;;;;;;;;;;;;;;;;;;26513:52;26510:99;;;26592:5;26582:15;;26510:99;26622:12;26726:7;26723:779;;;26777:25;:29;26803:2;26777:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26825:1;26810:12;;:16;26777:49;26773:576;;;26853:33;26882:3;26853:24;26864:12;;26853:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26846:40;;26947:12;;26934:10;;26927:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26905:18;;:54;;;;;;;:::i;:::-;;;;;;;;27014:12;;27001:10;;26994:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26978:12;;:48;;;;;;;:::i;:::-;;;;;;;;26773:576;;;27087:25;:31;27113:4;27087:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27136:1;27122:11;;:15;27087:50;27084:265;;;27165:32;27193:3;27165:23;27176:11;;27165:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27158:39;;27257:11;;27245:9;;27238:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27216:18;;:52;;;;;;;:::i;:::-;;;;;;;;27322:11;;27310:9;;27303:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27287:12;;:46;;;;;;;:::i;:::-;;;;;;;;27084:265;26773:576;27376:1;27369:4;:8;27366:93;;;27401:42;27417:4;27431;27438;27401:15;:42::i;:::-;27366:93;27486:4;27476:14;;;;;:::i;:::-;;;26723:779;27515:33;27531:4;27537:2;27541:6;27515:15;:33::i;:::-;24557:2999;;;;24444:3112;;;;:::o;9071:193::-;9157:7;9190:1;9185;:6;;9193:12;9177:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9217:9;9233:1;9229;:5;;;;:::i;:::-;9217:17;;9255:1;9248:8;;;9071:193;;;;;:::o;8737:182::-;8795:7;8815:9;8831:1;8827;:5;;;;:::i;:::-;8815:17;;8856:1;8851;:6;;8843:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8910:1;8903:8;;;8737:182;;;;:::o;23940:189::-;24057:5;24023:25;:31;24049:4;24023:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24115:5;24081:40;;24109:4;24081:40;;;;;;;;;;;;23940:189;;:::o;6784:575::-;6942:1;6924:20;;:6;:20;;;6916:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7026:1;7005:23;;:9;:23;;;6997:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7082:47;7103:6;7111:9;7122:6;7082:20;:47::i;:::-;7163:71;7185:6;7163:71;;;;;;;;;;;;;;;;;:9;:17;7173:6;7163:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7143:9;:17;7153:6;7143:17;;;;;;;;;;;;;;;:91;;;;7268:32;7293:6;7268:9;:20;7278:9;7268:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7245:9;:20;7255:9;7245:20;;;;;;;;;;;;;;;:55;;;;7333:9;7316:35;;7325:6;7316:35;;;7344:6;7316:35;;;;;;:::i;:::-;;;;;;;;6784:575;;;:::o;28700:1477::-;28739:23;28765:24;28783:4;28765:9;:24::i;:::-;28739:50;;28800:25;28849:12;;28828:18;;:33;;;;:::i;:::-;28800:61;;28872:12;28920:1;28901:15;:20;:46;;;;28946:1;28925:17;:22;28901:46;28898:60;;;28950:7;;;;;28898:60;28995:5;28974:26;;:17;;;;;;;;;;;:26;;;28971:254;;29060:2;29037:20;;:25;;;;:::i;:::-;29019:15;:43;29016:125;;;29123:2;29100:20;;:25;;;;:::i;:::-;29082:43;;29016:125;28971:254;;;29189:24;29207:4;29189:9;:24::i;:::-;29171:42;;28971:254;29297:23;29382:1;29362:17;29341:18;;29323:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29297:86;;29394:26;29423:36;29443:15;29423;:19;;:36;;;;:::i;:::-;29394:65;;29473:25;29501:21;29473:49;;29536:36;29553:18;29536:16;:36::i;:::-;29587:18;29608:44;29634:17;29608:21;:25;;:44;;;;:::i;:::-;29587:65;;29666:17;29686:51;29719:17;29686:28;29701:12;;29686:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29666:71;;29748:23;29787:9;29774:10;:22;;;;:::i;:::-;29748:48;;29834:1;29813:18;:22;;;;29861:1;29846:12;:16;;;;29897:1;29879:15;:19;:42;;;;;29920:1;29902:15;:19;29879:42;29876:210;;;29937:46;29950:15;29967;29937:12;:46::i;:::-;30003:71;30018:18;30038:15;30055:18;;30003:71;;;;;;;;:::i;:::-;;;;;;;;29876:210;30120:9;;;;;;;;;;;30112:23;;30143:21;30112:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30099:70;;;;;28728:1449;;;;;;;;;28700:1477;:::o;9272:254::-;9330:7;9361:1;9356;:6;9352:47;;9386:1;9379:8;;;;9352:47;9412:9;9428:1;9424;:5;;;;:::i;:::-;9412:17;;9457:1;9452;9448;:5;;;;:::i;:::-;:10;9440:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9517:1;9510:8;;;9272:254;;;;;:::o;9534:132::-;9592:7;9619:39;9623:1;9626;9619:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9612:46;;9534:132;;;;:::o;8572:125::-;;;;:::o;8927:136::-;8985:7;9012:43;9016:1;9019;9012:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9005:50;;8927:136;;;;:::o;27565:597::-;27694:21;27732:1;27718:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27694:40;;27763:4;27745;27750:1;27745:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27789:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27779:4;27784:1;27779:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27825:62;27842:4;27857:15;;;;;;;;;;;27875:11;27825:8;:62::i;:::-;27927:15;;;;;;;;;;;:66;;;28008:11;28034:1;28078:4;28105;28125:15;27927:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27620:542;27565:597;:::o;28171:520::-;28319:62;28336:4;28351:15;;;;;;;;;;;28369:11;28319:8;:62::i;:::-;28425:15;;;;;;;;;;;:31;;;28464:9;28497:4;28517:11;28543:1;28586;28637:4;28657:15;28425:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28171:520;;:::o;9674:279::-;9760:7;9792:1;9788;:5;9795:12;9780:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9819:9;9835:1;9831;:5;;;;:::i;:::-;9819:17;;9944:1;9937:8;;;9674:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:765::-;7819:6;7827;7835;7843;7892:3;7880:9;7871:7;7867:23;7863:33;7860:120;;;7899:79;;:::i;:::-;7860:120;8019:1;8044:53;8089:7;8080:6;8069:9;8065:22;8044:53;:::i;:::-;8034:63;;7990:117;8146:2;8172:53;8217:7;8208:6;8197:9;8193:22;8172:53;:::i;:::-;8162:63;;8117:118;8274:2;8300:53;8345:7;8336:6;8325:9;8321:22;8300:53;:::i;:::-;8290:63;;8245:118;8402:2;8428:53;8473:7;8464:6;8453:9;8449:22;8428:53;:::i;:::-;8418:63;;8373:118;7733:765;;;;;;;:::o;8504:180::-;8552:77;8549:1;8542:88;8649:4;8646:1;8639:15;8673:4;8670:1;8663:15;8690:320;8734:6;8771:1;8765:4;8761:12;8751:22;;8818:1;8812:4;8808:12;8839:18;8829:81;;8895:4;8887:6;8883:17;8873:27;;8829:81;8957:2;8949:6;8946:14;8926:18;8923:38;8920:84;;8976:18;;:::i;:::-;8920:84;8741:269;8690:320;;;:::o;9016:182::-;9156:34;9152:1;9144:6;9140:14;9133:58;9016:182;:::o;9204:366::-;9346:3;9367:67;9431:2;9426:3;9367:67;:::i;:::-;9360:74;;9443:93;9532:3;9443:93;:::i;:::-;9561:2;9556:3;9552:12;9545:19;;9204:366;;;:::o;9576:419::-;9742:4;9780:2;9769:9;9765:18;9757:26;;9829:9;9823:4;9819:20;9815:1;9804:9;9800:17;9793:47;9857:131;9983:4;9857:131;:::i;:::-;9849:139;;9576:419;;;:::o;10001:221::-;10141:34;10137:1;10129:6;10125:14;10118:58;10210:4;10205:2;10197:6;10193:15;10186:29;10001:221;:::o;10228:366::-;10370:3;10391:67;10455:2;10450:3;10391:67;:::i;:::-;10384:74;;10467:93;10556:3;10467:93;:::i;:::-;10585:2;10580:3;10576:12;10569:19;;10228:366;;;:::o;10600:419::-;10766:4;10804:2;10793:9;10789:18;10781:26;;10853:9;10847:4;10843:20;10839:1;10828:9;10824:17;10817:47;10881:131;11007:4;10881:131;:::i;:::-;10873:139;;10600:419;;;:::o;11025:147::-;11126:11;11163:3;11148:18;;11025:147;;;;:::o;11178:114::-;;:::o;11298:398::-;11457:3;11478:83;11559:1;11554:3;11478:83;:::i;:::-;11471:90;;11570:93;11659:3;11570:93;:::i;:::-;11688:1;11683:3;11679:11;11672:18;;11298:398;;;:::o;11702:379::-;11886:3;11908:147;12051:3;11908:147;:::i;:::-;11901:154;;12072:3;12065:10;;11702:379;;;:::o;12087:177::-;12227:29;12223:1;12215:6;12211:14;12204:53;12087:177;:::o;12270:366::-;12412:3;12433:67;12497:2;12492:3;12433:67;:::i;:::-;12426:74;;12509:93;12598:3;12509:93;:::i;:::-;12627:2;12622:3;12618:12;12611:19;;12270:366;;;:::o;12642:419::-;12808:4;12846:2;12835:9;12831:18;12823:26;;12895:9;12889:4;12885:20;12881:1;12870:9;12866:17;12859:47;12923:131;13049:4;12923:131;:::i;:::-;12915:139;;12642:419;;;:::o;13067:244::-;13207:34;13203:1;13195:6;13191:14;13184:58;13276:27;13271:2;13263:6;13259:15;13252:52;13067:244;:::o;13317:366::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:419::-;13855:4;13893:2;13882:9;13878:18;13870:26;;13942:9;13936:4;13932:20;13928:1;13917:9;13913:17;13906:47;13970:131;14096:4;13970:131;:::i;:::-;13962:139;;13689:419;;;:::o;14114:223::-;14254:34;14250:1;14242:6;14238:14;14231:58;14323:6;14318:2;14310:6;14306:15;14299:31;14114:223;:::o;14343:366::-;14485:3;14506:67;14570:2;14565:3;14506:67;:::i;:::-;14499:74;;14582:93;14671:3;14582:93;:::i;:::-;14700:2;14695:3;14691:12;14684:19;;14343:366;;;:::o;14715:419::-;14881:4;14919:2;14908:9;14904:18;14896:26;;14968:9;14962:4;14958:20;14954:1;14943:9;14939:17;14932:47;14996:131;15122:4;14996:131;:::i;:::-;14988:139;;14715:419;;;:::o;15140:143::-;15197:5;15228:6;15222:13;15213:22;;15244:33;15271:5;15244:33;:::i;:::-;15140:143;;;;:::o;15289:351::-;15359:6;15408:2;15396:9;15387:7;15383:23;15379:32;15376:119;;;15414:79;;:::i;:::-;15376:119;15534:1;15559:64;15615:7;15606:6;15595:9;15591:22;15559:64;:::i;:::-;15549:74;;15505:128;15289:351;;;;:::o;15646:332::-;15767:4;15805:2;15794:9;15790:18;15782:26;;15818:71;15886:1;15875:9;15871:17;15862:6;15818:71;:::i;:::-;15899:72;15967:2;15956:9;15952:18;15943:6;15899:72;:::i;:::-;15646:332;;;;;:::o;15984:180::-;16032:77;16029:1;16022:88;16129:4;16126:1;16119:15;16153:4;16150:1;16143:15;16170:410;16210:7;16233:20;16251:1;16233:20;:::i;:::-;16228:25;;16267:20;16285:1;16267:20;:::i;:::-;16262:25;;16322:1;16319;16315:9;16344:30;16362:11;16344:30;:::i;:::-;16333:41;;16523:1;16514:7;16510:15;16507:1;16504:22;16484:1;16477:9;16457:83;16434:139;;16553:18;;:::i;:::-;16434:139;16218:362;16170:410;;;;:::o;16586:180::-;16634:77;16631:1;16624:88;16731:4;16728:1;16721:15;16755:4;16752:1;16745:15;16772:185;16812:1;16829:20;16847:1;16829:20;:::i;:::-;16824:25;;16863:20;16881:1;16863:20;:::i;:::-;16858:25;;16902:1;16892:35;;16907:18;;:::i;:::-;16892:35;16949:1;16946;16942:9;16937:14;;16772:185;;;;:::o;16963:85::-;17008:7;17037:5;17026:16;;16963:85;;;:::o;17054:158::-;17112:9;17145:61;17163:42;17172:32;17198:5;17172:32;:::i;:::-;17163:42;:::i;:::-;17145:61;:::i;:::-;17132:74;;17054:158;;;:::o;17218:147::-;17313:45;17352:5;17313:45;:::i;:::-;17308:3;17301:58;17218:147;;:::o;17371:807::-;17620:4;17658:3;17647:9;17643:19;17635:27;;17672:71;17740:1;17729:9;17725:17;17716:6;17672:71;:::i;:::-;17753:72;17821:2;17810:9;17806:18;17797:6;17753:72;:::i;:::-;17835:80;17911:2;17900:9;17896:18;17887:6;17835:80;:::i;:::-;17925;18001:2;17990:9;17986:18;17977:6;17925:80;:::i;:::-;18015:73;18083:3;18072:9;18068:19;18059:6;18015:73;:::i;:::-;18098;18166:3;18155:9;18151:19;18142:6;18098:73;:::i;:::-;17371:807;;;;;;;;;:::o;18184:143::-;18241:5;18272:6;18266:13;18257:22;;18288:33;18315:5;18288:33;:::i;:::-;18184:143;;;;:::o;18333:663::-;18421:6;18429;18437;18486:2;18474:9;18465:7;18461:23;18457:32;18454:119;;;18492:79;;:::i;:::-;18454:119;18612:1;18637:64;18693:7;18684:6;18673:9;18669:22;18637:64;:::i;:::-;18627:74;;18583:128;18750:2;18776:64;18832:7;18823:6;18812:9;18808:22;18776:64;:::i;:::-;18766:74;;18721:129;18889:2;18915:64;18971:7;18962:6;18951:9;18947:22;18915:64;:::i;:::-;18905:74;;18860:129;18333:663;;;;;:::o;19002:191::-;19042:3;19061:20;19079:1;19061:20;:::i;:::-;19056:25;;19095:20;19113:1;19095:20;:::i;:::-;19090:25;;19138:1;19135;19131:9;19124:16;;19159:3;19156:1;19153:10;19150:36;;;19166:18;;:::i;:::-;19150:36;19002:191;;;;:::o;19199:169::-;19339:21;19335:1;19327:6;19323:14;19316:45;19199:169;:::o;19374:366::-;19516:3;19537:67;19601:2;19596:3;19537:67;:::i;:::-;19530:74;;19613:93;19702:3;19613:93;:::i;:::-;19731:2;19726:3;19722:12;19715:19;;19374:366;;;:::o;19746:419::-;19912:4;19950:2;19939:9;19935:18;19927:26;;19999:9;19993:4;19989:20;19985:1;19974:9;19970:17;19963:47;20027:131;20153:4;20027:131;:::i;:::-;20019:139;;19746:419;;;:::o;20171:223::-;20311:34;20307:1;20299:6;20295:14;20288:58;20380:6;20375:2;20367:6;20363:15;20356:31;20171:223;:::o;20400:366::-;20542:3;20563:67;20627:2;20622:3;20563:67;:::i;:::-;20556:74;;20639:93;20728:3;20639:93;:::i;:::-;20757:2;20752:3;20748:12;20741:19;;20400:366;;;:::o;20772:419::-;20938:4;20976:2;20965:9;20961:18;20953:26;;21025:9;21019:4;21015:20;21011:1;21000:9;20996:17;20989:47;21053:131;21179:4;21053:131;:::i;:::-;21045:139;;20772:419;;;:::o;21197:221::-;21337:34;21333:1;21325:6;21321:14;21314:58;21406:4;21401:2;21393:6;21389:15;21382:29;21197:221;:::o;21424:366::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:419::-;21962:4;22000:2;21989:9;21985:18;21977:26;;22049:9;22043:4;22039:20;22035:1;22024:9;22020:17;22013:47;22077:131;22203:4;22077:131;:::i;:::-;22069:139;;21796:419;;;:::o;22221:224::-;22361:34;22357:1;22349:6;22345:14;22338:58;22430:7;22425:2;22417:6;22413:15;22406:32;22221:224;:::o;22451:366::-;22593:3;22614:67;22678:2;22673:3;22614:67;:::i;:::-;22607:74;;22690:93;22779:3;22690:93;:::i;:::-;22808:2;22803:3;22799:12;22792:19;;22451:366;;;:::o;22823:419::-;22989:4;23027:2;23016:9;23012:18;23004:26;;23076:9;23070:4;23066:20;23062:1;23051:9;23047:17;23040:47;23104:131;23230:4;23104:131;:::i;:::-;23096:139;;22823:419;;;:::o;23248:222::-;23388:34;23384:1;23376:6;23372:14;23365:58;23457:5;23452:2;23444:6;23440:15;23433:30;23248:222;:::o;23476:366::-;23618:3;23639:67;23703:2;23698:3;23639:67;:::i;:::-;23632:74;;23715:93;23804:3;23715:93;:::i;:::-;23833:2;23828:3;23824:12;23817:19;;23476:366;;;:::o;23848:419::-;24014:4;24052:2;24041:9;24037:18;24029:26;;24101:9;24095:4;24091:20;24087:1;24076:9;24072:17;24065:47;24129:131;24255:4;24129:131;:::i;:::-;24121:139;;23848:419;;;:::o;24273:240::-;24413:34;24409:1;24401:6;24397:14;24390:58;24482:23;24477:2;24469:6;24465:15;24458:48;24273:240;:::o;24519:366::-;24661:3;24682:67;24746:2;24741:3;24682:67;:::i;:::-;24675:74;;24758:93;24847:3;24758:93;:::i;:::-;24876:2;24871:3;24867:12;24860:19;;24519:366;;;:::o;24891:419::-;25057:4;25095:2;25084:9;25080:18;25072:26;;25144:9;25138:4;25134:20;25130:1;25119:9;25115:17;25108:47;25172:131;25298:4;25172:131;:::i;:::-;25164:139;;24891:419;;;:::o;25316:169::-;25456:21;25452:1;25444:6;25440:14;25433:45;25316:169;:::o;25491:366::-;25633:3;25654:67;25718:2;25713:3;25654:67;:::i;:::-;25647:74;;25730:93;25819:3;25730:93;:::i;:::-;25848:2;25843:3;25839:12;25832:19;;25491:366;;;:::o;25863:419::-;26029:4;26067:2;26056:9;26052:18;26044:26;;26116:9;26110:4;26106:20;26102:1;26091:9;26087:17;26080:47;26144:131;26270:4;26144:131;:::i;:::-;26136:139;;25863:419;;;:::o;26288:241::-;26428:34;26424:1;26416:6;26412:14;26405:58;26497:24;26492:2;26484:6;26480:15;26473:49;26288:241;:::o;26535:366::-;26677:3;26698:67;26762:2;26757:3;26698:67;:::i;:::-;26691:74;;26774:93;26863:3;26774:93;:::i;:::-;26892:2;26887:3;26883:12;26876:19;;26535:366;;;:::o;26907:419::-;27073:4;27111:2;27100:9;27096:18;27088:26;;27160:9;27154:4;27150:20;27146:1;27135:9;27131:17;27124:47;27188:131;27314:4;27188:131;:::i;:::-;27180:139;;26907:419;;;:::o;27332:194::-;27372:4;27392:20;27410:1;27392:20;:::i;:::-;27387:25;;27426:20;27444:1;27426:20;:::i;:::-;27421:25;;27470:1;27467;27463:9;27455:17;;27494:1;27488:4;27485:11;27482:37;;;27499:18;;:::i;:::-;27482:37;27332:194;;;;:::o;27532:177::-;27672:29;27668:1;27660:6;27656:14;27649:53;27532:177;:::o;27715:366::-;27857:3;27878:67;27942:2;27937:3;27878:67;:::i;:::-;27871:74;;27954:93;28043:3;27954:93;:::i;:::-;28072:2;28067:3;28063:12;28056:19;;27715:366;;;:::o;28087:419::-;28253:4;28291:2;28280:9;28276:18;28268:26;;28340:9;28334:4;28330:20;28326:1;28315:9;28311:17;28304:47;28368:131;28494:4;28368:131;:::i;:::-;28360:139;;28087:419;;;:::o;28512:442::-;28661:4;28699:2;28688:9;28684:18;28676:26;;28712:71;28780:1;28769:9;28765:17;28756:6;28712:71;:::i;:::-;28793:72;28861:2;28850:9;28846:18;28837:6;28793:72;:::i;:::-;28875;28943:2;28932:9;28928:18;28919:6;28875:72;:::i;:::-;28512:442;;;;;;:::o;28960:220::-;29100:34;29096:1;29088:6;29084:14;29077:58;29169:3;29164:2;29156:6;29152:15;29145:28;28960:220;:::o;29186:366::-;29328:3;29349:67;29413:2;29408:3;29349:67;:::i;:::-;29342:74;;29425:93;29514:3;29425:93;:::i;:::-;29543:2;29538:3;29534:12;29527:19;;29186:366;;;:::o;29558:419::-;29724:4;29762:2;29751:9;29747:18;29739:26;;29811:9;29805:4;29801:20;29797:1;29786:9;29782:17;29775:47;29839:131;29965:4;29839:131;:::i;:::-;29831:139;;29558:419;;;:::o;29983:180::-;30031:77;30028:1;30021:88;30128:4;30125:1;30118:15;30152:4;30149:1;30142:15;30169:180;30217:77;30214:1;30207:88;30314:4;30311:1;30304:15;30338:4;30335:1;30328:15;30355:114;30422:6;30456:5;30450:12;30440:22;;30355:114;;;:::o;30475:184::-;30574:11;30608:6;30603:3;30596:19;30648:4;30643:3;30639:14;30624:29;;30475:184;;;;:::o;30665:132::-;30732:4;30755:3;30747:11;;30785:4;30780:3;30776:14;30768:22;;30665:132;;;:::o;30803:108::-;30880:24;30898:5;30880:24;:::i;:::-;30875:3;30868:37;30803:108;;:::o;30917:179::-;30986:10;31007:46;31049:3;31041:6;31007:46;:::i;:::-;31085:4;31080:3;31076:14;31062:28;;30917:179;;;;:::o;31102:113::-;31172:4;31204;31199:3;31195:14;31187:22;;31102:113;;;:::o;31251:732::-;31370:3;31399:54;31447:5;31399:54;:::i;:::-;31469:86;31548:6;31543:3;31469:86;:::i;:::-;31462:93;;31579:56;31629:5;31579:56;:::i;:::-;31658:7;31689:1;31674:284;31699:6;31696:1;31693:13;31674:284;;;31775:6;31769:13;31802:63;31861:3;31846:13;31802:63;:::i;:::-;31795:70;;31888:60;31941:6;31888:60;:::i;:::-;31878:70;;31734:224;31721:1;31718;31714:9;31709:14;;31674:284;;;31678:14;31974:3;31967:10;;31375:608;;;31251:732;;;;:::o;31989:831::-;32252:4;32290:3;32279:9;32275:19;32267:27;;32304:71;32372:1;32361:9;32357:17;32348:6;32304:71;:::i;:::-;32385:80;32461:2;32450:9;32446:18;32437:6;32385:80;:::i;:::-;32512:9;32506:4;32502:20;32497:2;32486:9;32482:18;32475:48;32540:108;32643:4;32634:6;32540:108;:::i;:::-;32532:116;;32658:72;32726:2;32715:9;32711:18;32702:6;32658:72;:::i;:::-;32740:73;32808:3;32797:9;32793:19;32784:6;32740:73;:::i;:::-;31989:831;;;;;;;;:::o

Swarm Source

ipfs://273a4a80e3de8194fc8e5510087832df299eec50ea64e3691d889211dae66c0a
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.