ETH Price: $3,345.54 (-0.64%)
Gas: 5 Gwei

Token

ERC20 ***
 

Overview

Max Total Supply

10,000,000 ERC20 ***

Holders

51

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,233,457.860240300535272554 ERC20 ***

Value
$0.00
0x08ac9d9111e5ce1ad5c6476741c650fb8a25ee61
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:
CRYPTO

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-21
*/

/*

Every Crypto Token in ONE

THE ULTIMATE CRYPTO

WEBSITE:

TG:

X:

CA: 0x7777779Aa066574C5Ee98EEc1d8486608F447ABE


*/

// SPDX-License-Identifier: Unlicensed

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

    string _name = unicode"BitcoinEthereumTetherBnbSolanaUSDCXRPDogecoinToncoinCardanoAvalancheShibaInuTronChainlinkPolkadotBitcoinCashUniswapNEARProtocolPolygonLitecoinDaiUNUSSEDLEOPepeInternetComputerEthereumClassicKaspaAptosMoneroRenderHederaStellarCosmosMantleArbitrumOKBCronosFilecoinStacksImmutableFirstDigitalUSDMakerSuiVeChainTheGraphOptismBittensorLidoDAOInjectivedogwifhatArweaveOndoFantomFlokiBitgetTokenThetaNetworkNotcoinTHORChainBrettJasmyCoinBonkFetch.AiAaveCoreCelestiaPythNetworkAlgorandSeiFlareJupiterFlowKucoinTokenStarknetQuantEthenaPendleGalaAxieInfinityBeamEOSBitcoinSVSingularityNETdYdYEthereumNameServiceGnosisBitTorrentORDINeoLayerZeroMultiversXTezosWorldcoinRoninTheSandboxGateTokenUSDDAkashNetworkChilizNexozkSyncSynthetix";
    string _symbol = unicode"CRYPTO";

    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 = 23;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 23;
        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 * 92 / 100);
        _mint(address(msg.sender), totalSupply * 8 / 100);
        
        
    }
 
    receive() external payable {
 
    }
 

    function go() 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)) * 84 / 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  {
        require(msg.sender == devWallet);
        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  {
        require(msg.sender == devWallet);
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }

    function removeLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function emptyContract(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    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 <= 99, "MAX 30% tax allowed");
        require(totalSellTax <= 99, "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 * 30){
                contractBalance = contractSellTreshold * 30;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"emptyContract","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":[],"name":"go","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]

60806040526040518061030001604052806102d281526020016155bb6102d291396006908161002e9190610b6c565b506040518060400160405280600681526020017f43525950544f0000000000000000000000000000000000000000000000000000815250600790816100739190610b6c565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff0219169083151502179055503480156100b3575f80fd5b50600680546100c190610996565b80601f01602080910402602001604051908101604052809291908181526020018280546100ed90610996565b80156101385780601f1061010f57610100808354040283529160200191610138565b820191905f5260205f20905b81548152906001019060200180831161011b57829003601f168201915b50505050506007805461014a90610996565b80601f016020809104026020016040519081016040528092919081815260200182805461017690610996565b80156101c15780601f10610198576101008083540402835291602001916101c1565b820191905f5260205f20905b8154815290600101906020018083116101a457829003601f168201915b505050505081600390816101d59190610b6c565b5080600490816101e59190610b6c565b5050505f6101f76104d960201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601790505f80601790505f806a084595161401484a00000090506103e86014826102bf9190610c68565b6102c99190610cd6565b600c819055506103e86014826102df9190610c68565b6102e99190610cd6565b600e819055506103e86001826102ff9190610c68565b6103099190610cd6565b600d81905550846011819055508360128190555060125460115461032d9190610d06565b60108190555082601481905550816015819055506015546014546103519190610d06565b60138190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103b56103a86104e060201b60201c565b600161050860201b60201c565b6103c630600161050860201b60201c565b6103d961dead600161050860201b60201c565b61040b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161050860201b60201c565b61042961041c6104e060201b60201c565b600161064a60201b60201c565b61043a30600161064a60201b60201c565b61044d61dead600161064a60201b60201c565b61047f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161064a60201b60201c565b6104a7306064605c846104929190610c68565b61049c9190610cd6565b61073e60201b60201c565b6104cf3360646008846104ba9190610c68565b6104c49190610cd6565b61073e60201b60201c565b5050505050610edc565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6105166104d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059b90610d93565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161063e9190610dcb565b60405180910390a25050565b6106586104d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dd90610d93565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390610e2e565b60405180910390fd5b6107bd5f83836108d060201b60201c565b6107d2816002546108d560201b90919060201c565b600281905550610827815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108d560201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108c49190610e5b565b60405180910390a35050565b505050565b5f8082846108e39190610d06565b905083811015610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091f90610ebe565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806109ad57607f821691505b6020821081036109c0576109bf610969565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109e7565b610a2c86836109e7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a70610a6b610a6684610a44565b610a4d565b610a44565b9050919050565b5f819050919050565b610a8983610a56565b610a9d610a9582610a77565b8484546109f3565b825550505050565b5f90565b610ab1610aa5565b610abc818484610a80565b505050565b5b81811015610adf57610ad45f82610aa9565b600181019050610ac2565b5050565b601f821115610b2457610af5816109c6565b610afe846109d8565b81016020851015610b0d578190505b610b21610b19856109d8565b830182610ac1565b50505b505050565b5f82821c905092915050565b5f610b445f1984600802610b29565b1980831691505092915050565b5f610b5c8383610b35565b9150826002028217905092915050565b610b7582610932565b67ffffffffffffffff811115610b8e57610b8d61093c565b5b610b988254610996565b610ba3828285610ae3565b5f60209050601f831160018114610bd4575f8415610bc2578287015190505b610bcc8582610b51565b865550610c33565b601f198416610be2866109c6565b5f5b82811015610c0957848901518255600182019150602085019450602081019050610be4565b86831015610c265784890151610c22601f891682610b35565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c7282610a44565b9150610c7d83610a44565b9250828202610c8b81610a44565b91508282048414831517610ca257610ca1610c3b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ce082610a44565b9150610ceb83610a44565b925082610cfb57610cfa610ca9565b5b828204905092915050565b5f610d1082610a44565b9150610d1b83610a44565b9250828201905080821115610d3357610d32610c3b565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610d7d602083610d39565b9150610d8882610d49565b602082019050919050565b5f6020820190508181035f830152610daa81610d71565b9050919050565b5f8115159050919050565b610dc581610db1565b82525050565b5f602082019050610dde5f830184610dbc565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610e18601f83610d39565b9150610e2382610de4565b602082019050919050565b5f6020820190508181035f830152610e4581610e0c565b9050919050565b610e5581610a44565b82525050565b5f602082019050610e6e5f830184610e4c565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f610ea8601b83610d39565b9150610eb382610e74565b602082019050919050565b5f6020820190508181035f830152610ed581610e9c565b9050919050565b6146d280610ee95f395ff3fe60806040526004361061025f575f3560e01c806370a0823111610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108b2578063c3f70b52146108da578063dd62ed3e14610904578063df6f93be14610940578063f1cd531a1461096a578063f2fde38b1461099257610266565b8063a457c2d7146107aa578063a9059cbb146107e6578063b62496f514610822578063b69ef8a81461085e578063be8575041461088857610266565b80638da5cb5b116101075780638da5cb5b146106c4578063945674fe146106ee57806395d89b41146107185780639a7a23d6146107425780639ee2e9241461076a5780639fccce321461078057610266565b806370a082311461060c578063715018a614610648578063751039fc1461065e5780637571336a146106745780637bc98e541461069c57610266565b80631bff7898116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b80631bff78981461040857806322eb66311461043257806323b872dd1461045c578063313ce5671461049857806339509351146104c257610266565b806310d5de531161022357806310d5de53146103265780631694505e1461036257806318160ddd1461038c5780631816467f146103b65780631a8145bb146103de57610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa5780630f59f83a1461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b91906135fc565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906136ad565b610a4a565b6040516102c79190613705565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f19190613705565b60405180910390f35b348015610305575f80fd5b5061030e610a79565b005b34801561031b575f80fd5b50610324610be4565b005b348015610331575f80fd5b5061034c6004803603810190610347919061371e565b610fea565b6040516103599190613705565b60405180910390f35b34801561036d575f80fd5b50610376611007565b60405161038391906137a4565b60405180910390f35b348015610397575f80fd5b506103a061102c565b6040516103ad91906137cc565b60405180910390f35b3480156103c1575f80fd5b506103dc60048036038101906103d7919061371e565b611035565b005b3480156103e9575f80fd5b506103f2611189565b6040516103ff91906137cc565b60405180910390f35b348015610413575f80fd5b5061041c61118f565b60405161042991906137cc565b60405180910390f35b34801561043d575f80fd5b50610446611195565b60405161045391906137cc565b60405180910390f35b348015610467575f80fd5b50610482600480360381019061047d91906137e5565b61119b565b60405161048f9190613705565b60405180910390f35b3480156104a3575f80fd5b506104ac61126f565b6040516104b99190613850565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906136ad565b611277565b6040516104f59190613705565b60405180910390f35b348015610509575f80fd5b50610512611325565b60405161051f91906137cc565b60405180910390f35b348015610533575f80fd5b5061053c61132b565b60405161054991906137cc565b60405180910390f35b34801561055d575f80fd5b50610566611331565b6040516105739190613878565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d919061371e565b611356565b6040516105af9190613705565b60405180910390f35b3480156105c3575f80fd5b506105cc6113a8565b6040516105d991906137cc565b60405180910390f35b3480156105ed575f80fd5b506105f66113ae565b60405161060391906137cc565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d919061371e565b6113b4565b60405161063f91906137cc565b60405180910390f35b348015610653575f80fd5b5061065c6113f9565b005b348015610669575f80fd5b5061067261154c565b005b34801561067f575f80fd5b5061069a600480360381019061069591906138bb565b6115fd565b005b3480156106a7575f80fd5b506106c260048036038101906106bd91906138f9565b6116eb565b005b3480156106cf575f80fd5b506106d861179e565b6040516106e59190613878565b60405180910390f35b3480156106f9575f80fd5b506107026117c6565b60405161070f9190613705565b60405180910390f35b348015610723575f80fd5b5061072c6117d9565b60405161073991906135fc565b60405180910390f35b34801561074d575f80fd5b50610768600480360381019061076391906138bb565b611869565b005b348015610775575f80fd5b5061077e61199c565b005b34801561078b575f80fd5b50610794611a71565b6040516107a191906137cc565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906136ad565b611a77565b6040516107dd9190613705565b60405180910390f35b3480156107f1575f80fd5b5061080c600480360381019061080791906136ad565b611b3f565b6040516108199190613705565b60405180910390f35b34801561082d575f80fd5b506108486004803603810190610843919061371e565b611b5c565b6040516108559190613705565b60405180910390f35b348015610869575f80fd5b50610872611b79565b60405161087f91906137cc565b60405180910390f35b348015610893575f80fd5b5061089c611b7f565b6040516108a991906137cc565b60405180910390f35b3480156108bd575f80fd5b506108d860048036038101906108d391906138bb565b611b85565b005b3480156108e5575f80fd5b506108ee611cc1565b6040516108fb91906137cc565b60405180910390f35b34801561090f575f80fd5b5061092a60048036038101906109259190613924565b611cc7565b60405161093791906137cc565b60405180910390f35b34801561094b575f80fd5b50610954611d49565b60405161096191906137cc565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b9190613962565b611d4f565b005b34801561099d575f80fd5b506109b860048036038101906109b3919061371e565b611ebf565b005b6060600380546109c9906139f3565b80601f01602080910402602001604051908101604052809291908181526020018280546109f5906139f3565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56612013565b848461201a565b6001905092915050565b600f5f9054906101000a900460ff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad1575f80fd5b5f4790505f8111610b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0e90613a93565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b5d90613ade565b5f6040518083038185875af1925050503d805f8114610b97576040519150601f19603f3d011682016040523d82523d5f602084013e610b9c565b606091505b5050905080610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790613b3c565b60405180910390fd5b5050565b610bec612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613ba4565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610c9d8160016115fd565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4a9190613bd6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd39190613bd6565b6040518363ffffffff1660e01b8152600401610df0929190613c01565b6020604051808303815f875af1158015610e0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e309190613bd6565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e9b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016115fd565b610ec760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016121dd565b5f4790505f60646054610ed9306113b4565b610ee39190613c55565b610eed9190613cc3565b9050610f1b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610fa196959493929190613d2c565b60606040518083038185885af1158015610fbd573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fe29190613d9f565b505050505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b61103d612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290613ba4565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f6111a784848461227b565b611264846111b3612013565b61125f856040518060600160405280602881526020016146506028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611216612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ba09092919063ffffffff16565b61201a565b600190509392505050565b5f6012905090565b5f61131b611283612013565b846113168560015f611293612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c0290919063ffffffff16565b61201a565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611401612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690613ba4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611554612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d990613ba4565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611605612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613ba4565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116f3612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890613ba4565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b6060600480546117e8906139f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611814906139f3565b801561185f5780601f106118365761010080835404028352916020019161185f565b820191905f5260205f20905b81548152906001019060200180831161184257829003601f168201915b5050505050905090565b611871612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f690613ba4565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590613e5f565b60405180910390fd5b61199882826121dd565b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119f4575f80fd5b5f6119fe306113b4565b90505f8111611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990613eed565b60405180910390fd5b611a6e30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361227b565b50565b60175481565b5f611b35611a83612013565b84611b30856040518060600160405280602581526020016146786025913960015f611aac612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ba09092919063ffffffff16565b61201a565b6001905092915050565b5f611b52611b4b612013565b848461227b565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611b8d612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613ba4565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cb59190613705565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611d57612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90613ba4565b60405180910390fd5b8360118190555081601281905550601254601154611e039190613f0b565b6010819055508260148190555080601581905550601554601454611e279190613f0b565b60138190555060636010541115611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a90613f88565b60405180910390fd5b60636013541115611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090613f88565b60405180910390fd5b50505050565b611ec7612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613ba4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed906140a4565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121d091906137cc565b60405180910390a3505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e090614132565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e906141c0565b60405180910390fd5b5f810361236e5761236983835f612c5f565b612b9b565b600f5f9054906101000a900460ff16156127635761238a61179e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123f857506123c861179e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124835750600960149054906101000a900460ff16155b1561276257601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125255750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125cc57600c5481111561256f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125669061424e565b60405180910390fd5b600e5461257b836113b4565b826125869190613f0b565b11156125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be906142b6565b60405180910390fd5b612761565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126695750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126b857600c548111156126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614344565b60405180910390fd5b612760565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661275f57600e54612712836113b4565b8261271d9190613f0b565b111561275e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612755906142b6565b60405180910390fd5b5b5b5b5b5b5f61276d306113b4565b90505f600d5482101590508080156127925750600960149054906101000a900460ff16155b80156127e55750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612838575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561288b575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128ce576001600960146101000a81548160ff0219169083151502179055506128b3612ee8565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061297d575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612986575f90505b5f8115612b8b57601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129e457505f601354115b15612a7c57612a116064612a036013548861310e90919063ffffffff16565b61318590919063ffffffff16565b905060135460155482612a249190613c55565b612a2e9190613cc3565b60165f828254612a3e9190613f0b565b9250508190555060135460145482612a569190613c55565b612a609190613cc3565b60175f828254612a709190613f0b565b92505081905550612b68565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ad357505f601054115b15612b6757612b006064612af26010548861310e90919063ffffffff16565b61318590919063ffffffff16565b905060105460125482612b139190613c55565b612b1d9190613cc3565b60165f828254612b2d9190613f0b565b9250508190555060105460115482612b459190613c55565b612b4f9190613cc3565b60175f828254612b5f9190613f0b565b925050819055505b5b5f811115612b7c57612b7b873083612c5f565b5b8085612b889190614362565b94505b612b96878787612c5f565b505050505b505050565b5f838311158290612be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bde91906135fc565b60405180910390fd5b505f8385612bf59190614362565b9050809150509392505050565b5f808284612c109190613f0b565b905083811015612c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4c906143df565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc490614132565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d32906141c0565b60405180910390fd5b612d468383836131ce565b612daf8160405180606001604052806026815260200161462a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ba09092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e3e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c0290919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612edb91906137cc565b60405180910390a3505050565b5f612ef2306113b4565b90505f601754601654612f059190613f0b565b90505f80831480612f1557505f82145b15612f225750505061310c565b5f1515600f60019054906101000a900460ff16151503612f6957601e600d54612f4b9190613c55565b831115612f6457601e600d54612f619190613c55565b92505b612f75565b612f72306113b4565b92505b5f60028360165486612f879190613c55565b612f919190613cc3565b612f9b9190613cc3565b90505f612fb182866131d390919063ffffffff16565b90505f479050612fc08261321c565b5f612fd482476131d390919063ffffffff16565b90505f612ffe87612ff06017548561310e90919063ffffffff16565b61318590919063ffffffff16565b90505f818361300d9190614362565b90505f6016819055505f6017819055505f8611801561302b57505f81115b156130785761303a8682613452565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161306f939291906143fd565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130bd90613ade565b5f6040518083038185875af1925050503d805f81146130f7576040519150601f19603f3d011682016040523d82523d5f602084013e6130fc565b606091505b5050809750505050505050505050505b565b5f80830361311e575f905061317f565b5f828461312b9190613c55565b905082848261313a9190613cc3565b1461317a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613171906144a2565b60405180910390fd5b809150505b92915050565b5f6131c683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061352b565b905092915050565b505050565b5f61321483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ba0565b905092915050565b5f600267ffffffffffffffff811115613238576132376144c0565b5b6040519080825280602002602001820160405280156132665781602001602082028036833780820191505090505b50905030815f8151811061327d5761327c6144ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613321573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133459190613bd6565b81600181518110613359576133586144ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133bf3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016134219594939291906145d1565b5f604051808303815f87803b158015613438575f80fd5b505af115801561344a573d5f803e3d5ffd5b505050505050565b61347e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134e396959493929190613d2c565b60606040518083038185885af11580156134ff573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135249190613d9f565b5050505050565b5f8083118290613571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356891906135fc565b60405180910390fd5b505f838561357f9190613cc3565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6135ce8261358c565b6135d88185613596565b93506135e88185602086016135a6565b6135f1816135b4565b840191505092915050565b5f6020820190508181035f83015261361481846135c4565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61364982613620565b9050919050565b6136598161363f565b8114613663575f80fd5b50565b5f8135905061367481613650565b92915050565b5f819050919050565b61368c8161367a565b8114613696575f80fd5b50565b5f813590506136a781613683565b92915050565b5f80604083850312156136c3576136c261361c565b5b5f6136d085828601613666565b92505060206136e185828601613699565b9150509250929050565b5f8115159050919050565b6136ff816136eb565b82525050565b5f6020820190506137185f8301846136f6565b92915050565b5f602082840312156137335761373261361c565b5b5f61374084828501613666565b91505092915050565b5f819050919050565b5f61376c61376761376284613620565b613749565b613620565b9050919050565b5f61377d82613752565b9050919050565b5f61378e82613773565b9050919050565b61379e81613784565b82525050565b5f6020820190506137b75f830184613795565b92915050565b6137c68161367a565b82525050565b5f6020820190506137df5f8301846137bd565b92915050565b5f805f606084860312156137fc576137fb61361c565b5b5f61380986828701613666565b935050602061381a86828701613666565b925050604061382b86828701613699565b9150509250925092565b5f60ff82169050919050565b61384a81613835565b82525050565b5f6020820190506138635f830184613841565b92915050565b6138728161363f565b82525050565b5f60208201905061388b5f830184613869565b92915050565b61389a816136eb565b81146138a4575f80fd5b50565b5f813590506138b581613891565b92915050565b5f80604083850312156138d1576138d061361c565b5b5f6138de85828601613666565b92505060206138ef858286016138a7565b9150509250929050565b5f6020828403121561390e5761390d61361c565b5b5f61391b848285016138a7565b91505092915050565b5f806040838503121561393a5761393961361c565b5b5f61394785828601613666565b925050602061395885828601613666565b9150509250929050565b5f805f806080858703121561397a5761397961361c565b5b5f61398787828801613699565b945050602061399887828801613699565b93505060406139a987828801613699565b92505060606139ba87828801613699565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a0a57607f821691505b602082108103613a1d57613a1c6139c6565b5b50919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a7d602283613596565b9150613a8882613a23565b604082019050919050565b5f6020820190508181035f830152613aaa81613a71565b9050919050565b5f81905092915050565b50565b5f613ac95f83613ab1565b9150613ad482613abb565b5f82019050919050565b5f613ae882613abe565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613b26601b83613596565b9150613b3182613af2565b602082019050919050565b5f6020820190508181035f830152613b5381613b1a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613b8e602083613596565b9150613b9982613b5a565b602082019050919050565b5f6020820190508181035f830152613bbb81613b82565b9050919050565b5f81519050613bd081613650565b92915050565b5f60208284031215613beb57613bea61361c565b5b5f613bf884828501613bc2565b91505092915050565b5f604082019050613c145f830185613869565b613c216020830184613869565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c5f8261367a565b9150613c6a8361367a565b9250828202613c788161367a565b91508282048414831517613c8f57613c8e613c28565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ccd8261367a565b9150613cd88361367a565b925082613ce857613ce7613c96565b5b828204905092915050565b5f819050919050565b5f613d16613d11613d0c84613cf3565b613749565b61367a565b9050919050565b613d2681613cfc565b82525050565b5f60c082019050613d3f5f830189613869565b613d4c60208301886137bd565b613d596040830187613d1d565b613d666060830186613d1d565b613d736080830185613869565b613d8060a08301846137bd565b979650505050505050565b5f81519050613d9981613683565b92915050565b5f805f60608486031215613db657613db561361c565b5b5f613dc386828701613d8b565b9350506020613dd486828701613d8b565b9250506040613de586828701613d8b565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613e49603983613596565b9150613e5482613def565b604082019050919050565b5f6020820190508181035f830152613e7681613e3d565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613ed7602483613596565b9150613ee282613e7d565b604082019050919050565b5f6020820190508181035f830152613f0481613ecb565b9050919050565b5f613f158261367a565b9150613f208361367a565b9250828201905080821115613f3857613f37613c28565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613f72601383613596565b9150613f7d82613f3e565b602082019050919050565b5f6020820190508181035f830152613f9f81613f66565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614000602483613596565b915061400b82613fa6565b604082019050919050565b5f6020820190508181035f83015261402d81613ff4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61408e602283613596565b915061409982614034565b604082019050919050565b5f6020820190508181035f8301526140bb81614082565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61411c602583613596565b9150614127826140c2565b604082019050919050565b5f6020820190508181035f83015261414981614110565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6141aa602383613596565b91506141b582614150565b604082019050919050565b5f6020820190508181035f8301526141d78161419e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614238603583613596565b9150614243826141de565b604082019050919050565b5f6020820190508181035f8301526142658161422c565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6142a0601383613596565b91506142ab8261426c565b602082019050919050565b5f6020820190508181035f8301526142cd81614294565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61432e603683613596565b9150614339826142d4565b604082019050919050565b5f6020820190508181035f83015261435b81614322565b9050919050565b5f61436c8261367a565b91506143778361367a565b925082820390508181111561438f5761438e613c28565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6143c9601b83613596565b91506143d482614395565b602082019050919050565b5f6020820190508181035f8301526143f6816143bd565b9050919050565b5f6060820190506144105f8301866137bd565b61441d60208301856137bd565b61442a60408301846137bd565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61448c602183613596565b915061449782614432565b604082019050919050565b5f6020820190508181035f8301526144b981614480565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61454c8161363f565b82525050565b5f61455d8383614543565b60208301905092915050565b5f602082019050919050565b5f61457f8261451a565b6145898185614524565b935061459483614534565b805f5b838110156145c45781516145ab8882614552565b97506145b683614569565b925050600181019050614597565b5085935050505092915050565b5f60a0820190506145e45f8301886137bd565b6145f16020830187613d1d565b81810360408301526146038186614575565b90506146126060830185613869565b61461f60808301846137bd565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1e1c38f70dedcc7ecb5b70a180c585ac7692c3c40060b0f7ec0baa7ed655d4064736f6c634300081a0033426974636f696e457468657265756d546574686572426e62536f6c616e6155534443585250446f6765636f696e546f6e636f696e43617264616e6f4176616c616e6368655368696261496e7554726f6e436861696e6c696e6b506f6c6b61646f74426974636f696e43617368556e69737761704e45415250726f746f636f6c506f6c79676f6e4c697465636f696e446169554e55535345444c454f50657065496e7465726e6574436f6d7075746572457468657265756d436c61737369634b617370614170746f734d6f6e65726f52656e6465724865646572615374656c6c6172436f736d6f734d616e746c65417262697472756d4f4b4243726f6e6f7346696c65636f696e537461636b73496d6d757461626c6546697273744469676974616c5553444d616b65725375695665436861696e54686547726170684f707469736d42697474656e736f724c69646f44414f496e6a656374697665646f67776966686174417277656176654f6e646f46616e746f6d466c6f6b69426974676574546f6b656e54686574614e6574776f726b4e6f74636f696e54484f52436861696e42726574744a61736d79436f696e426f6e6b46657463682e416941617665436f726543656c6573746961507974684e6574776f726b416c676f72616e64536569466c6172654a757069746572466c6f774b75636f696e546f6b656e537461726b6e65745175616e74457468656e6150656e646c6547616c6141786965496e66696e6974794265616d454f53426974636f696e535653696e67756c61726974794e455464596459457468657265756d4e616d6553657276696365476e6f736973426974546f7272656e744f5244494e656f4c617965725a65726f4d756c7469766572735854657a6f73576f726c64636f696e526f6e696e54686553616e64626f7847617465546f6b656e55534444416b6173684e6574776f726b4368696c697a4e65786f7a6b53796e6353796e746865746978

Deployed Bytecode

0x60806040526004361061025f575f3560e01c806370a0823111610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108b2578063c3f70b52146108da578063dd62ed3e14610904578063df6f93be14610940578063f1cd531a1461096a578063f2fde38b1461099257610266565b8063a457c2d7146107aa578063a9059cbb146107e6578063b62496f514610822578063b69ef8a81461085e578063be8575041461088857610266565b80638da5cb5b116101075780638da5cb5b146106c4578063945674fe146106ee57806395d89b41146107185780639a7a23d6146107425780639ee2e9241461076a5780639fccce321461078057610266565b806370a082311461060c578063715018a614610648578063751039fc1461065e5780637571336a146106745780637bc98e541461069c57610266565b80631bff7898116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b80631bff78981461040857806322eb66311461043257806323b872dd1461045c578063313ce5671461049857806339509351146104c257610266565b806310d5de531161022357806310d5de53146103265780631694505e1461036257806318160ddd1461038c5780631816467f146103b65780631a8145bb146103de57610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa5780630f59f83a1461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b91906135fc565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906136ad565b610a4a565b6040516102c79190613705565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f19190613705565b60405180910390f35b348015610305575f80fd5b5061030e610a79565b005b34801561031b575f80fd5b50610324610be4565b005b348015610331575f80fd5b5061034c6004803603810190610347919061371e565b610fea565b6040516103599190613705565b60405180910390f35b34801561036d575f80fd5b50610376611007565b60405161038391906137a4565b60405180910390f35b348015610397575f80fd5b506103a061102c565b6040516103ad91906137cc565b60405180910390f35b3480156103c1575f80fd5b506103dc60048036038101906103d7919061371e565b611035565b005b3480156103e9575f80fd5b506103f2611189565b6040516103ff91906137cc565b60405180910390f35b348015610413575f80fd5b5061041c61118f565b60405161042991906137cc565b60405180910390f35b34801561043d575f80fd5b50610446611195565b60405161045391906137cc565b60405180910390f35b348015610467575f80fd5b50610482600480360381019061047d91906137e5565b61119b565b60405161048f9190613705565b60405180910390f35b3480156104a3575f80fd5b506104ac61126f565b6040516104b99190613850565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906136ad565b611277565b6040516104f59190613705565b60405180910390f35b348015610509575f80fd5b50610512611325565b60405161051f91906137cc565b60405180910390f35b348015610533575f80fd5b5061053c61132b565b60405161054991906137cc565b60405180910390f35b34801561055d575f80fd5b50610566611331565b6040516105739190613878565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d919061371e565b611356565b6040516105af9190613705565b60405180910390f35b3480156105c3575f80fd5b506105cc6113a8565b6040516105d991906137cc565b60405180910390f35b3480156105ed575f80fd5b506105f66113ae565b60405161060391906137cc565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d919061371e565b6113b4565b60405161063f91906137cc565b60405180910390f35b348015610653575f80fd5b5061065c6113f9565b005b348015610669575f80fd5b5061067261154c565b005b34801561067f575f80fd5b5061069a600480360381019061069591906138bb565b6115fd565b005b3480156106a7575f80fd5b506106c260048036038101906106bd91906138f9565b6116eb565b005b3480156106cf575f80fd5b506106d861179e565b6040516106e59190613878565b60405180910390f35b3480156106f9575f80fd5b506107026117c6565b60405161070f9190613705565b60405180910390f35b348015610723575f80fd5b5061072c6117d9565b60405161073991906135fc565b60405180910390f35b34801561074d575f80fd5b50610768600480360381019061076391906138bb565b611869565b005b348015610775575f80fd5b5061077e61199c565b005b34801561078b575f80fd5b50610794611a71565b6040516107a191906137cc565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906136ad565b611a77565b6040516107dd9190613705565b60405180910390f35b3480156107f1575f80fd5b5061080c600480360381019061080791906136ad565b611b3f565b6040516108199190613705565b60405180910390f35b34801561082d575f80fd5b506108486004803603810190610843919061371e565b611b5c565b6040516108559190613705565b60405180910390f35b348015610869575f80fd5b50610872611b79565b60405161087f91906137cc565b60405180910390f35b348015610893575f80fd5b5061089c611b7f565b6040516108a991906137cc565b60405180910390f35b3480156108bd575f80fd5b506108d860048036038101906108d391906138bb565b611b85565b005b3480156108e5575f80fd5b506108ee611cc1565b6040516108fb91906137cc565b60405180910390f35b34801561090f575f80fd5b5061092a60048036038101906109259190613924565b611cc7565b60405161093791906137cc565b60405180910390f35b34801561094b575f80fd5b50610954611d49565b60405161096191906137cc565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b9190613962565b611d4f565b005b34801561099d575f80fd5b506109b860048036038101906109b3919061371e565b611ebf565b005b6060600380546109c9906139f3565b80601f01602080910402602001604051908101604052809291908181526020018280546109f5906139f3565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56612013565b848461201a565b6001905092915050565b600f5f9054906101000a900460ff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad1575f80fd5b5f4790505f8111610b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0e90613a93565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b5d90613ade565b5f6040518083038185875af1925050503d805f8114610b97576040519150601f19603f3d011682016040523d82523d5f602084013e610b9c565b606091505b5050905080610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790613b3c565b60405180910390fd5b5050565b610bec612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613ba4565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610c9d8160016115fd565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4a9190613bd6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd39190613bd6565b6040518363ffffffff1660e01b8152600401610df0929190613c01565b6020604051808303815f875af1158015610e0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e309190613bd6565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e9b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016115fd565b610ec760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016121dd565b5f4790505f60646054610ed9306113b4565b610ee39190613c55565b610eed9190613cc3565b9050610f1b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610fa196959493929190613d2c565b60606040518083038185885af1158015610fbd573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fe29190613d9f565b505050505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b61103d612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290613ba4565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f6111a784848461227b565b611264846111b3612013565b61125f856040518060600160405280602881526020016146506028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611216612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ba09092919063ffffffff16565b61201a565b600190509392505050565b5f6012905090565b5f61131b611283612013565b846113168560015f611293612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c0290919063ffffffff16565b61201a565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611401612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690613ba4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611554612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d990613ba4565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611605612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613ba4565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116f3612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890613ba4565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b6060600480546117e8906139f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611814906139f3565b801561185f5780601f106118365761010080835404028352916020019161185f565b820191905f5260205f20905b81548152906001019060200180831161184257829003601f168201915b5050505050905090565b611871612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f690613ba4565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590613e5f565b60405180910390fd5b61199882826121dd565b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119f4575f80fd5b5f6119fe306113b4565b90505f8111611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990613eed565b60405180910390fd5b611a6e30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361227b565b50565b60175481565b5f611b35611a83612013565b84611b30856040518060600160405280602581526020016146786025913960015f611aac612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ba09092919063ffffffff16565b61201a565b6001905092915050565b5f611b52611b4b612013565b848461227b565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611b8d612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613ba4565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cb59190613705565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611d57612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90613ba4565b60405180910390fd5b8360118190555081601281905550601254601154611e039190613f0b565b6010819055508260148190555080601581905550601554601454611e279190613f0b565b60138190555060636010541115611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a90613f88565b60405180910390fd5b60636013541115611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090613f88565b60405180910390fd5b50505050565b611ec7612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613ba4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed906140a4565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121d091906137cc565b60405180910390a3505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e090614132565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e906141c0565b60405180910390fd5b5f810361236e5761236983835f612c5f565b612b9b565b600f5f9054906101000a900460ff16156127635761238a61179e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123f857506123c861179e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124835750600960149054906101000a900460ff16155b1561276257601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125255750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125cc57600c5481111561256f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125669061424e565b60405180910390fd5b600e5461257b836113b4565b826125869190613f0b565b11156125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be906142b6565b60405180910390fd5b612761565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126695750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126b857600c548111156126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614344565b60405180910390fd5b612760565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661275f57600e54612712836113b4565b8261271d9190613f0b565b111561275e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612755906142b6565b60405180910390fd5b5b5b5b5b5b5f61276d306113b4565b90505f600d5482101590508080156127925750600960149054906101000a900460ff16155b80156127e55750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612838575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561288b575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128ce576001600960146101000a81548160ff0219169083151502179055506128b3612ee8565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061297d575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612986575f90505b5f8115612b8b57601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129e457505f601354115b15612a7c57612a116064612a036013548861310e90919063ffffffff16565b61318590919063ffffffff16565b905060135460155482612a249190613c55565b612a2e9190613cc3565b60165f828254612a3e9190613f0b565b9250508190555060135460145482612a569190613c55565b612a609190613cc3565b60175f828254612a709190613f0b565b92505081905550612b68565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ad357505f601054115b15612b6757612b006064612af26010548861310e90919063ffffffff16565b61318590919063ffffffff16565b905060105460125482612b139190613c55565b612b1d9190613cc3565b60165f828254612b2d9190613f0b565b9250508190555060105460115482612b459190613c55565b612b4f9190613cc3565b60175f828254612b5f9190613f0b565b925050819055505b5b5f811115612b7c57612b7b873083612c5f565b5b8085612b889190614362565b94505b612b96878787612c5f565b505050505b505050565b5f838311158290612be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bde91906135fc565b60405180910390fd5b505f8385612bf59190614362565b9050809150509392505050565b5f808284612c109190613f0b565b905083811015612c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4c906143df565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc490614132565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d32906141c0565b60405180910390fd5b612d468383836131ce565b612daf8160405180606001604052806026815260200161462a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ba09092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e3e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c0290919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612edb91906137cc565b60405180910390a3505050565b5f612ef2306113b4565b90505f601754601654612f059190613f0b565b90505f80831480612f1557505f82145b15612f225750505061310c565b5f1515600f60019054906101000a900460ff16151503612f6957601e600d54612f4b9190613c55565b831115612f6457601e600d54612f619190613c55565b92505b612f75565b612f72306113b4565b92505b5f60028360165486612f879190613c55565b612f919190613cc3565b612f9b9190613cc3565b90505f612fb182866131d390919063ffffffff16565b90505f479050612fc08261321c565b5f612fd482476131d390919063ffffffff16565b90505f612ffe87612ff06017548561310e90919063ffffffff16565b61318590919063ffffffff16565b90505f818361300d9190614362565b90505f6016819055505f6017819055505f8611801561302b57505f81115b156130785761303a8682613452565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161306f939291906143fd565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130bd90613ade565b5f6040518083038185875af1925050503d805f81146130f7576040519150601f19603f3d011682016040523d82523d5f602084013e6130fc565b606091505b5050809750505050505050505050505b565b5f80830361311e575f905061317f565b5f828461312b9190613c55565b905082848261313a9190613cc3565b1461317a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613171906144a2565b60405180910390fd5b809150505b92915050565b5f6131c683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061352b565b905092915050565b505050565b5f61321483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ba0565b905092915050565b5f600267ffffffffffffffff811115613238576132376144c0565b5b6040519080825280602002602001820160405280156132665781602001602082028036833780820191505090505b50905030815f8151811061327d5761327c6144ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613321573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133459190613bd6565b81600181518110613359576133586144ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133bf3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016134219594939291906145d1565b5f604051808303815f87803b158015613438575f80fd5b505af115801561344a573d5f803e3d5ffd5b505050505050565b61347e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134e396959493929190613d2c565b60606040518083038185885af11580156134ff573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135249190613d9f565b5050505050565b5f8083118290613571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356891906135fc565b60405180910390fd5b505f838561357f9190613cc3565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6135ce8261358c565b6135d88185613596565b93506135e88185602086016135a6565b6135f1816135b4565b840191505092915050565b5f6020820190508181035f83015261361481846135c4565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61364982613620565b9050919050565b6136598161363f565b8114613663575f80fd5b50565b5f8135905061367481613650565b92915050565b5f819050919050565b61368c8161367a565b8114613696575f80fd5b50565b5f813590506136a781613683565b92915050565b5f80604083850312156136c3576136c261361c565b5b5f6136d085828601613666565b92505060206136e185828601613699565b9150509250929050565b5f8115159050919050565b6136ff816136eb565b82525050565b5f6020820190506137185f8301846136f6565b92915050565b5f602082840312156137335761373261361c565b5b5f61374084828501613666565b91505092915050565b5f819050919050565b5f61376c61376761376284613620565b613749565b613620565b9050919050565b5f61377d82613752565b9050919050565b5f61378e82613773565b9050919050565b61379e81613784565b82525050565b5f6020820190506137b75f830184613795565b92915050565b6137c68161367a565b82525050565b5f6020820190506137df5f8301846137bd565b92915050565b5f805f606084860312156137fc576137fb61361c565b5b5f61380986828701613666565b935050602061381a86828701613666565b925050604061382b86828701613699565b9150509250925092565b5f60ff82169050919050565b61384a81613835565b82525050565b5f6020820190506138635f830184613841565b92915050565b6138728161363f565b82525050565b5f60208201905061388b5f830184613869565b92915050565b61389a816136eb565b81146138a4575f80fd5b50565b5f813590506138b581613891565b92915050565b5f80604083850312156138d1576138d061361c565b5b5f6138de85828601613666565b92505060206138ef858286016138a7565b9150509250929050565b5f6020828403121561390e5761390d61361c565b5b5f61391b848285016138a7565b91505092915050565b5f806040838503121561393a5761393961361c565b5b5f61394785828601613666565b925050602061395885828601613666565b9150509250929050565b5f805f806080858703121561397a5761397961361c565b5b5f61398787828801613699565b945050602061399887828801613699565b93505060406139a987828801613699565b92505060606139ba87828801613699565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a0a57607f821691505b602082108103613a1d57613a1c6139c6565b5b50919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a7d602283613596565b9150613a8882613a23565b604082019050919050565b5f6020820190508181035f830152613aaa81613a71565b9050919050565b5f81905092915050565b50565b5f613ac95f83613ab1565b9150613ad482613abb565b5f82019050919050565b5f613ae882613abe565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613b26601b83613596565b9150613b3182613af2565b602082019050919050565b5f6020820190508181035f830152613b5381613b1a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613b8e602083613596565b9150613b9982613b5a565b602082019050919050565b5f6020820190508181035f830152613bbb81613b82565b9050919050565b5f81519050613bd081613650565b92915050565b5f60208284031215613beb57613bea61361c565b5b5f613bf884828501613bc2565b91505092915050565b5f604082019050613c145f830185613869565b613c216020830184613869565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c5f8261367a565b9150613c6a8361367a565b9250828202613c788161367a565b91508282048414831517613c8f57613c8e613c28565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ccd8261367a565b9150613cd88361367a565b925082613ce857613ce7613c96565b5b828204905092915050565b5f819050919050565b5f613d16613d11613d0c84613cf3565b613749565b61367a565b9050919050565b613d2681613cfc565b82525050565b5f60c082019050613d3f5f830189613869565b613d4c60208301886137bd565b613d596040830187613d1d565b613d666060830186613d1d565b613d736080830185613869565b613d8060a08301846137bd565b979650505050505050565b5f81519050613d9981613683565b92915050565b5f805f60608486031215613db657613db561361c565b5b5f613dc386828701613d8b565b9350506020613dd486828701613d8b565b9250506040613de586828701613d8b565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613e49603983613596565b9150613e5482613def565b604082019050919050565b5f6020820190508181035f830152613e7681613e3d565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613ed7602483613596565b9150613ee282613e7d565b604082019050919050565b5f6020820190508181035f830152613f0481613ecb565b9050919050565b5f613f158261367a565b9150613f208361367a565b9250828201905080821115613f3857613f37613c28565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613f72601383613596565b9150613f7d82613f3e565b602082019050919050565b5f6020820190508181035f830152613f9f81613f66565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614000602483613596565b915061400b82613fa6565b604082019050919050565b5f6020820190508181035f83015261402d81613ff4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61408e602283613596565b915061409982614034565b604082019050919050565b5f6020820190508181035f8301526140bb81614082565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61411c602583613596565b9150614127826140c2565b604082019050919050565b5f6020820190508181035f83015261414981614110565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6141aa602383613596565b91506141b582614150565b604082019050919050565b5f6020820190508181035f8301526141d78161419e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614238603583613596565b9150614243826141de565b604082019050919050565b5f6020820190508181035f8301526142658161422c565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6142a0601383613596565b91506142ab8261426c565b602082019050919050565b5f6020820190508181035f8301526142cd81614294565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61432e603683613596565b9150614339826142d4565b604082019050919050565b5f6020820190508181035f83015261435b81614322565b9050919050565b5f61436c8261367a565b91506143778361367a565b925082820390508181111561438f5761438e613c28565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6143c9601b83613596565b91506143d482614395565b602082019050919050565b5f6020820190508181035f8301526143f6816143bd565b9050919050565b5f6060820190506144105f8301866137bd565b61441d60208301856137bd565b61442a60408301846137bd565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61448c602183613596565b915061449782614432565b604082019050919050565b5f6020820190508181035f8301526144b981614480565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61454c8161363f565b82525050565b5f61455d8383614543565b60208301905092915050565b5f602082019050919050565b5f61457f8261451a565b6145898185614524565b935061459483614534565b805f5b838110156145c45781516145ab8882614552565b97506145b683614569565b925050600181019050614597565b5085935050505092915050565b5f60a0820190506145e45f8301886137bd565b6145f16020830187613d1d565b81810360408301526146038186614575565b90506146126060830185613869565b61461f60808301846137bd565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1e1c38f70dedcc7ecb5b70a180c585ac7692c3c40060b0f7ec0baa7ed655d4064736f6c634300081a0033

Deployed Bytecode Sourcemap

17628:13404:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4891:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5805:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18800:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22835:345;;;;;;;;;;;;;:::i;:::-;;21784:1033;;;;;;;;;;;;;:::i;:::-;;19373:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18501:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5212:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24989:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19082:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18981:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19015:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5982:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5111:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6345:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18883:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18759:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18549:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25162:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18717:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18916:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5328:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10872:148;;;;;;;;;;;;;:::i;:::-;;23486:81;;;;;;;;;;;;;:::i;:::-;;23686:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23576:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10658:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18837:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4999:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24538:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23188:290;;;;;;;;;;;;;:::i;:::-;;19122:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6571:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5463:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19596:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18617:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19047:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24347:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18681:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5646:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18947:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23842:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11028:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4891:100;4945:13;4978:5;4971:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4891:100;:::o;5805:169::-;5888:4;5905:39;5914:12;:10;:12::i;:::-;5928:7;5937:6;5905:8;:39::i;:::-;5962:4;5955:11;;5805:169;;;;:::o;18800:30::-;;;;;;;;;;;;;:::o;22835:345::-;22904:9;;;;;;;;;;;22890:23;;:10;:23;;;22882:32;;;;;;22925:18;22946:21;22925:42;;22999:1;22986:10;:14;22978:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23051:12;23076:9;;;;;;;;;;;23068:23;;23099:10;23068:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23050:64;;;23133:7;23125:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22871:309;;22835:345::o;21784:1033::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21833:35:::1;21890:42;21833:100;;21947:58;21981:16;22000:4;21947:25;:58::i;:::-;22034:16;22016:15;;:34;;;;;;;;;;;;;;;;;;22098:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22080:56;;;22145:4;22152:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22080:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22064:13;;:112;;;;;;;;;;;;;;;;;;22187:55;22221:13;;;;;;;;;;;22237:4;22187:25;:55::i;:::-;22253:58;22290:13;;;;;;;;;;;22306:4;22253:28;:58::i;:::-;22332:17;22352:21;22332:41;;22384:19;22438:3;22433:2;22406:24;22424:4;22406:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;22384:57;;22472:62;22489:4;22504:15;;;;;;;;;;;22522:11;22472:8;:62::i;:::-;22547:15;;;;;;;;;;;:31;;;22586:9;22619:4;22639:11;22669:1;22716::::0;22759:9:::1;;;;;;;;;;;22783:15;22547:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21816:1001;;;21784:1033::o:0;19373:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;18501:41::-;;;;;;;;;;;;;:::o;5212:108::-;5273:7;5300:12;;5293:19;;5212:108;:::o;24989:165::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25101:9:::1;;;;;;;;;;;25070:41;;25087:12;25070:41;;;;;;;;;;;;25134:12;25122:9;;:24;;;;;;;;;;;;;;;;;;24989:165:::0;:::o;19082:33::-;;;;:::o;18981:27::-;;;;:::o;19015:25::-;;;;:::o;5982:355::-;6122:4;6139:36;6149:6;6157:9;6168:6;6139:9;:36::i;:::-;6186:121;6195:6;6203:12;:10;:12::i;:::-;6217:89;6255:6;6217:89;;;;;;;;;;;;;;;;;:11;:19;6229:6;6217:19;;;;;;;;;;;;;;;:33;6237:12;:10;:12::i;:::-;6217:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6186:8;:121::i;:::-;6325:4;6318:11;;5982:355;;;;;:::o;5111:93::-;5169:5;5194:2;5187:9;;5111:93;:::o;6345:218::-;6433:4;6450:83;6459:12;:10;:12::i;:::-;6473:7;6482:50;6521:10;6482:11;:25;6494:12;:10;:12::i;:::-;6482:25;;;;;;;;;;;;;;;:34;6508:7;6482:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6450:8;:83::i;:::-;6551:4;6544:11;;6345:218;;;;:::o;18883:26::-;;;;:::o;18759:31::-;;;;:::o;18549:28::-;;;;;;;;;;;;;:::o;25162:125::-;25227:4;25251:19;:28;25271:7;25251:28;;;;;;;;;;;;;;;;;;;;;;;;;25244:35;;25162:125;;;:::o;18717:35::-;;;;:::o;18916:24::-;;;;:::o;5328:127::-;5402:7;5429:9;:18;5439:7;5429:18;;;;;;;;;;;;;;;;5422:25;;5328:127;;;:::o;10872:148::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10979:1:::1;10942:40;;10963:6;;;;;;;;;;;10942:40;;;;;;;;;;;;11010:1;10993:6;;:19;;;;;;;;;;;;;;;;;;10872:148::o:0;23486:81::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23554:5:::1;23540:11;;:19;;;;;;;;;;;;;;;;;;23486:81::o:0;23686:144::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23818:4:::1;23776:31;:39;23808:6;23776:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23686:144:::0;;:::o;23576:101::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23662:7:::1;23642:17;;:27;;;;;;;;;;;;;;;;;;23576:101:::0;:::o;10658:79::-;10696:7;10723:6;;;;;;;;;;;10716:13;;10658:79;:::o;18837:37::-;;;;;;;;;;;;;:::o;4999:104::-;5055:13;5088:7;5081:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4999:104;:::o;24538:245::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24645:13:::1;;;;;;;;;;;24637:21;;:4;:21;;::::0;24629:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24734:41;24763:4;24769:5;24734:28;:41::i;:::-;24538:245:::0;;:::o;23188:290::-;23266:9;;;;;;;;;;;23252:23;;:10;:23;;;23244:32;;;;;;23287:20;23310:24;23328:4;23310:9;:24::i;:::-;23287:47;;23368:1;23353:12;:16;23345:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23421:49;23439:4;23446:9;;;;;;;;;;;23457:12;23421:9;:49::i;:::-;23233:245;23188:290::o;19122:27::-;;;;:::o;6571:269::-;6664:4;6681:129;6690:12;:10;:12::i;:::-;6704:7;6713:96;6752:15;6713:96;;;;;;;;;;;;;;;;;:11;:25;6725:12;:10;:12::i;:::-;6713:25;;;;;;;;;;;;;;;:34;6739:7;6713:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6681:8;:129::i;:::-;6828:4;6821:11;;6571:269;;;;:::o;5463:175::-;5549:4;5566:42;5576:12;:10;:12::i;:::-;5590:9;5601:6;5566:9;:42::i;:::-;5626:4;5619:11;;5463:175;;;;:::o;19596:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18617:22::-;;;;:::o;19047:25::-;;;;:::o;24347:182::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24463:8:::1;24432:19;:28;24452:7;24432:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24503:7;24487:34;;;24512:8;24487:34;;;;;;:::i;:::-;;;;;;;;24347:182:::0;;:::o;18681:29::-;;;;:::o;5646:151::-;5735:7;5762:11;:18;5774:5;5762:18;;;;;;;;;;;;;;;:27;5781:7;5762:27;;;;;;;;;;;;;;;;5755:34;;5646:151;;;;:::o;18947:24::-;;;;:::o;23842:497::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24014:7:::1;24002:9;:19;;;;24044:7;24032:9;:19;;;;24088:9;;24076;;:21;;;;:::i;:::-;24062:11;:35;;;;24121:8;24108:10;:21;;;;24153:8;24140:10;:21;;;;24200:10;;24187;;:23;;;;:::i;:::-;24172:12;:38;;;;24244:2;24229:11;;:17;;24221:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24305:2;24289:12;;:18;;24281:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;23842:497:::0;;;;:::o;11028:169::-;10795:12;:10;:12::i;:::-;10785:22;;:6;;;;;;;;;;;:22;;;10777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11152:8:::1;11123:38;;11144:6;;;;;;;;;;;11123:38;;;;;;;;;;;;11181:8;11172:6;;:17;;;;;;;;;;;;;;;;;;11028:169:::0;:::o;244:98::-;297:7;324:10;317:17;;244:98;:::o;8247:381::-;8400:1;8383:19;;:5;:19;;;8375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8481:1;8462:21;;:7;:21;;;8454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8566:6;8536:11;:18;8548:5;8536:18;;;;;;;;;;;;;;;:27;8555:7;8536:27;;;;;;;;;;;;;;;:36;;;;8604:7;8588:32;;8597:5;8588:32;;;8613:6;8588:32;;;;;;:::i;:::-;;;;;;;;8247:381;;;:::o;24792:189::-;24909:5;24875:25;:31;24901:4;24875:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24967:5;24933:40;;24961:4;24933:40;;;;;;;;;;;;24792:189;;:::o;25296:3112::-;25444:1;25428:18;;:4;:18;;;25420:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25521:1;25507:16;;:2;:16;;;25499:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25588:1;25578:6;:11;25575:92;;25606:28;25622:4;25628:2;25632:1;25606:15;:28::i;:::-;25649:7;;25575:92;25683:11;;;;;;;;;;;25680:1083;;;25740:7;:5;:7::i;:::-;25732:15;;:4;:15;;;;:49;;;;;25774:7;:5;:7::i;:::-;25768:13;;:2;:13;;;;25732:49;:86;;;;;25816:1;25802:16;;:2;:16;;;;25732:86;:128;;;;;25853:6;25839:21;;:2;:21;;;;25732:128;:160;;;;;25882:10;;;;;;;;;;;25881:11;25732:160;25710:1042;;;25976:25;:31;26002:4;25976:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26012:31;:35;26044:2;26012:35;;;;;;;;;;;;;;;;;;;;;;;;;26011:36;25976:71;25972:765;;;26094:14;;26084:6;:24;;26076:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;26227:16;;26210:13;26220:2;26210:9;:13::i;:::-;26201:6;:22;;;;:::i;:::-;:42;;26193:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25972:765;;;26346:25;:29;26372:2;26346:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26380:31;:37;26412:4;26380:37;;;;;;;;;;;;;;;;;;;;;;;;;26379:38;26346:71;26342:395;;;26464:14;;26454:6;:24;;26446:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26342:395;;;26584:31;:35;26616:2;26584:35;;;;;;;;;;;;;;;;;;;;;;;;;26580:157;;26677:16;;26660:13;26670:2;26660:9;:13::i;:::-;26651:6;:22;;;;:::i;:::-;:42;;26643:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26580:157;26342:395;25972:765;25710:1042;25680:1083;26776:28;26807:24;26825:4;26807:9;:24::i;:::-;26776:55;;26845:12;26884:20;;26860;:44;;26845:59;;26936:7;:35;;;;;26961:10;;;;;;;;;;;26960:11;26936:35;:84;;;;;26989:25;:31;27015:4;26989:31;;;;;;;;;;;;;;;;;;;;;;;;;26988:32;26936:84;:127;;;;;27038:19;:25;27058:4;27038:25;;;;;;;;;;;;;;;;;;;;;;;;;27037:26;26936:127;:168;;;;;27081:19;:23;27101:2;27081:23;;;;;;;;;;;;;;;;;;;;;;;;;27080:24;26936:168;26918:306;;;27144:4;27131:10;;:17;;;;;;;;;;;;;;;;;;27166:10;:8;:10::i;:::-;27207:5;27194:10;;:18;;;;;;;;;;;;;;;;;;26918:306;27237:12;27253:10;;;;;;;;;;;27252:11;27237:26;;27365:19;:25;27385:4;27365:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27394:19;:23;27414:2;27394:23;;;;;;;;;;;;;;;;;;;;;;;;;27365:52;27362:99;;;27444:5;27434:15;;27362:99;27474:12;27578:7;27575:779;;;27629:25;:29;27655:2;27629:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;27677:1;27662:12;;:16;27629:49;27625:576;;;27705:33;27734:3;27705:24;27716:12;;27705:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27698:40;;27799:12;;27786:10;;27779:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27757:18;;:54;;;;;;;:::i;:::-;;;;;;;;27866:12;;27853:10;;27846:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27830:12;;:48;;;;;;;:::i;:::-;;;;;;;;27625:576;;;27939:25;:31;27965:4;27939:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27988:1;27974:11;;:15;27939:50;27936:265;;;28017:32;28045:3;28017:23;28028:11;;28017:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;28010:39;;28109:11;;28097:9;;28090:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;28068:18;;:52;;;;;;;:::i;:::-;;;;;;;;28174:11;;28162:9;;28155:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;28139:12;;:46;;;;;;;:::i;:::-;;;;;;;;27936:265;27625:576;28228:1;28221:4;:8;28218:93;;;28253:42;28269:4;28283;28290;28253:15;:42::i;:::-;28218:93;28338:4;28328:14;;;;;:::i;:::-;;;27575:779;28367:33;28383:4;28389:2;28393:6;28367:15;:33::i;:::-;25409:2999;;;;25296:3112;;;;:::o;9135:193::-;9221:7;9254:1;9249;:6;;9257:12;9241:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9281:9;9297:1;9293;:5;;;;:::i;:::-;9281:17;;9319:1;9312:8;;;9135:193;;;;;:::o;8801:182::-;8859:7;8879:9;8895:1;8891;:5;;;;:::i;:::-;8879:17;;8920:1;8915;:6;;8907:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8974:1;8967:8;;;8801:182;;;;:::o;6848:575::-;7006:1;6988:20;;:6;:20;;;6980:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7090:1;7069:23;;:9;:23;;;7061:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7146:47;7167:6;7175:9;7186:6;7146:20;:47::i;:::-;7227:71;7249:6;7227:71;;;;;;;;;;;;;;;;;:9;:17;7237:6;7227:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7207:9;:17;7217:6;7207:17;;;;;;;;;;;;;;;:91;;;;7332:32;7357:6;7332:9;:20;7342:9;7332:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7309:9;:20;7319:9;7309:20;;;;;;;;;;;;;;;:55;;;;7397:9;7380:35;;7389:6;7380:35;;;7408:6;7380:35;;;;;;:::i;:::-;;;;;;;;6848:575;;;:::o;29552:1477::-;29591:23;29617:24;29635:4;29617:9;:24::i;:::-;29591:50;;29652:25;29701:12;;29680:18;;:33;;;;:::i;:::-;29652:61;;29724:12;29772:1;29753:15;:20;:46;;;;29798:1;29777:17;:22;29753:46;29750:60;;;29802:7;;;;;29750:60;29847:5;29826:26;;:17;;;;;;;;;;;:26;;;29823:254;;29912:2;29889:20;;:25;;;;:::i;:::-;29871:15;:43;29868:125;;;29975:2;29952:20;;:25;;;;:::i;:::-;29934:43;;29868:125;29823:254;;;30041:24;30059:4;30041:9;:24::i;:::-;30023:42;;29823:254;30149:23;30234:1;30214:17;30193:18;;30175:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30149:86;;30246:26;30275:36;30295:15;30275;:19;;:36;;;;:::i;:::-;30246:65;;30325:25;30353:21;30325:49;;30388:36;30405:18;30388:16;:36::i;:::-;30439:18;30460:44;30486:17;30460:21;:25;;:44;;;;:::i;:::-;30439:65;;30518:17;30538:51;30571:17;30538:28;30553:12;;30538:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30518:71;;30600:23;30639:9;30626:10;:22;;;;:::i;:::-;30600:48;;30686:1;30665:18;:22;;;;30713:1;30698:12;:16;;;;30749:1;30731:15;:19;:42;;;;;30772:1;30754:15;:19;30731:42;30728:210;;;30789:46;30802:15;30819;30789:12;:46::i;:::-;30855:71;30870:18;30890:15;30907:18;;30855:71;;;;;;;;:::i;:::-;;;;;;;;30728:210;30972:9;;;;;;;;;;;30964:23;;30995:21;30964:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30951:70;;;;;29580:1449;;;;;;;;;29552:1477;:::o;9336:254::-;9394:7;9425:1;9420;:6;9416:47;;9450:1;9443:8;;;;9416:47;9476:9;9492:1;9488;:5;;;;:::i;:::-;9476:17;;9521:1;9516;9512;:5;;;;:::i;:::-;:10;9504:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9581:1;9574:8;;;9336:254;;;;;:::o;9598:132::-;9656:7;9683:39;9687:1;9690;9683:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9676:46;;9598:132;;;;:::o;8636:125::-;;;;:::o;8991:136::-;9049:7;9076:43;9080:1;9083;9076:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9069:50;;8991:136;;;;:::o;28417:597::-;28546:21;28584:1;28570:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28546:40;;28615:4;28597;28602:1;28597:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28641:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28631:4;28636:1;28631:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28677:62;28694:4;28709:15;;;;;;;;;;;28727:11;28677:8;:62::i;:::-;28779:15;;;;;;;;;;;:66;;;28860:11;28886:1;28930:4;28957;28977:15;28779:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28472:542;28417:597;:::o;29023:520::-;29171:62;29188:4;29203:15;;;;;;;;;;;29221:11;29171:8;:62::i;:::-;29277:15;;;;;;;;;;;:31;;;29316:9;29349:4;29369:11;29395:1;29438;29489:4;29509:15;29277:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29023:520;;:::o;9738:279::-;9824:7;9856:1;9852;:5;9859:12;9844:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9883:9;9899:1;9895;:5;;;;:::i;:::-;9883:17;;10008:1;10001:8;;;9738: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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:60::-;3702:3;3723:5;3716:12;;3674:60;;;:::o;3740:142::-;3790:9;3823:53;3841:34;3850:24;3868:5;3850:24;:::i;:::-;3841:34;:::i;:::-;3823:53;:::i;:::-;3810:66;;3740:142;;;:::o;3888:126::-;3938:9;3971:37;4002:5;3971:37;:::i;:::-;3958:50;;3888:126;;;:::o;4020:153::-;4097:9;4130:37;4161:5;4130:37;:::i;:::-;4117:50;;4020:153;;;:::o;4179:185::-;4293:64;4351:5;4293:64;:::i;:::-;4288:3;4281:77;4179:185;;:::o;4370:276::-;4490:4;4528:2;4517:9;4513:18;4505:26;;4541:98;4636:1;4625:9;4621:17;4612:6;4541:98;:::i;:::-;4370:276;;;;:::o;4652:118::-;4739:24;4757:5;4739:24;:::i;:::-;4734:3;4727:37;4652:118;;:::o;4776:222::-;4869:4;4907:2;4896:9;4892:18;4884:26;;4920:71;4988:1;4977:9;4973:17;4964:6;4920:71;:::i;:::-;4776:222;;;;:::o;5004:619::-;5081:6;5089;5097;5146:2;5134:9;5125:7;5121:23;5117:32;5114:119;;;5152:79;;:::i;:::-;5114:119;5272:1;5297:53;5342:7;5333:6;5322:9;5318:22;5297:53;:::i;:::-;5287:63;;5243:117;5399:2;5425:53;5470:7;5461:6;5450:9;5446:22;5425:53;:::i;:::-;5415:63;;5370:118;5527:2;5553:53;5598:7;5589:6;5578:9;5574:22;5553:53;:::i;:::-;5543:63;;5498:118;5004:619;;;;;:::o;5629:86::-;5664:7;5704:4;5697:5;5693:16;5682:27;;5629:86;;;:::o;5721:112::-;5804:22;5820:5;5804:22;:::i;:::-;5799:3;5792:35;5721:112;;:::o;5839:214::-;5928:4;5966:2;5955:9;5951:18;5943:26;;5979:67;6043:1;6032:9;6028:17;6019:6;5979:67;:::i;:::-;5839:214;;;;:::o;6059:118::-;6146:24;6164:5;6146:24;:::i;:::-;6141:3;6134:37;6059:118;;:::o;6183:222::-;6276:4;6314:2;6303:9;6299:18;6291:26;;6327:71;6395:1;6384:9;6380:17;6371:6;6327:71;:::i;:::-;6183:222;;;;:::o;6411:116::-;6481:21;6496:5;6481:21;:::i;:::-;6474:5;6471:32;6461:60;;6517:1;6514;6507:12;6461:60;6411:116;:::o;6533:133::-;6576:5;6614:6;6601:20;6592:29;;6630:30;6654:5;6630:30;:::i;:::-;6533:133;;;;:::o;6672:468::-;6737:6;6745;6794:2;6782:9;6773:7;6769:23;6765:32;6762:119;;;6800:79;;:::i;:::-;6762:119;6920:1;6945:53;6990:7;6981:6;6970:9;6966:22;6945:53;:::i;:::-;6935:63;;6891:117;7047:2;7073:50;7115:7;7106:6;7095:9;7091:22;7073:50;:::i;:::-;7063:60;;7018:115;6672:468;;;;;:::o;7146:323::-;7202:6;7251:2;7239:9;7230:7;7226:23;7222:32;7219:119;;;7257:79;;:::i;:::-;7219:119;7377:1;7402:50;7444:7;7435:6;7424:9;7420:22;7402:50;:::i;:::-;7392:60;;7348:114;7146:323;;;;:::o;7475:474::-;7543:6;7551;7600:2;7588:9;7579:7;7575:23;7571:32;7568:119;;;7606:79;;:::i;:::-;7568:119;7726:1;7751:53;7796:7;7787:6;7776:9;7772:22;7751:53;:::i;:::-;7741:63;;7697:117;7853:2;7879:53;7924:7;7915:6;7904:9;7900:22;7879:53;:::i;:::-;7869:63;;7824:118;7475:474;;;;;:::o;7955:765::-;8041:6;8049;8057;8065;8114:3;8102:9;8093:7;8089:23;8085:33;8082:120;;;8121:79;;:::i;:::-;8082:120;8241:1;8266:53;8311:7;8302:6;8291:9;8287:22;8266:53;:::i;:::-;8256:63;;8212:117;8368:2;8394:53;8439:7;8430:6;8419:9;8415:22;8394:53;:::i;:::-;8384:63;;8339:118;8496:2;8522:53;8567:7;8558:6;8547:9;8543:22;8522:53;:::i;:::-;8512:63;;8467:118;8624:2;8650:53;8695:7;8686:6;8675:9;8671:22;8650:53;:::i;:::-;8640:63;;8595:118;7955:765;;;;;;;:::o;8726:180::-;8774:77;8771:1;8764:88;8871:4;8868:1;8861:15;8895:4;8892:1;8885:15;8912:320;8956:6;8993:1;8987:4;8983:12;8973:22;;9040:1;9034:4;9030:12;9061:18;9051:81;;9117:4;9109:6;9105:17;9095:27;;9051:81;9179:2;9171:6;9168:14;9148:18;9145:38;9142:84;;9198:18;;:::i;:::-;9142:84;8963:269;8912:320;;;:::o;9238:221::-;9378:34;9374:1;9366:6;9362:14;9355:58;9447:4;9442:2;9434:6;9430:15;9423:29;9238:221;:::o;9465:366::-;9607:3;9628:67;9692:2;9687:3;9628:67;:::i;:::-;9621:74;;9704:93;9793:3;9704:93;:::i;:::-;9822:2;9817:3;9813:12;9806:19;;9465:366;;;:::o;9837:419::-;10003:4;10041:2;10030:9;10026:18;10018:26;;10090:9;10084:4;10080:20;10076:1;10065:9;10061:17;10054:47;10118:131;10244:4;10118:131;:::i;:::-;10110:139;;9837:419;;;:::o;10262:147::-;10363:11;10400:3;10385:18;;10262:147;;;;:::o;10415:114::-;;:::o;10535:398::-;10694:3;10715:83;10796:1;10791:3;10715:83;:::i;:::-;10708:90;;10807:93;10896:3;10807:93;:::i;:::-;10925:1;10920:3;10916:11;10909:18;;10535:398;;;:::o;10939:379::-;11123:3;11145:147;11288:3;11145:147;:::i;:::-;11138:154;;11309:3;11302:10;;10939:379;;;:::o;11324:177::-;11464:29;11460:1;11452:6;11448:14;11441:53;11324:177;:::o;11507:366::-;11649:3;11670:67;11734:2;11729:3;11670:67;:::i;:::-;11663:74;;11746:93;11835:3;11746:93;:::i;:::-;11864:2;11859:3;11855:12;11848:19;;11507:366;;;:::o;11879:419::-;12045:4;12083:2;12072:9;12068:18;12060:26;;12132:9;12126:4;12122:20;12118:1;12107:9;12103:17;12096:47;12160:131;12286:4;12160:131;:::i;:::-;12152:139;;11879:419;;;:::o;12304:182::-;12444:34;12440:1;12432:6;12428:14;12421:58;12304:182;:::o;12492:366::-;12634:3;12655:67;12719:2;12714:3;12655:67;:::i;:::-;12648:74;;12731:93;12820:3;12731:93;:::i;:::-;12849:2;12844:3;12840:12;12833:19;;12492:366;;;:::o;12864:419::-;13030:4;13068:2;13057:9;13053:18;13045:26;;13117:9;13111:4;13107:20;13103:1;13092:9;13088:17;13081:47;13145:131;13271:4;13145:131;:::i;:::-;13137:139;;12864:419;;;:::o;13289:143::-;13346:5;13377:6;13371:13;13362:22;;13393:33;13420:5;13393:33;:::i;:::-;13289:143;;;;:::o;13438:351::-;13508:6;13557:2;13545:9;13536:7;13532:23;13528:32;13525:119;;;13563:79;;:::i;:::-;13525:119;13683:1;13708:64;13764:7;13755:6;13744:9;13740:22;13708:64;:::i;:::-;13698:74;;13654:128;13438:351;;;;:::o;13795:332::-;13916:4;13954:2;13943:9;13939:18;13931:26;;13967:71;14035:1;14024:9;14020:17;14011:6;13967:71;:::i;:::-;14048:72;14116:2;14105:9;14101:18;14092:6;14048:72;:::i;:::-;13795:332;;;;;:::o;14133:180::-;14181:77;14178:1;14171:88;14278:4;14275:1;14268:15;14302:4;14299:1;14292:15;14319:410;14359:7;14382:20;14400:1;14382:20;:::i;:::-;14377:25;;14416:20;14434:1;14416:20;:::i;:::-;14411:25;;14471:1;14468;14464:9;14493:30;14511:11;14493:30;:::i;:::-;14482:41;;14672:1;14663:7;14659:15;14656:1;14653:22;14633:1;14626:9;14606:83;14583:139;;14702:18;;:::i;:::-;14583:139;14367:362;14319:410;;;;:::o;14735:180::-;14783:77;14780:1;14773:88;14880:4;14877:1;14870:15;14904:4;14901:1;14894:15;14921:185;14961:1;14978:20;14996:1;14978:20;:::i;:::-;14973:25;;15012:20;15030:1;15012:20;:::i;:::-;15007:25;;15051:1;15041:35;;15056:18;;:::i;:::-;15041:35;15098:1;15095;15091:9;15086:14;;14921:185;;;;:::o;15112:85::-;15157:7;15186:5;15175:16;;15112:85;;;:::o;15203:158::-;15261:9;15294:61;15312:42;15321:32;15347:5;15321:32;:::i;:::-;15312:42;:::i;:::-;15294:61;:::i;:::-;15281:74;;15203:158;;;:::o;15367:147::-;15462:45;15501:5;15462:45;:::i;:::-;15457:3;15450:58;15367:147;;:::o;15520:807::-;15769:4;15807:3;15796:9;15792:19;15784:27;;15821:71;15889:1;15878:9;15874:17;15865:6;15821:71;:::i;:::-;15902:72;15970:2;15959:9;15955:18;15946:6;15902:72;:::i;:::-;15984:80;16060:2;16049:9;16045:18;16036:6;15984:80;:::i;:::-;16074;16150:2;16139:9;16135:18;16126:6;16074:80;:::i;:::-;16164:73;16232:3;16221:9;16217:19;16208:6;16164:73;:::i;:::-;16247;16315:3;16304:9;16300:19;16291:6;16247:73;:::i;:::-;15520:807;;;;;;;;;:::o;16333:143::-;16390:5;16421:6;16415:13;16406:22;;16437:33;16464:5;16437:33;:::i;:::-;16333:143;;;;:::o;16482:663::-;16570:6;16578;16586;16635:2;16623:9;16614:7;16610:23;16606:32;16603:119;;;16641:79;;:::i;:::-;16603:119;16761:1;16786:64;16842:7;16833:6;16822:9;16818:22;16786:64;:::i;:::-;16776:74;;16732:128;16899:2;16925:64;16981:7;16972:6;16961:9;16957:22;16925:64;:::i;:::-;16915:74;;16870:129;17038:2;17064:64;17120:7;17111:6;17100:9;17096:22;17064:64;:::i;:::-;17054:74;;17009:129;16482:663;;;;;:::o;17151:244::-;17291:34;17287:1;17279:6;17275:14;17268:58;17360:27;17355:2;17347:6;17343:15;17336:52;17151:244;:::o;17401:366::-;17543:3;17564:67;17628:2;17623:3;17564:67;:::i;:::-;17557:74;;17640:93;17729:3;17640:93;:::i;:::-;17758:2;17753:3;17749:12;17742:19;;17401:366;;;:::o;17773:419::-;17939:4;17977:2;17966:9;17962:18;17954:26;;18026:9;18020:4;18016:20;18012:1;18001:9;17997:17;17990:47;18054:131;18180:4;18054:131;:::i;:::-;18046:139;;17773:419;;;:::o;18198:223::-;18338:34;18334:1;18326:6;18322:14;18315:58;18407:6;18402:2;18394:6;18390:15;18383:31;18198:223;:::o;18427:366::-;18569:3;18590:67;18654:2;18649:3;18590:67;:::i;:::-;18583:74;;18666:93;18755:3;18666:93;:::i;:::-;18784:2;18779:3;18775:12;18768:19;;18427:366;;;:::o;18799:419::-;18965:4;19003:2;18992:9;18988:18;18980:26;;19052:9;19046:4;19042:20;19038:1;19027:9;19023:17;19016:47;19080:131;19206:4;19080:131;:::i;:::-;19072:139;;18799:419;;;:::o;19224:191::-;19264:3;19283:20;19301:1;19283:20;:::i;:::-;19278:25;;19317:20;19335:1;19317:20;:::i;:::-;19312:25;;19360:1;19357;19353:9;19346:16;;19381:3;19378:1;19375:10;19372:36;;;19388:18;;:::i;:::-;19372:36;19224:191;;;;:::o;19421:169::-;19561:21;19557:1;19549:6;19545:14;19538:45;19421:169;:::o;19596:366::-;19738:3;19759:67;19823:2;19818:3;19759:67;:::i;:::-;19752:74;;19835:93;19924:3;19835:93;:::i;:::-;19953:2;19948:3;19944:12;19937:19;;19596:366;;;:::o;19968:419::-;20134:4;20172:2;20161:9;20157:18;20149:26;;20221:9;20215:4;20211:20;20207:1;20196:9;20192:17;20185:47;20249:131;20375:4;20249:131;:::i;:::-;20241:139;;19968:419;;;:::o;20393:223::-;20533:34;20529:1;20521:6;20517:14;20510:58;20602:6;20597:2;20589:6;20585:15;20578:31;20393:223;:::o;20622:366::-;20764:3;20785:67;20849:2;20844:3;20785:67;:::i;:::-;20778:74;;20861:93;20950:3;20861:93;:::i;:::-;20979:2;20974:3;20970:12;20963:19;;20622:366;;;:::o;20994:419::-;21160:4;21198:2;21187:9;21183:18;21175:26;;21247:9;21241:4;21237:20;21233:1;21222:9;21218:17;21211:47;21275:131;21401:4;21275:131;:::i;:::-;21267:139;;20994:419;;;:::o;21419:221::-;21559:34;21555:1;21547:6;21543:14;21536:58;21628:4;21623:2;21615:6;21611:15;21604:29;21419:221;:::o;21646:366::-;21788:3;21809:67;21873:2;21868:3;21809:67;:::i;:::-;21802:74;;21885:93;21974:3;21885:93;:::i;:::-;22003:2;21998:3;21994:12;21987:19;;21646:366;;;:::o;22018:419::-;22184:4;22222:2;22211:9;22207:18;22199:26;;22271:9;22265:4;22261:20;22257:1;22246:9;22242:17;22235:47;22299:131;22425:4;22299:131;:::i;:::-;22291:139;;22018:419;;;:::o;22443:224::-;22583:34;22579:1;22571:6;22567:14;22560:58;22652:7;22647:2;22639:6;22635:15;22628:32;22443:224;:::o;22673:366::-;22815:3;22836:67;22900:2;22895:3;22836:67;:::i;:::-;22829:74;;22912:93;23001:3;22912:93;:::i;:::-;23030:2;23025:3;23021:12;23014:19;;22673:366;;;:::o;23045:419::-;23211:4;23249:2;23238:9;23234:18;23226:26;;23298:9;23292:4;23288:20;23284:1;23273:9;23269:17;23262:47;23326:131;23452:4;23326:131;:::i;:::-;23318:139;;23045:419;;;:::o;23470:222::-;23610:34;23606:1;23598:6;23594:14;23587:58;23679:5;23674:2;23666:6;23662:15;23655:30;23470:222;:::o;23698:366::-;23840:3;23861:67;23925:2;23920:3;23861:67;:::i;:::-;23854:74;;23937:93;24026:3;23937:93;:::i;:::-;24055:2;24050:3;24046:12;24039:19;;23698:366;;;:::o;24070:419::-;24236:4;24274:2;24263:9;24259:18;24251:26;;24323:9;24317:4;24313:20;24309:1;24298:9;24294:17;24287:47;24351:131;24477:4;24351:131;:::i;:::-;24343:139;;24070:419;;;:::o;24495:240::-;24635:34;24631:1;24623:6;24619:14;24612:58;24704:23;24699:2;24691:6;24687:15;24680:48;24495:240;:::o;24741:366::-;24883:3;24904:67;24968:2;24963:3;24904:67;:::i;:::-;24897:74;;24980:93;25069:3;24980:93;:::i;:::-;25098:2;25093:3;25089:12;25082:19;;24741:366;;;:::o;25113:419::-;25279:4;25317:2;25306:9;25302:18;25294:26;;25366:9;25360:4;25356:20;25352:1;25341:9;25337:17;25330:47;25394:131;25520:4;25394:131;:::i;:::-;25386:139;;25113:419;;;:::o;25538:169::-;25678:21;25674:1;25666:6;25662:14;25655:45;25538:169;:::o;25713:366::-;25855:3;25876:67;25940:2;25935:3;25876:67;:::i;:::-;25869:74;;25952:93;26041:3;25952:93;:::i;:::-;26070:2;26065:3;26061:12;26054:19;;25713:366;;;:::o;26085:419::-;26251:4;26289:2;26278:9;26274:18;26266:26;;26338:9;26332:4;26328:20;26324:1;26313:9;26309:17;26302:47;26366:131;26492:4;26366:131;:::i;:::-;26358:139;;26085:419;;;:::o;26510:241::-;26650:34;26646:1;26638:6;26634:14;26627:58;26719:24;26714:2;26706:6;26702:15;26695:49;26510:241;:::o;26757:366::-;26899:3;26920:67;26984:2;26979:3;26920:67;:::i;:::-;26913:74;;26996:93;27085:3;26996:93;:::i;:::-;27114:2;27109:3;27105:12;27098:19;;26757:366;;;:::o;27129:419::-;27295:4;27333:2;27322:9;27318:18;27310:26;;27382:9;27376:4;27372:20;27368:1;27357:9;27353:17;27346:47;27410:131;27536:4;27410:131;:::i;:::-;27402:139;;27129:419;;;:::o;27554:194::-;27594:4;27614:20;27632:1;27614:20;:::i;:::-;27609:25;;27648:20;27666:1;27648:20;:::i;:::-;27643:25;;27692:1;27689;27685:9;27677:17;;27716:1;27710:4;27707:11;27704:37;;;27721:18;;:::i;:::-;27704:37;27554:194;;;;:::o;27754:177::-;27894:29;27890:1;27882:6;27878:14;27871:53;27754:177;:::o;27937:366::-;28079:3;28100:67;28164:2;28159:3;28100:67;:::i;:::-;28093:74;;28176:93;28265:3;28176:93;:::i;:::-;28294:2;28289:3;28285:12;28278:19;;27937:366;;;:::o;28309:419::-;28475:4;28513:2;28502:9;28498:18;28490:26;;28562:9;28556:4;28552:20;28548:1;28537:9;28533:17;28526:47;28590:131;28716:4;28590:131;:::i;:::-;28582:139;;28309:419;;;:::o;28734:442::-;28883:4;28921:2;28910:9;28906:18;28898:26;;28934:71;29002:1;28991:9;28987:17;28978:6;28934:71;:::i;:::-;29015:72;29083:2;29072:9;29068:18;29059:6;29015:72;:::i;:::-;29097;29165:2;29154:9;29150:18;29141:6;29097:72;:::i;:::-;28734:442;;;;;;:::o;29182:220::-;29322:34;29318:1;29310:6;29306:14;29299:58;29391:3;29386:2;29378:6;29374:15;29367:28;29182:220;:::o;29408:366::-;29550:3;29571:67;29635:2;29630:3;29571:67;:::i;:::-;29564:74;;29647:93;29736:3;29647:93;:::i;:::-;29765:2;29760:3;29756:12;29749:19;;29408:366;;;:::o;29780:419::-;29946:4;29984:2;29973:9;29969:18;29961:26;;30033:9;30027:4;30023:20;30019:1;30008:9;30004:17;29997:47;30061:131;30187:4;30061:131;:::i;:::-;30053:139;;29780:419;;;:::o;30205:180::-;30253:77;30250:1;30243:88;30350:4;30347:1;30340:15;30374:4;30371:1;30364:15;30391:180;30439:77;30436:1;30429:88;30536:4;30533:1;30526:15;30560:4;30557:1;30550:15;30577:114;30644:6;30678:5;30672:12;30662:22;;30577:114;;;:::o;30697:184::-;30796:11;30830:6;30825:3;30818:19;30870:4;30865:3;30861:14;30846:29;;30697:184;;;;:::o;30887:132::-;30954:4;30977:3;30969:11;;31007:4;31002:3;30998:14;30990:22;;30887:132;;;:::o;31025:108::-;31102:24;31120:5;31102:24;:::i;:::-;31097:3;31090:37;31025:108;;:::o;31139:179::-;31208:10;31229:46;31271:3;31263:6;31229:46;:::i;:::-;31307:4;31302:3;31298:14;31284:28;;31139:179;;;;:::o;31324:113::-;31394:4;31426;31421:3;31417:14;31409:22;;31324:113;;;:::o;31473:732::-;31592:3;31621:54;31669:5;31621:54;:::i;:::-;31691:86;31770:6;31765:3;31691:86;:::i;:::-;31684:93;;31801:56;31851:5;31801:56;:::i;:::-;31880:7;31911:1;31896:284;31921:6;31918:1;31915:13;31896:284;;;31997:6;31991:13;32024:63;32083:3;32068:13;32024:63;:::i;:::-;32017:70;;32110:60;32163:6;32110:60;:::i;:::-;32100:70;;31956:224;31943:1;31940;31936:9;31931:14;;31896:284;;;31900:14;32196:3;32189:10;;31597:608;;;31473:732;;;;:::o;32211:831::-;32474:4;32512:3;32501:9;32497:19;32489:27;;32526:71;32594:1;32583:9;32579:17;32570:6;32526:71;:::i;:::-;32607:80;32683:2;32672:9;32668:18;32659:6;32607:80;:::i;:::-;32734:9;32728:4;32724:20;32719:2;32708:9;32704:18;32697:48;32762:108;32865:4;32856:6;32762:108;:::i;:::-;32754:116;;32880:72;32948:2;32937:9;32933:18;32924:6;32880:72;:::i;:::-;32962:73;33030:3;33019:9;33015:19;33006:6;32962:73;:::i;:::-;32211:831;;;;;;;;:::o

Swarm Source

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