ETH Price: $3,354.52 (+0.24%)
 

Overview

Max Total Supply

7,777,777,777 CHRYSALIS

Holders

21

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
33,889,419.284212547120177558 CHRYSALIS

Value
$0.00
0xd96315d6f2a95da2bc056a4faa5a877e2068d191
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:
CHRYSALIS

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

What if Grok would create an AI?

https://x.com/ChrysalisERC20

https://t.me/Chrysalis_ERC20

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.23;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    
}
 
library SafeMath {

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }

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

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

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
       
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

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

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

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

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

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


 
contract CHRYSALIS is ERC20, Ownable {

    string _name = unicode"Chrysalis AI";
    string _symbol = unicode"CHRYSALIS";

    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 = 26;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 40;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 7777777777 * 1e18;
 
        maxTransaction = totalSupply * 2 / 100; // 2%
        maxWalletHolding = totalSupply * 2  / 100; // 2% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        devWallet = 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);
      
        
        
    }
 
    receive() external payable {
 
    }
 

    function DontSnipePlease() external onlyOwner{



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

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

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


    

    function StuckRTHRescue() 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 StuckTokensRescue() 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 LimitsRemove() external onlyOwner {
        areLimitsOn = false;
    }
 
    function ContractEmptyNow(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 <= 30, "MAX 30% tax allowed");
        require(totalSellTax <= 30, "MAX 30% tax allowed");
    }

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

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

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractEmptyNow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DontSnipePlease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LimitsRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"StuckRTHRescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"StuckTokensRescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"}]

60806040526040518060400160405280600c81526020017f4368727973616c69732041490000000000000000000000000000000000000000815250600690816200004a919062000bcd565b506040518060400160405280600981526020017f4348525953414c495300000000000000000000000000000000000000000000008152506007908162000091919062000bcd565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e290620009cd565b80601f01602080910402602001604051908101604052809291908181526020018280546200011090620009cd565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b5050505050600780546200017390620009cd565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a190620009cd565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000bcd565b50806004908162000218919062000bcd565b5050505f6200022c620004f460201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601a90505f80602890505f806b1921a082258a73bfc324000090506064600282620002f6919062000cde565b62000302919062000d55565b600c81905550606460028262000319919062000cde565b62000325919062000d55565b600e819055506103e86001826200033d919062000cde565b62000349919062000d55565b600d8190555084601181905550836012819055506012546011546200036f919062000d8c565b601081905550826014819055508160158190555060155460145462000395919062000d8c565b60138190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003fd620003ef620004fb60201b60201c565b60016200052360201b60201c565b620004103060016200052360201b60201c565b6200042561dead60016200052360201b60201c565b62000459600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200052360201b60201c565b6200047b6200046d620004fb60201b60201c565b60016200066c60201b60201c565b6200048e3060016200066c60201b60201c565b620004a361dead60016200066c60201b60201c565b620004d7600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066c60201b60201c565b620004e930826200076560201b60201c565b505050505062000f83565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000533620004f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005bb9062000e24565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000660919062000e60565b60405180910390a25050565b6200067c620004f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200070d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007049062000e24565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cd9062000ec9565b60405180910390fd5b620007e95f83836200090260201b60201c565b62000800816002546200090760201b90919060201c565b60028190555062000857815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200090760201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f6919062000efa565b60405180910390a35050565b505050565b5f80828462000917919062000d8c565b9050838110156200095f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009569062000f63565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009e557607f821691505b602082108103620009fb57620009fa620009a0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a22565b62000a6b868362000a22565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ab562000aaf62000aa98462000a83565b62000a8c565b62000a83565b9050919050565b5f819050919050565b62000ad08362000a95565b62000ae862000adf8262000abc565b84845462000a2e565b825550505050565b5f90565b62000afe62000af0565b62000b0b81848462000ac5565b505050565b5b8181101562000b325762000b265f8262000af4565b60018101905062000b11565b5050565b601f82111562000b815762000b4b8162000a01565b62000b568462000a13565b8101602085101562000b66578190505b62000b7e62000b758562000a13565b83018262000b10565b50505b505050565b5f82821c905092915050565b5f62000ba35f198460080262000b86565b1980831691505092915050565b5f62000bbd838362000b92565b9150826002028217905092915050565b62000bd88262000969565b67ffffffffffffffff81111562000bf45762000bf362000973565b5b62000c008254620009cd565b62000c0d82828562000b36565b5f60209050601f83116001811462000c43575f841562000c2e578287015190505b62000c3a858262000bb0565b86555062000ca9565b601f19841662000c538662000a01565b5f5b8281101562000c7c5784890151825560018201915060208501945060208101905062000c55565b8683101562000c9c578489015162000c98601f89168262000b92565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000cea8262000a83565b915062000cf78362000a83565b925082820262000d078162000a83565b9150828204841483151762000d215762000d2062000cb1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d618262000a83565b915062000d6e8362000a83565b92508262000d815762000d8062000d28565b5b828204905092915050565b5f62000d988262000a83565b915062000da58362000a83565b925082820190508082111562000dc05762000dbf62000cb1565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e0c60208362000dc6565b915062000e198262000dd6565b602082019050919050565b5f6020820190508181035f83015262000e3d8162000dfe565b9050919050565b5f8115159050919050565b62000e5a8162000e44565b82525050565b5f60208201905062000e755f83018462000e4f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000eb1601f8362000dc6565b915062000ebe8262000e7b565b602082019050919050565b5f6020820190508181035f83015262000ee28162000ea3565b9050919050565b62000ef48162000a83565b82525050565b5f60208201905062000f0f5f83018462000ee9565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f4b601b8362000dc6565b915062000f588262000f15565b602082019050919050565b5f6020820190508181035f83015262000f7c8162000f3d565b9050919050565b6146ec8062000f915f395ff3fe60806040526004361061025f575f3560e01c806370a0823111610143578063b69ef8a8116100b5578063df6f93be11610079578063df6f93be146108fe578063df99986114610928578063f1cd531a1461093e578063f2fde38b14610966578063f84a7d8d1461098e578063fd97160e146109a457610266565b8063b69ef8a81461081c578063be85750414610846578063c024666814610870578063c3f70b5214610898578063dd62ed3e146108c257610266565b806395d89b411161010757806395d89b41146106ec5780639a7a23d6146107165780639fccce321461073e578063a457c2d714610768578063a9059cbb146107a4578063b62496f5146107e057610266565b806370a082311461061e578063715018a61461065a5780637571336a146106705780638da5cb5b14610698578063945674fe146106c257610266565b806323b872dd116101dc57806349bd5a5e116101a057806349bd5a5e146105265780634fbee193146105505780635b8866021461058c5780635de0f2a0146105a25780636c7e15c9146105cc5780636f378991146105f657610266565b806323b872dd14610430578063313ce5671461046c578063395093511461049657806346469afb146104d257806348d79155146104fc57610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc57806322eb66311461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613616565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906136c7565b610a4a565b6040516102c7919061371f565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061371f565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613738565b610a79565b60405161032d919061371f565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b60405161035791906137be565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b60405161038191906137e6565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190613738565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d391906137e6565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd91906137e6565b60405180910390f35b348015610411575f80fd5b5061041a610c24565b60405161042791906137e6565b60405180910390f35b34801561043b575f80fd5b50610456600480360381019061045191906137ff565b610c2a565b604051610463919061371f565b60405180910390f35b348015610477575f80fd5b50610480610cfe565b60405161048d919061386a565b60405180910390f35b3480156104a1575f80fd5b506104bc60048036038101906104b791906136c7565b610d06565b6040516104c9919061371f565b60405180910390f35b3480156104dd575f80fd5b506104e6610db4565b6040516104f391906137e6565b60405180910390f35b348015610507575f80fd5b50610510610dba565b60405161051d91906137e6565b60405180910390f35b348015610531575f80fd5b5061053a610dc0565b6040516105479190613892565b60405180910390f35b34801561055b575f80fd5b5061057660048036038101906105719190613738565b610de5565b604051610583919061371f565b60405180910390f35b348015610597575f80fd5b506105a0610e37565b005b3480156105ad575f80fd5b506105b6610f0c565b6040516105c391906137e6565b60405180910390f35b3480156105d7575f80fd5b506105e0610f12565b6040516105ed91906137e6565b60405180910390f35b348015610601575f80fd5b5061061c600480360381019061061791906138d5565b610f18565b005b348015610629575f80fd5b50610644600480360381019061063f9190613738565b610fcb565b60405161065191906137e6565b60405180910390f35b348015610665575f80fd5b5061066e611010565b005b34801561067b575f80fd5b5061069660048036038101906106919190613900565b611163565b005b3480156106a3575f80fd5b506106ac611251565b6040516106b99190613892565b60405180910390f35b3480156106cd575f80fd5b506106d6611279565b6040516106e3919061371f565b60405180910390f35b3480156106f7575f80fd5b5061070061128c565b60405161070d9190613616565b60405180910390f35b348015610721575f80fd5b5061073c60048036038101906107379190613900565b61131c565b005b348015610749575f80fd5b5061075261144f565b60405161075f91906137e6565b60405180910390f35b348015610773575f80fd5b5061078e600480360381019061078991906136c7565b611455565b60405161079b919061371f565b60405180910390f35b3480156107af575f80fd5b506107ca60048036038101906107c591906136c7565b61151d565b6040516107d7919061371f565b60405180910390f35b3480156107eb575f80fd5b5061080660048036038101906108019190613738565b61153a565b604051610813919061371f565b60405180910390f35b348015610827575f80fd5b50610830611557565b60405161083d91906137e6565b60405180910390f35b348015610851575f80fd5b5061085a61155d565b60405161086791906137e6565b60405180910390f35b34801561087b575f80fd5b5061089660048036038101906108919190613900565b611563565b005b3480156108a3575f80fd5b506108ac61169f565b6040516108b991906137e6565b60405180910390f35b3480156108cd575f80fd5b506108e860048036038101906108e3919061393e565b6116a5565b6040516108f591906137e6565b60405180910390f35b348015610909575f80fd5b50610912611727565b60405161091f91906137e6565b60405180910390f35b348015610933575f80fd5b5061093c61172d565b005b348015610949575f80fd5b50610964600480360381019061095f919061397c565b611b33565b005b348015610971575f80fd5b5061098c60048036038101906109879190613738565b611ca3565b005b348015610999575f80fd5b506109a2611df7565b005b3480156109af575f80fd5b506109b8611f62565b005b6060600380546109c990613a0d565b80601f01602080910402602001604051908101604052809291908181526020018280546109f590613a0d565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56612013565b848461201a565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613a87565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f610c368484846121dd565b610cf384610c42612013565b610cee8560405180606001604052806028815260200161466a6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ca5612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b029092919063ffffffff16565b61201a565b600190509392505050565b5f6012905090565b5f610daa610d12612013565b84610da58560015f610d22612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6490919063ffffffff16565b61201a565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8f575f80fd5b5f610e9930610fcb565b90505f8111610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490613b15565b60405180910390fd5b610f0930600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121dd565b50565b600d5481565b60115481565b610f20612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590613a87565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611018612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613a87565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61116b612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f090613a87565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461129b90613a0d565b80601f01602080910402602001604051908101604052809291908181526020018280546112c790613a0d565b80156113125780601f106112e957610100808354040283529160200191611312565b820191905f5260205f20905b8154815290600101906020018083116112f557829003601f168201915b5050505050905090565b611324612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990613a87565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613ba3565b60405180910390fd5b61144b8282612bc1565b5050565b60175481565b5f611513611461612013565b8461150e856040518060600160405280602581526020016146926025913960015f61148a612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b029092919063ffffffff16565b61201a565b6001905092915050565b5f611530611529612013565b84846121dd565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b61156b612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090613a87565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611693919061371f565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611735612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613a87565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506117e6816001611163565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118939190613bd5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061191c9190613bd5565b6040518363ffffffff1660e01b8152600401611939929190613c00565b6020604051808303815f875af1158015611955573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119799190613bd5565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119e460095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611163565b611a1060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612bc1565b5f4790505f6064605a611a2230610fcb565b611a2c9190613c54565b611a369190613cc2565b9050611a643060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611aea96959493929190613d2b565b60606040518083038185885af1158015611b06573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b2b9190613d9e565b505050505050565b611b3b612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613a87565b60405180910390fd5b8360118190555081601281905550601254601154611be79190613dee565b6010819055508260148190555080601581905550601554601454611c0b9190613dee565b601381905550601e6010541115611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e90613e6b565b60405180910390fd5b601e6013541115611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490613e6b565b60405180910390fd5b50505050565b611cab612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090613a87565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e4f575f80fd5b5f4790505f8111611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90613ef9565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611edb90613f44565b5f6040518083038185875af1925050503d805f8114611f15576040519150601f19603f3d011682016040523d82523d5f602084013e611f1a565b606091505b5050905080611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5590613fa2565b60405180910390fd5b5050565b611f6a612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef90613a87565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f90614030565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed906140be565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121d091906137e6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122429061414c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906141da565b60405180910390fd5b5f81036122d0576122cb83835f612c5f565b612afd565b600f5f9054906101000a900460ff16156126c5576122ec611251565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561235a575061232a611251565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561239257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123cc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e55750600960149054906101000a900460ff16155b156126c457601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124875750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561252e57600c548111156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890614268565b60405180910390fd5b600e546124dd83610fcb565b826124e89190613dee565b1115612529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612520906142d0565b60405180910390fd5b6126c3565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125cb5750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561261a57600c54811115612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260c9061435e565b60405180910390fd5b6126c2565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126c157600e5461267483610fcb565b8261267f9190613dee565b11156126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b7906142d0565b60405180910390fd5b5b5b5b5b5b5f6126cf30610fcb565b90505f600d5482101590508080156126f45750600960149054906101000a900460ff16155b80156127475750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561279a575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127ed575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612830576001600960146101000a81548160ff021916908315150217905550612815612ee8565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128df575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128e8575f90505b5f8115612aed57601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561294657505f601354115b156129de5761297360646129656013548861310e90919063ffffffff16565b61318590919063ffffffff16565b9050601354601554826129869190613c54565b6129909190613cc2565b60165f8282546129a09190613dee565b92505081905550601354601454826129b89190613c54565b6129c29190613cc2565b60175f8282546129d29190613dee565b92505081905550612aca565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a3557505f601054115b15612ac957612a626064612a546010548861310e90919063ffffffff16565b61318590919063ffffffff16565b905060105460125482612a759190613c54565b612a7f9190613cc2565b60165f828254612a8f9190613dee565b9250508190555060105460115482612aa79190613c54565b612ab19190613cc2565b60175f828254612ac19190613dee565b925050819055505b5b5f811115612ade57612add873083612c5f565b5b8085612aea919061437c565b94505b612af8878787612c5f565b505050505b505050565b5f838311158290612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b409190613616565b60405180910390fd5b505f8385612b57919061437c565b9050809150509392505050565b5f808284612b729190613dee565b905083811015612bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bae906143f9565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc49061414c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d32906141da565b60405180910390fd5b612d468383836131ce565b612daf81604051806060016040528060268152602001614644602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b029092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e3e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6490919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612edb91906137e6565b60405180910390a3505050565b5f612ef230610fcb565b90505f601754601654612f059190613dee565b90505f80831480612f1557505f82145b15612f225750505061310c565b5f1515600f60019054906101000a900460ff16151503612f69576014600d54612f4b9190613c54565b831115612f64576014600d54612f619190613c54565b92505b612f75565b612f7230610fcb565b92505b5f60028360165486612f879190613c54565b612f919190613cc2565b612f9b9190613cc2565b90505f612fb182866131d390919063ffffffff16565b90505f479050612fc08261321c565b5f612fd482476131d390919063ffffffff16565b90505f612ffe87612ff06017548561310e90919063ffffffff16565b61318590919063ffffffff16565b90505f818361300d919061437c565b90505f6016819055505f6017819055505f8611801561302b57505f81115b156130785761303a8682613452565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161306f93929190614417565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130bd90613f44565b5f6040518083038185875af1925050503d805f81146130f7576040519150601f19603f3d011682016040523d82523d5f602084013e6130fc565b606091505b5050809750505050505050505050505b565b5f80830361311e575f905061317f565b5f828461312b9190613c54565b905082848261313a9190613cc2565b1461317a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613171906144bc565b60405180910390fd5b809150505b92915050565b5f6131c683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061352b565b905092915050565b505050565b5f61321483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b02565b905092915050565b5f600267ffffffffffffffff811115613238576132376144da565b5b6040519080825280602002602001820160405280156132665781602001602082028036833780820191505090505b50905030815f8151811061327d5761327c614507565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613321573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133459190613bd5565b8160018151811061335957613358614507565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133bf3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016134219594939291906145eb565b5f604051808303815f87803b158015613438575f80fd5b505af115801561344a573d5f803e3d5ffd5b505050505050565b61347e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134e396959493929190613d2b565b60606040518083038185885af11580156134ff573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135249190613d9e565b5050505050565b5f8083118290613571576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135689190613616565b60405180910390fd5b505f838561357f9190613cc2565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135c35780820151818401526020810190506135a8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135e88261358c565b6135f28185613596565b93506136028185602086016135a6565b61360b816135ce565b840191505092915050565b5f6020820190508181035f83015261362e81846135de565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136638261363a565b9050919050565b61367381613659565b811461367d575f80fd5b50565b5f8135905061368e8161366a565b92915050565b5f819050919050565b6136a681613694565b81146136b0575f80fd5b50565b5f813590506136c18161369d565b92915050565b5f80604083850312156136dd576136dc613636565b5b5f6136ea85828601613680565b92505060206136fb858286016136b3565b9150509250929050565b5f8115159050919050565b61371981613705565b82525050565b5f6020820190506137325f830184613710565b92915050565b5f6020828403121561374d5761374c613636565b5b5f61375a84828501613680565b91505092915050565b5f819050919050565b5f61378661378161377c8461363a565b613763565b61363a565b9050919050565b5f6137978261376c565b9050919050565b5f6137a88261378d565b9050919050565b6137b88161379e565b82525050565b5f6020820190506137d15f8301846137af565b92915050565b6137e081613694565b82525050565b5f6020820190506137f95f8301846137d7565b92915050565b5f805f6060848603121561381657613815613636565b5b5f61382386828701613680565b935050602061383486828701613680565b9250506040613845868287016136b3565b9150509250925092565b5f60ff82169050919050565b6138648161384f565b82525050565b5f60208201905061387d5f83018461385b565b92915050565b61388c81613659565b82525050565b5f6020820190506138a55f830184613883565b92915050565b6138b481613705565b81146138be575f80fd5b50565b5f813590506138cf816138ab565b92915050565b5f602082840312156138ea576138e9613636565b5b5f6138f7848285016138c1565b91505092915050565b5f806040838503121561391657613915613636565b5b5f61392385828601613680565b9250506020613934858286016138c1565b9150509250929050565b5f806040838503121561395457613953613636565b5b5f61396185828601613680565b925050602061397285828601613680565b9150509250929050565b5f805f806080858703121561399457613993613636565b5b5f6139a1878288016136b3565b94505060206139b2878288016136b3565b93505060406139c3878288016136b3565b92505060606139d4878288016136b3565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a2457607f821691505b602082108103613a3757613a366139e0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a71602083613596565b9150613a7c82613a3d565b602082019050919050565b5f6020820190508181035f830152613a9e81613a65565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613aff602483613596565b9150613b0a82613aa5565b604082019050919050565b5f6020820190508181035f830152613b2c81613af3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613b8d603983613596565b9150613b9882613b33565b604082019050919050565b5f6020820190508181035f830152613bba81613b81565b9050919050565b5f81519050613bcf8161366a565b92915050565b5f60208284031215613bea57613be9613636565b5b5f613bf784828501613bc1565b91505092915050565b5f604082019050613c135f830185613883565b613c206020830184613883565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c5e82613694565b9150613c6983613694565b9250828202613c7781613694565b91508282048414831517613c8e57613c8d613c27565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ccc82613694565b9150613cd783613694565b925082613ce757613ce6613c95565b5b828204905092915050565b5f819050919050565b5f613d15613d10613d0b84613cf2565b613763565b613694565b9050919050565b613d2581613cfb565b82525050565b5f60c082019050613d3e5f830189613883565b613d4b60208301886137d7565b613d586040830187613d1c565b613d656060830186613d1c565b613d726080830185613883565b613d7f60a08301846137d7565b979650505050505050565b5f81519050613d988161369d565b92915050565b5f805f60608486031215613db557613db4613636565b5b5f613dc286828701613d8a565b9350506020613dd386828701613d8a565b9250506040613de486828701613d8a565b9150509250925092565b5f613df882613694565b9150613e0383613694565b9250828201905080821115613e1b57613e1a613c27565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613e55601383613596565b9150613e6082613e21565b602082019050919050565b5f6020820190508181035f830152613e8281613e49565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ee3602283613596565b9150613eee82613e89565b604082019050919050565b5f6020820190508181035f830152613f1081613ed7565b9050919050565b5f81905092915050565b50565b5f613f2f5f83613f17565b9150613f3a82613f21565b5f82019050919050565b5f613f4e82613f24565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613f8c601b83613596565b9150613f9782613f58565b602082019050919050565b5f6020820190508181035f830152613fb981613f80565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61401a602483613596565b915061402582613fc0565b604082019050919050565b5f6020820190508181035f8301526140478161400e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140a8602283613596565b91506140b38261404e565b604082019050919050565b5f6020820190508181035f8301526140d58161409c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614136602583613596565b9150614141826140dc565b604082019050919050565b5f6020820190508181035f8301526141638161412a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6141c4602383613596565b91506141cf8261416a565b604082019050919050565b5f6020820190508181035f8301526141f1816141b8565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614252603583613596565b915061425d826141f8565b604082019050919050565b5f6020820190508181035f83015261427f81614246565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6142ba601383613596565b91506142c582614286565b602082019050919050565b5f6020820190508181035f8301526142e7816142ae565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614348603683613596565b9150614353826142ee565b604082019050919050565b5f6020820190508181035f8301526143758161433c565b9050919050565b5f61438682613694565b915061439183613694565b92508282039050818111156143a9576143a8613c27565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6143e3601b83613596565b91506143ee826143af565b602082019050919050565b5f6020820190508181035f830152614410816143d7565b9050919050565b5f60608201905061442a5f8301866137d7565b61443760208301856137d7565b61444460408301846137d7565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144a6602183613596565b91506144b18261444c565b604082019050919050565b5f6020820190508181035f8301526144d38161449a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61456681613659565b82525050565b5f614577838361455d565b60208301905092915050565b5f602082019050919050565b5f61459982614534565b6145a3818561453e565b93506145ae8361454e565b805f5b838110156145de5781516145c5888261456c565b97506145d083614583565b9250506001810190506145b1565b5085935050505092915050565b5f60a0820190506145fe5f8301886137d7565b61460b6020830187613d1c565b818103604083015261461d818661458f565b905061462c6060830185613883565b61463960808301846137d7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122004d62f3c6784b597ae879e06b1808d7c8323e7a7345edfea132a52b7db98686c64736f6c63430008170033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c806370a0823111610143578063b69ef8a8116100b5578063df6f93be11610079578063df6f93be146108fe578063df99986114610928578063f1cd531a1461093e578063f2fde38b14610966578063f84a7d8d1461098e578063fd97160e146109a457610266565b8063b69ef8a81461081c578063be85750414610846578063c024666814610870578063c3f70b5214610898578063dd62ed3e146108c257610266565b806395d89b411161010757806395d89b41146106ec5780639a7a23d6146107165780639fccce321461073e578063a457c2d714610768578063a9059cbb146107a4578063b62496f5146107e057610266565b806370a082311461061e578063715018a61461065a5780637571336a146106705780638da5cb5b14610698578063945674fe146106c257610266565b806323b872dd116101dc57806349bd5a5e116101a057806349bd5a5e146105265780634fbee193146105505780635b8866021461058c5780635de0f2a0146105a25780636c7e15c9146105cc5780636f378991146105f657610266565b806323b872dd14610430578063313ce5671461046c578063395093511461049657806346469afb146104d257806348d79155146104fc57610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc57806322eb66311461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613616565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906136c7565b610a4a565b6040516102c7919061371f565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061371f565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613738565b610a79565b60405161032d919061371f565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b60405161035791906137be565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b60405161038191906137e6565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190613738565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d391906137e6565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd91906137e6565b60405180910390f35b348015610411575f80fd5b5061041a610c24565b60405161042791906137e6565b60405180910390f35b34801561043b575f80fd5b50610456600480360381019061045191906137ff565b610c2a565b604051610463919061371f565b60405180910390f35b348015610477575f80fd5b50610480610cfe565b60405161048d919061386a565b60405180910390f35b3480156104a1575f80fd5b506104bc60048036038101906104b791906136c7565b610d06565b6040516104c9919061371f565b60405180910390f35b3480156104dd575f80fd5b506104e6610db4565b6040516104f391906137e6565b60405180910390f35b348015610507575f80fd5b50610510610dba565b60405161051d91906137e6565b60405180910390f35b348015610531575f80fd5b5061053a610dc0565b6040516105479190613892565b60405180910390f35b34801561055b575f80fd5b5061057660048036038101906105719190613738565b610de5565b604051610583919061371f565b60405180910390f35b348015610597575f80fd5b506105a0610e37565b005b3480156105ad575f80fd5b506105b6610f0c565b6040516105c391906137e6565b60405180910390f35b3480156105d7575f80fd5b506105e0610f12565b6040516105ed91906137e6565b60405180910390f35b348015610601575f80fd5b5061061c600480360381019061061791906138d5565b610f18565b005b348015610629575f80fd5b50610644600480360381019061063f9190613738565b610fcb565b60405161065191906137e6565b60405180910390f35b348015610665575f80fd5b5061066e611010565b005b34801561067b575f80fd5b5061069660048036038101906106919190613900565b611163565b005b3480156106a3575f80fd5b506106ac611251565b6040516106b99190613892565b60405180910390f35b3480156106cd575f80fd5b506106d6611279565b6040516106e3919061371f565b60405180910390f35b3480156106f7575f80fd5b5061070061128c565b60405161070d9190613616565b60405180910390f35b348015610721575f80fd5b5061073c60048036038101906107379190613900565b61131c565b005b348015610749575f80fd5b5061075261144f565b60405161075f91906137e6565b60405180910390f35b348015610773575f80fd5b5061078e600480360381019061078991906136c7565b611455565b60405161079b919061371f565b60405180910390f35b3480156107af575f80fd5b506107ca60048036038101906107c591906136c7565b61151d565b6040516107d7919061371f565b60405180910390f35b3480156107eb575f80fd5b5061080660048036038101906108019190613738565b61153a565b604051610813919061371f565b60405180910390f35b348015610827575f80fd5b50610830611557565b60405161083d91906137e6565b60405180910390f35b348015610851575f80fd5b5061085a61155d565b60405161086791906137e6565b60405180910390f35b34801561087b575f80fd5b5061089660048036038101906108919190613900565b611563565b005b3480156108a3575f80fd5b506108ac61169f565b6040516108b991906137e6565b60405180910390f35b3480156108cd575f80fd5b506108e860048036038101906108e3919061393e565b6116a5565b6040516108f591906137e6565b60405180910390f35b348015610909575f80fd5b50610912611727565b60405161091f91906137e6565b60405180910390f35b348015610933575f80fd5b5061093c61172d565b005b348015610949575f80fd5b50610964600480360381019061095f919061397c565b611b33565b005b348015610971575f80fd5b5061098c60048036038101906109879190613738565b611ca3565b005b348015610999575f80fd5b506109a2611df7565b005b3480156109af575f80fd5b506109b8611f62565b005b6060600380546109c990613a0d565b80601f01602080910402602001604051908101604052809291908181526020018280546109f590613a0d565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56612013565b848461201a565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613a87565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f610c368484846121dd565b610cf384610c42612013565b610cee8560405180606001604052806028815260200161466a6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ca5612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b029092919063ffffffff16565b61201a565b600190509392505050565b5f6012905090565b5f610daa610d12612013565b84610da58560015f610d22612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6490919063ffffffff16565b61201a565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8f575f80fd5b5f610e9930610fcb565b90505f8111610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490613b15565b60405180910390fd5b610f0930600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121dd565b50565b600d5481565b60115481565b610f20612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590613a87565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611018612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613a87565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61116b612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f090613a87565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461129b90613a0d565b80601f01602080910402602001604051908101604052809291908181526020018280546112c790613a0d565b80156113125780601f106112e957610100808354040283529160200191611312565b820191905f5260205f20905b8154815290600101906020018083116112f557829003601f168201915b5050505050905090565b611324612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990613a87565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613ba3565b60405180910390fd5b61144b8282612bc1565b5050565b60175481565b5f611513611461612013565b8461150e856040518060600160405280602581526020016146926025913960015f61148a612013565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b029092919063ffffffff16565b61201a565b6001905092915050565b5f611530611529612013565b84846121dd565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b61156b612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090613a87565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611693919061371f565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611735612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613a87565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506117e6816001611163565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118939190613bd5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061191c9190613bd5565b6040518363ffffffff1660e01b8152600401611939929190613c00565b6020604051808303815f875af1158015611955573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119799190613bd5565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119e460095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611163565b611a1060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612bc1565b5f4790505f6064605a611a2230610fcb565b611a2c9190613c54565b611a369190613cc2565b9050611a643060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611aea96959493929190613d2b565b60606040518083038185885af1158015611b06573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b2b9190613d9e565b505050505050565b611b3b612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613a87565b60405180910390fd5b8360118190555081601281905550601254601154611be79190613dee565b6010819055508260148190555080601581905550601554601454611c0b9190613dee565b601381905550601e6010541115611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e90613e6b565b60405180910390fd5b601e6013541115611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490613e6b565b60405180910390fd5b50505050565b611cab612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090613a87565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e4f575f80fd5b5f4790505f8111611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90613ef9565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611edb90613f44565b5f6040518083038185875af1925050503d805f8114611f15576040519150601f19603f3d011682016040523d82523d5f602084013e611f1a565b606091505b5050905080611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5590613fa2565b60405180910390fd5b5050565b611f6a612013565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef90613a87565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f90614030565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed906140be565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121d091906137e6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122429061414c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906141da565b60405180910390fd5b5f81036122d0576122cb83835f612c5f565b612afd565b600f5f9054906101000a900460ff16156126c5576122ec611251565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561235a575061232a611251565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561239257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123cc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e55750600960149054906101000a900460ff16155b156126c457601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124875750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561252e57600c548111156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890614268565b60405180910390fd5b600e546124dd83610fcb565b826124e89190613dee565b1115612529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612520906142d0565b60405180910390fd5b6126c3565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125cb5750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561261a57600c54811115612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260c9061435e565b60405180910390fd5b6126c2565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126c157600e5461267483610fcb565b8261267f9190613dee565b11156126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b7906142d0565b60405180910390fd5b5b5b5b5b5b5f6126cf30610fcb565b90505f600d5482101590508080156126f45750600960149054906101000a900460ff16155b80156127475750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561279a575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127ed575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612830576001600960146101000a81548160ff021916908315150217905550612815612ee8565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128df575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128e8575f90505b5f8115612aed57601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561294657505f601354115b156129de5761297360646129656013548861310e90919063ffffffff16565b61318590919063ffffffff16565b9050601354601554826129869190613c54565b6129909190613cc2565b60165f8282546129a09190613dee565b92505081905550601354601454826129b89190613c54565b6129c29190613cc2565b60175f8282546129d29190613dee565b92505081905550612aca565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a3557505f601054115b15612ac957612a626064612a546010548861310e90919063ffffffff16565b61318590919063ffffffff16565b905060105460125482612a759190613c54565b612a7f9190613cc2565b60165f828254612a8f9190613dee565b9250508190555060105460115482612aa79190613c54565b612ab19190613cc2565b60175f828254612ac19190613dee565b925050819055505b5b5f811115612ade57612add873083612c5f565b5b8085612aea919061437c565b94505b612af8878787612c5f565b505050505b505050565b5f838311158290612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b409190613616565b60405180910390fd5b505f8385612b57919061437c565b9050809150509392505050565b5f808284612b729190613dee565b905083811015612bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bae906143f9565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc49061414c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d32906141da565b60405180910390fd5b612d468383836131ce565b612daf81604051806060016040528060268152602001614644602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b029092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e3e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b6490919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612edb91906137e6565b60405180910390a3505050565b5f612ef230610fcb565b90505f601754601654612f059190613dee565b90505f80831480612f1557505f82145b15612f225750505061310c565b5f1515600f60019054906101000a900460ff16151503612f69576014600d54612f4b9190613c54565b831115612f64576014600d54612f619190613c54565b92505b612f75565b612f7230610fcb565b92505b5f60028360165486612f879190613c54565b612f919190613cc2565b612f9b9190613cc2565b90505f612fb182866131d390919063ffffffff16565b90505f479050612fc08261321c565b5f612fd482476131d390919063ffffffff16565b90505f612ffe87612ff06017548561310e90919063ffffffff16565b61318590919063ffffffff16565b90505f818361300d919061437c565b90505f6016819055505f6017819055505f8611801561302b57505f81115b156130785761303a8682613452565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161306f93929190614417565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130bd90613f44565b5f6040518083038185875af1925050503d805f81146130f7576040519150601f19603f3d011682016040523d82523d5f602084013e6130fc565b606091505b5050809750505050505050505050505b565b5f80830361311e575f905061317f565b5f828461312b9190613c54565b905082848261313a9190613cc2565b1461317a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613171906144bc565b60405180910390fd5b809150505b92915050565b5f6131c683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061352b565b905092915050565b505050565b5f61321483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b02565b905092915050565b5f600267ffffffffffffffff811115613238576132376144da565b5b6040519080825280602002602001820160405280156132665781602001602082028036833780820191505090505b50905030815f8151811061327d5761327c614507565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613321573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133459190613bd5565b8160018151811061335957613358614507565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133bf3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016134219594939291906145eb565b5f604051808303815f87803b158015613438575f80fd5b505af115801561344a573d5f803e3d5ffd5b505050505050565b61347e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134e396959493929190613d2b565b60606040518083038185885af11580156134ff573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135249190613d9e565b5050505050565b5f8083118290613571576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135689190613616565b60405180910390fd5b505f838561357f9190613cc2565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135c35780820151818401526020810190506135a8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135e88261358c565b6135f28185613596565b93506136028185602086016135a6565b61360b816135ce565b840191505092915050565b5f6020820190508181035f83015261362e81846135de565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136638261363a565b9050919050565b61367381613659565b811461367d575f80fd5b50565b5f8135905061368e8161366a565b92915050565b5f819050919050565b6136a681613694565b81146136b0575f80fd5b50565b5f813590506136c18161369d565b92915050565b5f80604083850312156136dd576136dc613636565b5b5f6136ea85828601613680565b92505060206136fb858286016136b3565b9150509250929050565b5f8115159050919050565b61371981613705565b82525050565b5f6020820190506137325f830184613710565b92915050565b5f6020828403121561374d5761374c613636565b5b5f61375a84828501613680565b91505092915050565b5f819050919050565b5f61378661378161377c8461363a565b613763565b61363a565b9050919050565b5f6137978261376c565b9050919050565b5f6137a88261378d565b9050919050565b6137b88161379e565b82525050565b5f6020820190506137d15f8301846137af565b92915050565b6137e081613694565b82525050565b5f6020820190506137f95f8301846137d7565b92915050565b5f805f6060848603121561381657613815613636565b5b5f61382386828701613680565b935050602061383486828701613680565b9250506040613845868287016136b3565b9150509250925092565b5f60ff82169050919050565b6138648161384f565b82525050565b5f60208201905061387d5f83018461385b565b92915050565b61388c81613659565b82525050565b5f6020820190506138a55f830184613883565b92915050565b6138b481613705565b81146138be575f80fd5b50565b5f813590506138cf816138ab565b92915050565b5f602082840312156138ea576138e9613636565b5b5f6138f7848285016138c1565b91505092915050565b5f806040838503121561391657613915613636565b5b5f61392385828601613680565b9250506020613934858286016138c1565b9150509250929050565b5f806040838503121561395457613953613636565b5b5f61396185828601613680565b925050602061397285828601613680565b9150509250929050565b5f805f806080858703121561399457613993613636565b5b5f6139a1878288016136b3565b94505060206139b2878288016136b3565b93505060406139c3878288016136b3565b92505060606139d4878288016136b3565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a2457607f821691505b602082108103613a3757613a366139e0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a71602083613596565b9150613a7c82613a3d565b602082019050919050565b5f6020820190508181035f830152613a9e81613a65565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613aff602483613596565b9150613b0a82613aa5565b604082019050919050565b5f6020820190508181035f830152613b2c81613af3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613b8d603983613596565b9150613b9882613b33565b604082019050919050565b5f6020820190508181035f830152613bba81613b81565b9050919050565b5f81519050613bcf8161366a565b92915050565b5f60208284031215613bea57613be9613636565b5b5f613bf784828501613bc1565b91505092915050565b5f604082019050613c135f830185613883565b613c206020830184613883565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c5e82613694565b9150613c6983613694565b9250828202613c7781613694565b91508282048414831517613c8e57613c8d613c27565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ccc82613694565b9150613cd783613694565b925082613ce757613ce6613c95565b5b828204905092915050565b5f819050919050565b5f613d15613d10613d0b84613cf2565b613763565b613694565b9050919050565b613d2581613cfb565b82525050565b5f60c082019050613d3e5f830189613883565b613d4b60208301886137d7565b613d586040830187613d1c565b613d656060830186613d1c565b613d726080830185613883565b613d7f60a08301846137d7565b979650505050505050565b5f81519050613d988161369d565b92915050565b5f805f60608486031215613db557613db4613636565b5b5f613dc286828701613d8a565b9350506020613dd386828701613d8a565b9250506040613de486828701613d8a565b9150509250925092565b5f613df882613694565b9150613e0383613694565b9250828201905080821115613e1b57613e1a613c27565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613e55601383613596565b9150613e6082613e21565b602082019050919050565b5f6020820190508181035f830152613e8281613e49565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ee3602283613596565b9150613eee82613e89565b604082019050919050565b5f6020820190508181035f830152613f1081613ed7565b9050919050565b5f81905092915050565b50565b5f613f2f5f83613f17565b9150613f3a82613f21565b5f82019050919050565b5f613f4e82613f24565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613f8c601b83613596565b9150613f9782613f58565b602082019050919050565b5f6020820190508181035f830152613fb981613f80565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61401a602483613596565b915061402582613fc0565b604082019050919050565b5f6020820190508181035f8301526140478161400e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140a8602283613596565b91506140b38261404e565b604082019050919050565b5f6020820190508181035f8301526140d58161409c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614136602583613596565b9150614141826140dc565b604082019050919050565b5f6020820190508181035f8301526141638161412a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6141c4602383613596565b91506141cf8261416a565b604082019050919050565b5f6020820190508181035f8301526141f1816141b8565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614252603583613596565b915061425d826141f8565b604082019050919050565b5f6020820190508181035f83015261427f81614246565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6142ba601383613596565b91506142c582614286565b602082019050919050565b5f6020820190508181035f8301526142e7816142ae565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614348603683613596565b9150614353826142ee565b604082019050919050565b5f6020820190508181035f8301526143758161433c565b9050919050565b5f61438682613694565b915061439183613694565b92508282039050818111156143a9576143a8613c27565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6143e3601b83613596565b91506143ee826143af565b602082019050919050565b5f6020820190508181035f830152614410816143d7565b9050919050565b5f60608201905061442a5f8301866137d7565b61443760208301856137d7565b61444460408301846137d7565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144a6602183613596565b91506144b18261444c565b604082019050919050565b5f6020820190508181035f8301526144d38161449a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61456681613659565b82525050565b5f614577838361455d565b60208301905092915050565b5f602082019050919050565b5f61459982614534565b6145a3818561453e565b93506145ae8361454e565b805f5b838110156145de5781516145c5888261456c565b97506145d083614583565b9250506001810190506145b1565b5085935050505092915050565b5f60a0820190506145fe5f8301886137d7565b61460b6020830187613d1c565b818103604083015261461d818661458f565b905061462c6060830185613883565b61463960808301846137d7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122004d62f3c6784b597ae879e06b1808d7c8323e7a7345edfea132a52b7db98686c64736f6c63430008170033

Deployed Bytecode Sourcemap

17599:12638:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4862:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5776:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18067:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18640:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17768:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5183:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24194:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18349:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18248:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18282:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5953:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5082:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6316:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18150:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18026:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17816:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24367:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22395:285;;;;;;;;;;;;;:::i;:::-;;17984:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18183:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22778:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5299:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10843:148;;;;;;;;;;;;;:::i;:::-;;22891:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10629:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18104:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4970:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23743:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18389:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6542:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5434:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18863:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17884:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18314:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23552:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17948:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5617:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18214:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20978:1046;;;;;;;;;;;;;:::i;:::-;;23047:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10999:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22042:345;;;;;;;;;;;;;:::i;:::-;;22688:81;;;;;;;;;;;;;:::i;:::-;;4862:100;4916:13;4949:5;4942:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4862:100;:::o;5776:169::-;5859:4;5876:39;5885:12;:10;:12::i;:::-;5899:7;5908:6;5876:8;:39::i;:::-;5933:4;5926:11;;5776:169;;;;:::o;18067:30::-;;;;;;;;;;;;;:::o;18640:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17768:41::-;;;;;;;;;;;;;:::o;5183:108::-;5244:7;5271:12;;5264:19;;5183:108;:::o;24194:165::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24306:9:::1;;;;;;;;;;;24275:41;;24292:12;24275:41;;;;;;;;;;;;24339:12;24327:9;;:24;;;;;;;;;;;;;;;;;;24194:165:::0;:::o;18349:33::-;;;;:::o;18248:27::-;;;;:::o;18282:25::-;;;;:::o;5953:355::-;6093:4;6110:36;6120:6;6128:9;6139:6;6110:9;:36::i;:::-;6157:121;6166:6;6174:12;:10;:12::i;:::-;6188:89;6226:6;6188:89;;;;;;;;;;;;;;;;;:11;:19;6200:6;6188:19;;;;;;;;;;;;;;;:33;6208:12;:10;:12::i;:::-;6188:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6157:8;:121::i;:::-;6296:4;6289:11;;5953:355;;;;;:::o;5082:93::-;5140:5;5165:2;5158:9;;5082:93;:::o;6316:218::-;6404:4;6421:83;6430:12;:10;:12::i;:::-;6444:7;6453:50;6492:10;6453:11;:25;6465:12;:10;:12::i;:::-;6453:25;;;;;;;;;;;;;;;:34;6479:7;6453:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6421:8;:83::i;:::-;6522:4;6515:11;;6316:218;;;;:::o;18150:26::-;;;;:::o;18026:31::-;;;;:::o;17816:28::-;;;;;;;;;;;;;:::o;24367:125::-;24432:4;24456:19;:28;24476:7;24456:28;;;;;;;;;;;;;;;;;;;;;;;;;24449:35;;24367:125;;;:::o;22395:285::-;22468:9;;;;;;;;;;;22454:23;;:10;:23;;;22446:32;;;;;;22489:20;22512:24;22530:4;22512:9;:24::i;:::-;22489:47;;22570:1;22555:12;:16;22547:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22623:49;22641:4;22648:9;;;;;;;;;;;22659:12;22623:9;:49::i;:::-;22434:246;22395:285::o;17984:35::-;;;;:::o;18183:24::-;;;;:::o;22778:104::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22867:7:::1;22847:17;;:27;;;;;;;;;;;;;;;;;;22778:104:::0;:::o;5299:127::-;5373:7;5400:9;:18;5410:7;5400:18;;;;;;;;;;;;;;;;5393:25;;5299:127;;;:::o;10843:148::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10950:1:::1;10913:40;;10934:6;;;;;;;;;;;10913:40;;;;;;;;;;;;10981:1;10964:6;;:19;;;;;;;;;;;;;;;;;;10843:148::o:0;22891:144::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23023:4:::1;22981:31;:39;23013:6;22981:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22891:144:::0;;:::o;10629:79::-;10667:7;10694:6;;;;;;;;;;;10687:13;;10629:79;:::o;18104:37::-;;;;;;;;;;;;;:::o;4970:104::-;5026:13;5059:7;5052:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4970:104;:::o;23743:245::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23850:13:::1;;;;;;;;;;;23842:21;;:4;:21;;::::0;23834:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23939:41;23968:4;23974:5;23939:28;:41::i;:::-;23743:245:::0;;:::o;18389:27::-;;;;:::o;6542:269::-;6635:4;6652:129;6661:12;:10;:12::i;:::-;6675:7;6684:96;6723:15;6684:96;;;;;;;;;;;;;;;;;:11;:25;6696:12;:10;:12::i;:::-;6684:25;;;;;;;;;;;;;;;:34;6710:7;6684:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6652:8;:129::i;:::-;6799:4;6792:11;;6542:269;;;;:::o;5434:175::-;5520:4;5537:42;5547:12;:10;:12::i;:::-;5561:9;5572:6;5537:9;:42::i;:::-;5597:4;5590:11;;5434:175;;;;:::o;18863:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17884:22::-;;;;:::o;18314:25::-;;;;:::o;23552:182::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23668:8:::1;23637:19;:28;23657:7;23637:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23708:7;23692:34;;;23717:8;23692:34;;;;;;:::i;:::-;;;;;;;;23552:182:::0;;:::o;17948:29::-;;;;:::o;5617:151::-;5706:7;5733:11;:18;5745:5;5733:18;;;;;;;;;;;;;;;:27;5752:7;5733:27;;;;;;;;;;;;;;;;5726:34;;5617:151;;;;:::o;18214:24::-;;;;:::o;20978:1046::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21040:35:::1;21097:42;21040:100;;21154:58;21188:16;21207:4;21154:25;:58::i;:::-;21241:16;21223:15;;:34;;;;;;;;;;;;;;;;;;21305:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21287:56;;;21352:4;21359:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21287:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21271:13;;:112;;;;;;;;;;;;;;;;;;21394:55;21428:13;;;;;;;;;;;21444:4;21394:25;:55::i;:::-;21460:58;21497:13;;;;;;;;;;;21513:4;21460:28;:58::i;:::-;21539:17;21559:21;21539:41;;21591:19;21645:3;21640:2;21613:24;21631:4;21613:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21591:57;;21679:62;21696:4;21711:15;;;;;;;;;;;21729:11;21679:8;:62::i;:::-;21754:15;;;;;;;;;;;:31;;;21793:9;21826:4;21846:11;21876:1;21923::::0;21966:9:::1;;;;;;;;;;;21990:15;21754:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21023:1001;;;20978:1046::o:0;23047:497::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23219:7:::1;23207:9;:19;;;;23249:7;23237:9;:19;;;;23293:9;;23281;;:21;;;;:::i;:::-;23267:11;:35;;;;23326:8;23313:10;:21;;;;23358:8;23345:10;:21;;;;23405:10;;23392;;:23;;;;:::i;:::-;23377:12;:38;;;;23449:2;23434:11;;:17;;23426:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23510:2;23494:12;;:18;;23486:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;23047:497:::0;;;;:::o;10999:169::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11123:8:::1;11094:38;;11115:6;;;;;;;;;;;11094:38;;;;;;;;;;;;11152:8;11143:6;;:17;;;;;;;;;;;;;;;;;;10999:169:::0;:::o;22042:345::-;22111:9;;;;;;;;;;;22097:23;;:10;:23;;;22089:32;;;;;;22132:18;22153:21;22132:42;;22206:1;22193:10;:14;22185:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22258:12;22283:9;;;;;;;;;;;22275:23;;22306:10;22275:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22257:64;;;22340:7;22332:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22078:309;;22042:345::o;22688:81::-;10766:12;:10;:12::i;:::-;10756:22;;:6;;;;;;;;;;;:22;;;10748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22756:5:::1;22742:11;;:19;;;;;;;;;;;;;;;;;;22688:81::o:0;215:98::-;268:7;295:10;288:17;;215:98;:::o;8218:381::-;8371:1;8354:19;;:5;:19;;;8346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8452:1;8433:21;;:7;:21;;;8425:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8537:6;8507:11;:18;8519:5;8507:18;;;;;;;;;;;;;;;:27;8526:7;8507:27;;;;;;;;;;;;;;;:36;;;;8575:7;8559:32;;8568:5;8559:32;;;8584:6;8559:32;;;;;;:::i;:::-;;;;;;;;8218:381;;;:::o;24501:3112::-;24649:1;24633:18;;:4;:18;;;24625:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24726:1;24712:16;;:2;:16;;;24704:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24793:1;24783:6;:11;24780:92;;24811:28;24827:4;24833:2;24837:1;24811:15;:28::i;:::-;24854:7;;24780:92;24888:11;;;;;;;;;;;24885:1083;;;24945:7;:5;:7::i;:::-;24937:15;;:4;:15;;;;:49;;;;;24979:7;:5;:7::i;:::-;24973:13;;:2;:13;;;;24937:49;:86;;;;;25021:1;25007:16;;:2;:16;;;;24937:86;:128;;;;;25058:6;25044:21;;:2;:21;;;;24937:128;:160;;;;;25087:10;;;;;;;;;;;25086:11;24937:160;24915:1042;;;25181:25;:31;25207:4;25181:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25217:31;:35;25249:2;25217:35;;;;;;;;;;;;;;;;;;;;;;;;;25216:36;25181:71;25177:765;;;25299:14;;25289:6;:24;;25281:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25432:16;;25415:13;25425:2;25415:9;:13::i;:::-;25406:6;:22;;;;:::i;:::-;:42;;25398:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25177:765;;;25551:25;:29;25577:2;25551:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25585:31;:37;25617:4;25585:37;;;;;;;;;;;;;;;;;;;;;;;;;25584:38;25551:71;25547:395;;;25669:14;;25659:6;:24;;25651:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25547:395;;;25789:31;:35;25821:2;25789:35;;;;;;;;;;;;;;;;;;;;;;;;;25785:157;;25882:16;;25865:13;25875:2;25865:9;:13::i;:::-;25856:6;:22;;;;:::i;:::-;:42;;25848:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25785:157;25547:395;25177:765;24915:1042;24885:1083;25981:28;26012:24;26030:4;26012:9;:24::i;:::-;25981:55;;26050:12;26089:20;;26065;:44;;26050:59;;26141:7;:35;;;;;26166:10;;;;;;;;;;;26165:11;26141:35;:84;;;;;26194:25;:31;26220:4;26194:31;;;;;;;;;;;;;;;;;;;;;;;;;26193:32;26141:84;:127;;;;;26243:19;:25;26263:4;26243:25;;;;;;;;;;;;;;;;;;;;;;;;;26242:26;26141:127;:168;;;;;26286:19;:23;26306:2;26286:23;;;;;;;;;;;;;;;;;;;;;;;;;26285:24;26141:168;26123:306;;;26349:4;26336:10;;:17;;;;;;;;;;;;;;;;;;26371:10;:8;:10::i;:::-;26412:5;26399:10;;:18;;;;;;;;;;;;;;;;;;26123:306;26442:12;26458:10;;;;;;;;;;;26457:11;26442:26;;26570:19;:25;26590:4;26570:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26599:19;:23;26619:2;26599:23;;;;;;;;;;;;;;;;;;;;;;;;;26570:52;26567:99;;;26649:5;26639:15;;26567:99;26679:12;26783:7;26780:779;;;26834:25;:29;26860:2;26834:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26882:1;26867:12;;:16;26834:49;26830:576;;;26910:33;26939:3;26910:24;26921:12;;26910:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26903:40;;27004:12;;26991:10;;26984:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26962:18;;:54;;;;;;;:::i;:::-;;;;;;;;27071:12;;27058:10;;27051:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27035:12;;:48;;;;;;;:::i;:::-;;;;;;;;26830:576;;;27144:25;:31;27170:4;27144:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27193:1;27179:11;;:15;27144:50;27141:265;;;27222:32;27250:3;27222:23;27233:11;;27222:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27215:39;;27314:11;;27302:9;;27295:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27273:18;;:52;;;;;;;:::i;:::-;;;;;;;;27379:11;;27367:9;;27360:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27344:12;;:46;;;;;;;:::i;:::-;;;;;;;;27141:265;26830:576;27433:1;27426:4;:8;27423:93;;;27458:42;27474:4;27488;27495;27458:15;:42::i;:::-;27423:93;27543:4;27533:14;;;;;:::i;:::-;;;26780:779;27572:33;27588:4;27594:2;27598:6;27572:15;:33::i;:::-;24614:2999;;;;24501:3112;;;;:::o;9106:193::-;9192:7;9225:1;9220;:6;;9228:12;9212:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9252:9;9268:1;9264;:5;;;;:::i;:::-;9252:17;;9290:1;9283:8;;;9106:193;;;;;:::o;8772:182::-;8830:7;8850:9;8866:1;8862;:5;;;;:::i;:::-;8850:17;;8891:1;8886;:6;;8878:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8945:1;8938:8;;;8772:182;;;;:::o;23997:189::-;24114:5;24080:25;:31;24106:4;24080:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24172:5;24138:40;;24166:4;24138:40;;;;;;;;;;;;23997:189;;:::o;6819:575::-;6977:1;6959:20;;:6;:20;;;6951:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7061:1;7040:23;;:9;:23;;;7032:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7117:47;7138:6;7146:9;7157:6;7117:20;:47::i;:::-;7198:71;7220:6;7198:71;;;;;;;;;;;;;;;;;:9;:17;7208:6;7198:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7178:9;:17;7188:6;7178:17;;;;;;;;;;;;;;;:91;;;;7303:32;7328:6;7303:9;:20;7313:9;7303:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7280:9;:20;7290:9;7280:20;;;;;;;;;;;;;;;:55;;;;7368:9;7351:35;;7360:6;7351:35;;;7379:6;7351:35;;;;;;:::i;:::-;;;;;;;;6819:575;;;:::o;28757:1477::-;28796:23;28822:24;28840:4;28822:9;:24::i;:::-;28796:50;;28857:25;28906:12;;28885:18;;:33;;;;:::i;:::-;28857:61;;28929:12;28977:1;28958:15;:20;:46;;;;29003:1;28982:17;:22;28958:46;28955:60;;;29007:7;;;;;28955:60;29052:5;29031:26;;:17;;;;;;;;;;;:26;;;29028:254;;29117:2;29094:20;;:25;;;;:::i;:::-;29076:15;:43;29073:125;;;29180:2;29157:20;;:25;;;;:::i;:::-;29139:43;;29073:125;29028:254;;;29246:24;29264:4;29246:9;:24::i;:::-;29228:42;;29028:254;29354:23;29439:1;29419:17;29398:18;;29380:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29354:86;;29451:26;29480:36;29500:15;29480;:19;;:36;;;;:::i;:::-;29451:65;;29530:25;29558:21;29530:49;;29593:36;29610:18;29593:16;:36::i;:::-;29644:18;29665:44;29691:17;29665:21;:25;;:44;;;;:::i;:::-;29644:65;;29723:17;29743:51;29776:17;29743:28;29758:12;;29743:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29723:71;;29805:23;29844:9;29831:10;:22;;;;:::i;:::-;29805:48;;29891:1;29870:18;:22;;;;29918:1;29903:12;:16;;;;29954:1;29936:15;:19;:42;;;;;29977:1;29959:15;:19;29936:42;29933:210;;;29994:46;30007:15;30024;29994:12;:46::i;:::-;30060:71;30075:18;30095:15;30112:18;;30060:71;;;;;;;;:::i;:::-;;;;;;;;29933:210;30177:9;;;;;;;;;;;30169:23;;30200:21;30169:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30156:70;;;;;28785:1449;;;;;;;;;28757:1477;:::o;9307:254::-;9365:7;9396:1;9391;:6;9387:47;;9421:1;9414:8;;;;9387:47;9447:9;9463:1;9459;:5;;;;:::i;:::-;9447:17;;9492:1;9487;9483;:5;;;;:::i;:::-;:10;9475:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9552:1;9545:8;;;9307:254;;;;;:::o;9569:132::-;9627:7;9654:39;9658:1;9661;9654:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9647:46;;9569:132;;;;:::o;8607:125::-;;;;:::o;8962:136::-;9020:7;9047:43;9051:1;9054;9047:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9040:50;;8962:136;;;;:::o;27622:597::-;27751:21;27789:1;27775:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27751:40;;27820:4;27802;27807:1;27802:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27846:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27836:4;27841:1;27836:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27882:62;27899:4;27914:15;;;;;;;;;;;27932:11;27882:8;:62::i;:::-;27984:15;;;;;;;;;;;:66;;;28065:11;28091:1;28135:4;28162;28182:15;27984:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27677:542;27622:597;:::o;28228:520::-;28376:62;28393:4;28408:15;;;;;;;;;;;28426:11;28376:8;:62::i;:::-;28482:15;;;;;;;;;;;:31;;;28521:9;28554:4;28574:11;28600:1;28643;28694:4;28714:15;28482:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28228:520;;:::o;9709:279::-;9795:7;9827:1;9823;:5;9830:12;9815:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9854:9;9870:1;9866;:5;;;;:::i;:::-;9854:17;;9979:1;9972:8;;;9709:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:323::-;6835:6;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:50;7077:7;7068:6;7057:9;7053:22;7035:50;:::i;:::-;7025:60;;6981:114;6779:323;;;;:::o;7108:468::-;7173:6;7181;7230:2;7218:9;7209:7;7205:23;7201:32;7198:119;;;7236:79;;:::i;:::-;7198:119;7356:1;7381:53;7426:7;7417:6;7406:9;7402:22;7381:53;:::i;:::-;7371:63;;7327:117;7483:2;7509:50;7551:7;7542:6;7531:9;7527:22;7509:50;:::i;:::-;7499:60;;7454:115;7108:468;;;;;:::o;7582:474::-;7650:6;7658;7707:2;7695:9;7686:7;7682:23;7678:32;7675:119;;;7713:79;;:::i;:::-;7675:119;7833:1;7858:53;7903:7;7894:6;7883:9;7879:22;7858:53;:::i;:::-;7848:63;;7804:117;7960:2;7986:53;8031:7;8022:6;8011:9;8007:22;7986:53;:::i;:::-;7976:63;;7931:118;7582:474;;;;;:::o;8062:765::-;8148:6;8156;8164;8172;8221:3;8209:9;8200:7;8196:23;8192:33;8189:120;;;8228:79;;:::i;:::-;8189:120;8348:1;8373:53;8418:7;8409:6;8398:9;8394:22;8373:53;:::i;:::-;8363:63;;8319:117;8475:2;8501:53;8546:7;8537:6;8526:9;8522:22;8501:53;:::i;:::-;8491:63;;8446:118;8603:2;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8574:118;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8062:765;;;;;;;:::o;8833:180::-;8881:77;8878:1;8871:88;8978:4;8975:1;8968:15;9002:4;8999:1;8992:15;9019:320;9063:6;9100:1;9094:4;9090:12;9080:22;;9147:1;9141:4;9137:12;9168:18;9158:81;;9224:4;9216:6;9212:17;9202:27;;9158:81;9286:2;9278:6;9275:14;9255:18;9252:38;9249:84;;9305:18;;:::i;:::-;9249:84;9070:269;9019:320;;;:::o;9345:182::-;9485:34;9481:1;9473:6;9469:14;9462:58;9345:182;:::o;9533:366::-;9675:3;9696:67;9760:2;9755:3;9696:67;:::i;:::-;9689:74;;9772:93;9861:3;9772:93;:::i;:::-;9890:2;9885:3;9881:12;9874:19;;9533:366;;;:::o;9905:419::-;10071:4;10109:2;10098:9;10094:18;10086:26;;10158:9;10152:4;10148:20;10144:1;10133:9;10129:17;10122:47;10186:131;10312:4;10186:131;:::i;:::-;10178:139;;9905:419;;;:::o;10330:223::-;10470:34;10466:1;10458:6;10454:14;10447:58;10539:6;10534:2;10526:6;10522:15;10515:31;10330:223;:::o;10559:366::-;10701:3;10722:67;10786:2;10781:3;10722:67;:::i;:::-;10715:74;;10798:93;10887:3;10798:93;:::i;:::-;10916:2;10911:3;10907:12;10900:19;;10559:366;;;:::o;10931:419::-;11097:4;11135:2;11124:9;11120:18;11112:26;;11184:9;11178:4;11174:20;11170:1;11159:9;11155:17;11148:47;11212:131;11338:4;11212:131;:::i;:::-;11204:139;;10931:419;;;:::o;11356:244::-;11496:34;11492:1;11484:6;11480:14;11473:58;11565:27;11560:2;11552:6;11548:15;11541:52;11356:244;:::o;11606:366::-;11748:3;11769:67;11833:2;11828:3;11769:67;:::i;:::-;11762:74;;11845:93;11934:3;11845:93;:::i;:::-;11963:2;11958:3;11954:12;11947:19;;11606:366;;;:::o;11978:419::-;12144:4;12182:2;12171:9;12167:18;12159:26;;12231:9;12225:4;12221:20;12217:1;12206:9;12202:17;12195:47;12259:131;12385:4;12259:131;:::i;:::-;12251:139;;11978:419;;;:::o;12403:143::-;12460:5;12491:6;12485:13;12476:22;;12507:33;12534:5;12507:33;:::i;:::-;12403:143;;;;:::o;12552:351::-;12622:6;12671:2;12659:9;12650:7;12646:23;12642:32;12639:119;;;12677:79;;:::i;:::-;12639:119;12797:1;12822:64;12878:7;12869:6;12858:9;12854:22;12822:64;:::i;:::-;12812:74;;12768:128;12552:351;;;;:::o;12909:332::-;13030:4;13068:2;13057:9;13053:18;13045:26;;13081:71;13149:1;13138:9;13134:17;13125:6;13081:71;:::i;:::-;13162:72;13230:2;13219:9;13215:18;13206:6;13162:72;:::i;:::-;12909:332;;;;;:::o;13247:180::-;13295:77;13292:1;13285:88;13392:4;13389:1;13382:15;13416:4;13413:1;13406:15;13433:410;13473:7;13496:20;13514:1;13496:20;:::i;:::-;13491:25;;13530:20;13548:1;13530:20;:::i;:::-;13525:25;;13585:1;13582;13578:9;13607:30;13625:11;13607:30;:::i;:::-;13596:41;;13786:1;13777:7;13773:15;13770:1;13767:22;13747:1;13740:9;13720:83;13697:139;;13816:18;;:::i;:::-;13697:139;13481:362;13433:410;;;;:::o;13849:180::-;13897:77;13894:1;13887:88;13994:4;13991:1;13984:15;14018:4;14015:1;14008:15;14035:185;14075:1;14092:20;14110:1;14092:20;:::i;:::-;14087:25;;14126:20;14144:1;14126:20;:::i;:::-;14121:25;;14165:1;14155:35;;14170:18;;:::i;:::-;14155:35;14212:1;14209;14205:9;14200:14;;14035:185;;;;:::o;14226:85::-;14271:7;14300:5;14289:16;;14226:85;;;:::o;14317:158::-;14375:9;14408:61;14426:42;14435:32;14461:5;14435:32;:::i;:::-;14426:42;:::i;:::-;14408:61;:::i;:::-;14395:74;;14317:158;;;:::o;14481:147::-;14576:45;14615:5;14576:45;:::i;:::-;14571:3;14564:58;14481:147;;:::o;14634:807::-;14883:4;14921:3;14910:9;14906:19;14898:27;;14935:71;15003:1;14992:9;14988:17;14979:6;14935:71;:::i;:::-;15016:72;15084:2;15073:9;15069:18;15060:6;15016:72;:::i;:::-;15098:80;15174:2;15163:9;15159:18;15150:6;15098:80;:::i;:::-;15188;15264:2;15253:9;15249:18;15240:6;15188:80;:::i;:::-;15278:73;15346:3;15335:9;15331:19;15322:6;15278:73;:::i;:::-;15361;15429:3;15418:9;15414:19;15405:6;15361:73;:::i;:::-;14634:807;;;;;;;;;:::o;15447:143::-;15504:5;15535:6;15529:13;15520:22;;15551:33;15578:5;15551:33;:::i;:::-;15447:143;;;;:::o;15596:663::-;15684:6;15692;15700;15749:2;15737:9;15728:7;15724:23;15720:32;15717:119;;;15755:79;;:::i;:::-;15717:119;15875:1;15900:64;15956:7;15947:6;15936:9;15932:22;15900:64;:::i;:::-;15890:74;;15846:128;16013:2;16039:64;16095:7;16086:6;16075:9;16071:22;16039:64;:::i;:::-;16029:74;;15984:129;16152:2;16178:64;16234:7;16225:6;16214:9;16210:22;16178:64;:::i;:::-;16168:74;;16123:129;15596:663;;;;;:::o;16265:191::-;16305:3;16324:20;16342:1;16324:20;:::i;:::-;16319:25;;16358:20;16376:1;16358:20;:::i;:::-;16353:25;;16401:1;16398;16394:9;16387:16;;16422:3;16419:1;16416:10;16413:36;;;16429:18;;:::i;:::-;16413:36;16265:191;;;;:::o;16462:169::-;16602:21;16598:1;16590:6;16586:14;16579:45;16462:169;:::o;16637:366::-;16779:3;16800:67;16864:2;16859:3;16800:67;:::i;:::-;16793:74;;16876:93;16965:3;16876:93;:::i;:::-;16994:2;16989:3;16985:12;16978:19;;16637:366;;;:::o;17009:419::-;17175:4;17213:2;17202:9;17198:18;17190:26;;17262:9;17256:4;17252:20;17248:1;17237:9;17233:17;17226:47;17290:131;17416:4;17290:131;:::i;:::-;17282:139;;17009:419;;;:::o;17434:221::-;17574:34;17570:1;17562:6;17558:14;17551:58;17643:4;17638:2;17630:6;17626:15;17619:29;17434:221;:::o;17661:366::-;17803:3;17824:67;17888:2;17883:3;17824:67;:::i;:::-;17817:74;;17900:93;17989:3;17900:93;:::i;:::-;18018:2;18013:3;18009:12;18002:19;;17661:366;;;:::o;18033:419::-;18199:4;18237:2;18226:9;18222:18;18214:26;;18286:9;18280:4;18276:20;18272:1;18261:9;18257:17;18250:47;18314:131;18440:4;18314:131;:::i;:::-;18306:139;;18033:419;;;:::o;18458:147::-;18559:11;18596:3;18581:18;;18458:147;;;;:::o;18611:114::-;;:::o;18731:398::-;18890:3;18911:83;18992:1;18987:3;18911:83;:::i;:::-;18904:90;;19003:93;19092:3;19003:93;:::i;:::-;19121:1;19116:3;19112:11;19105:18;;18731:398;;;:::o;19135:379::-;19319:3;19341:147;19484:3;19341:147;:::i;:::-;19334:154;;19505:3;19498:10;;19135:379;;;:::o;19520:177::-;19660:29;19656:1;19648:6;19644:14;19637:53;19520:177;:::o;19703:366::-;19845:3;19866:67;19930:2;19925:3;19866:67;:::i;:::-;19859:74;;19942:93;20031:3;19942:93;:::i;:::-;20060:2;20055:3;20051:12;20044:19;;19703:366;;;:::o;20075:419::-;20241:4;20279:2;20268:9;20264:18;20256:26;;20328:9;20322:4;20318:20;20314:1;20303:9;20299:17;20292:47;20356:131;20482:4;20356:131;:::i;:::-;20348:139;;20075:419;;;:::o;20500:223::-;20640:34;20636:1;20628:6;20624:14;20617:58;20709:6;20704:2;20696:6;20692:15;20685:31;20500:223;:::o;20729:366::-;20871:3;20892:67;20956:2;20951:3;20892:67;:::i;:::-;20885:74;;20968:93;21057:3;20968:93;:::i;:::-;21086:2;21081:3;21077:12;21070:19;;20729:366;;;:::o;21101:419::-;21267:4;21305:2;21294:9;21290:18;21282:26;;21354:9;21348:4;21344:20;21340:1;21329:9;21325:17;21318:47;21382:131;21508:4;21382:131;:::i;:::-;21374:139;;21101:419;;;:::o;21526:221::-;21666:34;21662:1;21654:6;21650:14;21643:58;21735:4;21730:2;21722:6;21718:15;21711:29;21526:221;:::o;21753:366::-;21895:3;21916:67;21980:2;21975:3;21916:67;:::i;:::-;21909:74;;21992:93;22081:3;21992:93;:::i;:::-;22110:2;22105:3;22101:12;22094:19;;21753:366;;;:::o;22125:419::-;22291:4;22329:2;22318:9;22314:18;22306:26;;22378:9;22372:4;22368:20;22364:1;22353:9;22349:17;22342:47;22406:131;22532:4;22406:131;:::i;:::-;22398:139;;22125:419;;;:::o;22550:224::-;22690:34;22686:1;22678:6;22674:14;22667:58;22759:7;22754:2;22746:6;22742:15;22735:32;22550:224;:::o;22780:366::-;22922:3;22943:67;23007:2;23002:3;22943:67;:::i;:::-;22936:74;;23019:93;23108:3;23019:93;:::i;:::-;23137:2;23132:3;23128:12;23121:19;;22780:366;;;:::o;23152:419::-;23318:4;23356:2;23345:9;23341:18;23333:26;;23405:9;23399:4;23395:20;23391:1;23380:9;23376:17;23369:47;23433:131;23559:4;23433:131;:::i;:::-;23425:139;;23152:419;;;:::o;23577:222::-;23717:34;23713:1;23705:6;23701:14;23694:58;23786:5;23781:2;23773:6;23769:15;23762:30;23577:222;:::o;23805:366::-;23947:3;23968:67;24032:2;24027:3;23968:67;:::i;:::-;23961:74;;24044:93;24133:3;24044:93;:::i;:::-;24162:2;24157:3;24153:12;24146:19;;23805:366;;;:::o;24177:419::-;24343:4;24381:2;24370:9;24366:18;24358:26;;24430:9;24424:4;24420:20;24416:1;24405:9;24401:17;24394:47;24458:131;24584:4;24458:131;:::i;:::-;24450:139;;24177:419;;;:::o;24602:240::-;24742:34;24738:1;24730:6;24726:14;24719:58;24811:23;24806:2;24798:6;24794:15;24787:48;24602:240;:::o;24848:366::-;24990:3;25011:67;25075:2;25070:3;25011:67;:::i;:::-;25004:74;;25087:93;25176:3;25087:93;:::i;:::-;25205:2;25200:3;25196:12;25189:19;;24848:366;;;:::o;25220:419::-;25386:4;25424:2;25413:9;25409:18;25401:26;;25473:9;25467:4;25463:20;25459:1;25448:9;25444:17;25437:47;25501:131;25627:4;25501:131;:::i;:::-;25493:139;;25220:419;;;:::o;25645:169::-;25785:21;25781:1;25773:6;25769:14;25762:45;25645:169;:::o;25820:366::-;25962:3;25983:67;26047:2;26042:3;25983:67;:::i;:::-;25976:74;;26059:93;26148:3;26059:93;:::i;:::-;26177:2;26172:3;26168:12;26161:19;;25820:366;;;:::o;26192:419::-;26358:4;26396:2;26385:9;26381:18;26373:26;;26445:9;26439:4;26435:20;26431:1;26420:9;26416:17;26409:47;26473:131;26599:4;26473:131;:::i;:::-;26465:139;;26192:419;;;:::o;26617:241::-;26757:34;26753:1;26745:6;26741:14;26734:58;26826:24;26821:2;26813:6;26809:15;26802:49;26617:241;:::o;26864:366::-;27006:3;27027:67;27091:2;27086:3;27027:67;:::i;:::-;27020:74;;27103:93;27192:3;27103:93;:::i;:::-;27221:2;27216:3;27212:12;27205:19;;26864:366;;;:::o;27236:419::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:131;27643:4;27517:131;:::i;:::-;27509:139;;27236:419;;;:::o;27661:194::-;27701:4;27721:20;27739:1;27721:20;:::i;:::-;27716:25;;27755:20;27773:1;27755:20;:::i;:::-;27750:25;;27799:1;27796;27792:9;27784:17;;27823:1;27817:4;27814:11;27811:37;;;27828:18;;:::i;:::-;27811:37;27661:194;;;;:::o;27861:177::-;28001:29;27997:1;27989:6;27985:14;27978:53;27861:177;:::o;28044:366::-;28186:3;28207:67;28271:2;28266:3;28207:67;:::i;:::-;28200:74;;28283:93;28372:3;28283:93;:::i;:::-;28401:2;28396:3;28392:12;28385:19;;28044:366;;;:::o;28416:419::-;28582:4;28620:2;28609:9;28605:18;28597:26;;28669:9;28663:4;28659:20;28655:1;28644:9;28640:17;28633:47;28697:131;28823:4;28697:131;:::i;:::-;28689:139;;28416:419;;;:::o;28841:442::-;28990:4;29028:2;29017:9;29013:18;29005:26;;29041:71;29109:1;29098:9;29094:17;29085:6;29041:71;:::i;:::-;29122:72;29190:2;29179:9;29175:18;29166:6;29122:72;:::i;:::-;29204;29272:2;29261:9;29257:18;29248:6;29204:72;:::i;:::-;28841:442;;;;;;:::o;29289:220::-;29429:34;29425:1;29417:6;29413:14;29406:58;29498:3;29493:2;29485:6;29481:15;29474:28;29289:220;:::o;29515:366::-;29657:3;29678:67;29742:2;29737:3;29678:67;:::i;:::-;29671:74;;29754:93;29843:3;29754:93;:::i;:::-;29872:2;29867:3;29863:12;29856:19;;29515:366;;;:::o;29887:419::-;30053:4;30091:2;30080:9;30076:18;30068:26;;30140:9;30134:4;30130:20;30126:1;30115:9;30111:17;30104:47;30168:131;30294:4;30168:131;:::i;:::-;30160:139;;29887:419;;;:::o;30312:180::-;30360:77;30357:1;30350:88;30457:4;30454:1;30447:15;30481:4;30478:1;30471:15;30498:180;30546:77;30543:1;30536:88;30643:4;30640:1;30633:15;30667:4;30664:1;30657:15;30684:114;30751:6;30785:5;30779:12;30769:22;;30684:114;;;:::o;30804:184::-;30903:11;30937:6;30932:3;30925:19;30977:4;30972:3;30968:14;30953:29;;30804:184;;;;:::o;30994:132::-;31061:4;31084:3;31076:11;;31114:4;31109:3;31105:14;31097:22;;30994:132;;;:::o;31132:108::-;31209:24;31227:5;31209:24;:::i;:::-;31204:3;31197:37;31132:108;;:::o;31246:179::-;31315:10;31336:46;31378:3;31370:6;31336:46;:::i;:::-;31414:4;31409:3;31405:14;31391:28;;31246:179;;;;:::o;31431:113::-;31501:4;31533;31528:3;31524:14;31516:22;;31431:113;;;:::o;31580:732::-;31699:3;31728:54;31776:5;31728:54;:::i;:::-;31798:86;31877:6;31872:3;31798:86;:::i;:::-;31791:93;;31908:56;31958:5;31908:56;:::i;:::-;31987:7;32018:1;32003:284;32028:6;32025:1;32022:13;32003:284;;;32104:6;32098:13;32131:63;32190:3;32175:13;32131:63;:::i;:::-;32124:70;;32217:60;32270:6;32217:60;:::i;:::-;32207:70;;32063:224;32050:1;32047;32043:9;32038:14;;32003:284;;;32007:14;32303:3;32296:10;;31704:608;;;31580:732;;;;:::o;32318:831::-;32581:4;32619:3;32608:9;32604:19;32596:27;;32633:71;32701:1;32690:9;32686:17;32677:6;32633:71;:::i;:::-;32714:80;32790:2;32779:9;32775:18;32766:6;32714:80;:::i;:::-;32841:9;32835:4;32831:20;32826:2;32815:9;32811:18;32804:48;32869:108;32972:4;32963:6;32869:108;:::i;:::-;32861:116;;32987:72;33055:2;33044:9;33040:18;33031:6;32987:72;:::i;:::-;33069:73;33137:3;33126:9;33122:19;33113:6;33069:73;:::i;:::-;32318:831;;;;;;;;:::o

Swarm Source

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