ETH Price: $2,491.89 (-0.79%)
Gas: 3.91 Gwei

Token

2.0 Doge (2.0DOGE)
 

Overview

Max Total Supply

1,000,000,000 2.0DOGE

Holders

229

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.544279973331229714 2.0DOGE

Value
$0.00
0x8F9838800De4c9C98DF106e058e2676B3e96ea6C
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:
TwoZeroDoge

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

https://t.me/TWOZERODOGE
*/

// SPDX-License-Identifier: Unlicensed

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

    string _name = "2.0 Doge";
    string _symbol = unicode"2.0DOGE";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private isSwapping;
    uint256 public balance;
    address private treasuryWallet;
 
    uint256 public maxTx;
    uint256 public swapTreshold;
    uint256 public maxWallet;
 
    bool public limitsActive = true;
    bool public shouldContractSellAll = false;

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
 
    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForTreasury;
   
 
    // 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 treasuryWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
        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 _buyTreasuryFee = 25;
        uint256 _buyLiquidityFee = 0;
 
        uint256 _sellTreasuryFee = 50;
        uint256 _sellLiquidityFee = 0;
        
        uint256 totalSupply = 1000000000 * 1e18;
 
        maxTx = totalSupply * 20 / 1000; // 2%
        maxWallet = totalSupply * 20 / 1000; // 2% 
        swapTreshold = totalSupply * 1 / 1000; // 0.05%
 
        buyTreasuryFee = _buyTreasuryFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee;
 
        sellTreasuryFee = _sellTreasuryFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee;

        treasuryWallet = address(0x979B1BE976A0785da2F23b56A3584E7E6b5C93fA);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(treasuryWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(treasuryWallet), 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 addLiquidityETH() external onlyOwner{
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this));
        

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

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

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

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

    

    function removeLimits() external onlyOwner returns (bool){
        limitsActive = false;
        return true;
    }
 
    function enableEmptyContract(bool enabled) external onlyOwner{
        shouldContractSellAll = enabled;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTreshold(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTreshold = newAmount;
        return true;
    }
 
    function updateLimits(uint256 _maxTx, uint256 _maxWallet) external onlyOwner {
        require(_maxTx >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        require(_maxWallet >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxTx = _maxTx * (10**18);
        maxWallet = _maxWallet * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function changeFee(
        uint256 _liquidityBuyFee,
        uint256 _liquiditySellFee,
        uint256 _treasuryBuyFee,
        uint256 _treasurySellFee
    ) external onlyOwner {
        buyLiquidityFee = _liquidityBuyFee;
        buyTreasuryFee = _treasuryBuyFee;
        buyTotalFees = buyLiquidityFee + buyTreasuryFee;
        sellLiquidityFee = _liquiditySellFee;
        sellTreasuryFee = _treasurySellFee;
        sellTotalFees = sellLiquidityFee + sellTreasuryFee;
        require(buyTotalFees <= 30 && sellTotalFees <= 30, "Fees cannot be higher then 30%");
    }

    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 updateTreasuryAddress(address newTreasuryWallet) external onlyOwner{
        emit treasuryWalletUpdated(newTreasuryWallet, treasuryWallet);
        treasuryWallet = newTreasuryWallet;
    }

 
  
    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(limitsActive){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwapping
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTx, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTx, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTreshold;
 
        if( 
            canSwap &&
            !isSwapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwapping = true;
 
            swapBack();
 
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;
 
        // 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] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
            }
 
            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 + tokensForTreasury;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(shouldContractSellAll == false){
            if(contractBalance > swapTreshold * 20){
                contractBalance = swapTreshold * 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 ethForMarketing = ethBalance.mul(tokensForTreasury).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
 
 
        tokensForLiquidity = 0;
        tokensForTreasury = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(treasuryWallet).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":"treasuryWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityBuyFee","type":"uint256"},{"internalType":"uint256","name":"_liquiditySellFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryBuyFee","type":"uint256"},{"internalType":"uint256","name":"_treasurySellFee","type":"uint256"}],"name":"changeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableEmptyContract","outputs":[],"stateMutability":"nonpayable","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":"limitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldContractSellAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","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":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600881526020017f322e3020446f6765000000000000000000000000000000000000000000000000815250600690816200004a919062000e9c565b506040518060400160405280600781526020017f322e30444f4745000000000000000000000000000000000000000000000000008152506007908162000091919062000e9c565b506001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000c9c565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000c9c565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000c9c565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000c9c565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000e9c565b50806004908162000218919062000e9c565b5050505f6200022c6200072560201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002f48160016200072c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000372573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000398919062000fe5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000424919062000fe5565b6040518363ffffffff1660e01b81526004016200044392919062001026565b6020604051808303815f875af115801562000460573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000486919062000fe5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004ce60a05160016200072c60201b60201c565b620004e360a05160016200082560201b60201c565b5f601990505f80603290505f806b033b2e3c9fd0803ce800000090506103e86014826200051191906200107e565b6200051d9190620010f5565b600b819055506103e86014826200053591906200107e565b620005419190620010f5565b600d819055506103e86001826200055991906200107e565b620005659190620010f5565b600c8190555084601081905550836011819055506011546010546200058b91906200112c565b600f819055508260138190555081601481905550601454601354620005b191906200112c565b60128190555073979b1be976a0785da2f23b56a3584e7e6b5c93fa600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200062d6200061f620008c360201b60201c565b6001620008eb60201b60201c565b62000640306001620008eb60201b60201c565b6200065561dead6001620008eb60201b60201c565b62000689600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008eb60201b60201c565b620006ab6200069d620008c360201b60201c565b60016200072c60201b60201c565b620006be3060016200072c60201b60201c565b620006d361dead60016200072c60201b60201c565b62000707600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200072c60201b60201c565b62000719308262000a3460201b60201c565b50505050505062001323565b5f33905090565b6200073c6200072560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c490620011c4565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008fb6200072560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200098c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098390620011c4565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a28919062001200565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000aa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9c9062001269565b60405180910390fd5b62000ab85f838362000bd160201b60201c565b62000acf8160025462000bd660201b90919060201c565b60028190555062000b26815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000bd660201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bc591906200129a565b60405180910390a35050565b505050565b5f80828462000be691906200112c565b90508381101562000c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c259062001303565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000cb457607f821691505b60208210810362000cca5762000cc962000c6f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d2e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cf1565b62000d3a868362000cf1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d8462000d7e62000d788462000d52565b62000d5b565b62000d52565b9050919050565b5f819050919050565b62000d9f8362000d64565b62000db762000dae8262000d8b565b84845462000cfd565b825550505050565b5f90565b62000dcd62000dbf565b62000dda81848462000d94565b505050565b5b8181101562000e015762000df55f8262000dc3565b60018101905062000de0565b5050565b601f82111562000e505762000e1a8162000cd0565b62000e258462000ce2565b8101602085101562000e35578190505b62000e4d62000e448562000ce2565b83018262000ddf565b50505b505050565b5f82821c905092915050565b5f62000e725f198460080262000e55565b1980831691505092915050565b5f62000e8c838362000e61565b9150826002028217905092915050565b62000ea78262000c38565b67ffffffffffffffff81111562000ec35762000ec262000c42565b5b62000ecf825462000c9c565b62000edc82828562000e05565b5f60209050601f83116001811462000f12575f841562000efd578287015190505b62000f09858262000e7f565b86555062000f78565b601f19841662000f228662000cd0565b5f5b8281101562000f4b5784890151825560018201915060208501945060208101905062000f24565b8683101562000f6b578489015162000f67601f89168262000e61565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000faf8262000f84565b9050919050565b62000fc18162000fa3565b811462000fcc575f80fd5b50565b5f8151905062000fdf8162000fb6565b92915050565b5f6020828403121562000ffd5762000ffc62000f80565b5b5f6200100c8482850162000fcf565b91505092915050565b620010208162000fa3565b82525050565b5f6040820190506200103b5f83018562001015565b6200104a602083018462001015565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200108a8262000d52565b9150620010978362000d52565b9250828202620010a78162000d52565b91508282048414831517620010c157620010c062001051565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620011018262000d52565b91506200110e8362000d52565b925082620011215762001120620010c8565b5b828204905092915050565b5f620011388262000d52565b9150620011458362000d52565b925082820190508082111562001160576200115f62001051565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620011ac60208362001166565b9150620011b98262001176565b602082019050919050565b5f6020820190508181035f830152620011dd816200119e565b9050919050565b5f8115159050919050565b620011fa81620011e4565b82525050565b5f602082019050620012155f830184620011ef565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001251601f8362001166565b91506200125e826200121b565b602082019050919050565b5f6020820190508181035f830152620012828162001243565b9050919050565b620012948162000d52565b82525050565b5f602082019050620012af5f83018462001289565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620012eb601b8362001166565b9150620012f882620012b5565b602082019050919050565b5f6020820190508181035f8301526200131c81620012dd565b9050919050565b60805160a051614af26200137d5f395f8181610da901526116d201525f8181610b1401528181611f5101528181611f780152818161344a0152818161352901528181613550015281816135e6015261360d0152614af25ff3fe608060405260043610610275575f3560e01c80637571336a1161014e578063b69ef8a8116100c0578063e52fb9ec11610079578063e52fb9ec14610962578063ed9953071461098c578063f11a24d3146109a2578063f2fde38b146109cc578063f6374342146109f4578063f8b45b0514610a1e5761027c565b8063b69ef8a814610844578063c02466681461086e578063cc2ffe7c14610896578063d1294d4c146108c0578063d85ba063146108fc578063dd62ed3e146109265761027c565b80639a7a23d6116101125780639a7a23d614610718578063a2240e1914610740578063a457c2d714610768578063a9059cbb146107a4578063b1192e18146107e0578063b62496f5146108085761027c565b80637571336a1461065e578063841e4561146106865780638da5cb5b146106ae57806395d89b41146106d857806398252501146107025761027c565b806339509351116101e75780636a486a8e116101ab5780636a486a8e146105645780636b2fb1241461058e57806370a08231146105b8578063715018a6146105f45780637437681e1461060a578063751039fc146106345761027c565b8063395093511461048257806349bd5a5e146104be5780634fbee193146104e85780635c068a8c14610524578063616eb6381461054e5761027c565b8063184f5c6a11610239578063184f5c6a146103765780631864217b1461039e5780631a8145bb146103c85780631cce34ee146103f257806323b872dd1461041c578063313ce567146104585761027c565b806306fdde0314610280578063095ea7b3146102aa57806310d5de53146102e65780631694505e1461032257806318160ddd1461034c5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a48565b6040516102a191906137a2565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb9190613853565b610ad8565b6040516102dd91906138ab565b60405180910390f35b3480156102f1575f80fd5b5061030c600480360381019061030791906138c4565b610af5565b60405161031991906138ab565b60405180910390f35b34801561032d575f80fd5b50610336610b12565b604051610343919061394a565b60405180910390f35b348015610357575f80fd5b50610360610b36565b60405161036d9190613972565b60405180910390f35b348015610381575f80fd5b5061039c600480360381019061039791906139b5565b610b3f565b005b3480156103a9575f80fd5b506103b2610bf2565b6040516103bf91906138ab565b60405180910390f35b3480156103d3575f80fd5b506103dc610c05565b6040516103e99190613972565b60405180910390f35b3480156103fd575f80fd5b50610406610c0b565b60405161041391906138ab565b60405180910390f35b348015610427575f80fd5b50610442600480360381019061043d91906139e0565b610c1d565b60405161044f91906138ab565b60405180910390f35b348015610463575f80fd5b5061046c610cf1565b6040516104799190613a4b565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190613853565b610cf9565b6040516104b591906138ab565b60405180910390f35b3480156104c9575f80fd5b506104d2610da7565b6040516104df9190613a73565b60405180910390f35b3480156104f3575f80fd5b5061050e600480360381019061050991906138c4565b610dcb565b60405161051b91906138ab565b60405180910390f35b34801561052f575f80fd5b50610538610e1d565b6040516105459190613972565b60405180910390f35b348015610559575f80fd5b50610562610e23565b005b34801561056f575f80fd5b50610578610fcc565b6040516105859190613972565b60405180910390f35b348015610599575f80fd5b506105a2610fd2565b6040516105af9190613972565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d991906138c4565b610fd8565b6040516105eb9190613972565b60405180910390f35b3480156105ff575f80fd5b5061060861101d565b005b348015610615575f80fd5b5061061e611170565b60405161062b9190613972565b60405180910390f35b34801561063f575f80fd5b50610648611176565b60405161065591906138ab565b60405180910390f35b348015610669575f80fd5b50610684600480360381019061067f9190613a8c565b61122d565b005b348015610691575f80fd5b506106ac60048036038101906106a791906138c4565b61131b565b005b3480156106b9575f80fd5b506106c261146f565b6040516106cf9190613a73565b60405180910390f35b3480156106e3575f80fd5b506106ec611497565b6040516106f991906137a2565b60405180910390f35b34801561070d575f80fd5b50610716611527565b005b348015610723575f80fd5b5061073e60048036038101906107399190613a8c565b61163a565b005b34801561074b575f80fd5b5061076660048036038101906107619190613aca565b61176c565b005b348015610773575f80fd5b5061078e60048036038101906107899190613853565b611926565b60405161079b91906138ab565b60405180910390f35b3480156107af575f80fd5b506107ca60048036038101906107c59190613853565b6119ee565b6040516107d791906138ab565b60405180910390f35b3480156107eb575f80fd5b5061080660048036038101906108019190613b08565b611a0b565b005b348015610813575f80fd5b5061082e600480360381019061082991906138c4565b611b44565b60405161083b91906138ab565b60405180910390f35b34801561084f575f80fd5b50610858611b61565b6040516108659190613972565b60405180910390f35b348015610879575f80fd5b50610894600480360381019061088f9190613a8c565b611b67565b005b3480156108a1575f80fd5b506108aa611ca3565b6040516108b79190613972565b60405180910390f35b3480156108cb575f80fd5b506108e660048036038101906108e19190613b6c565b611ca9565b6040516108f391906138ab565b60405180910390f35b348015610907575f80fd5b50610910611e17565b60405161091d9190613972565b60405180910390f35b348015610931575f80fd5b5061094c60048036038101906109479190613b97565b611e1d565b6040516109599190613972565b60405180910390f35b34801561096d575f80fd5b50610976611e9f565b6040516109839190613972565b60405180910390f35b348015610997575f80fd5b506109a0611ea5565b005b3480156109ad575f80fd5b506109b6612043565b6040516109c39190613972565b60405180910390f35b3480156109d7575f80fd5b506109f260048036038101906109ed91906138c4565b612049565b005b3480156109ff575f80fd5b50610a0861219d565b604051610a159190613972565b60405180910390f35b348015610a29575f80fd5b50610a326121a3565b604051610a3f9190613972565b60405180910390f35b606060038054610a5790613c02565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390613c02565b8015610ace5780601f10610aa557610100808354040283529160200191610ace565b820191905f5260205f20905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b5f610aeb610ae46121a9565b84846121b0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610b476121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613c7c565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600e60019054906101000a900460ff1681565b60155481565b600e5f9054906101000a900460ff1681565b5f610c29848484612373565b610ce684610c356121a9565b610ce185604051806060016040528060288152602001614a706028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c986121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b6121b0565b600190509392505050565b5f6012905090565b5f610d9d610d056121a9565b84610d988560015f610d156121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b6121b0565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b610e2b6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb090613c7c565b60405180910390fd5b5f4790505f8111610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690613d0a565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610f4590613d55565b5f6040518083038185875af1925050503d805f8114610f7f576040519150601f19603f3d011682016040523d82523d5f602084013e610f84565b606091505b5050905080610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90613db3565b60405180910390fd5b5050565b60125481565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110256121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90613c7c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b5f61117f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490613c7c565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6112356121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613c7c565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113236121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890613c7c565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114a690613c02565b80601f01602080910402602001604051908101604052809291908181526020018280546114d290613c02565b801561151d5780601f106114f45761010080835404028352916020019161151d565b820191905f5260205f20905b81548152906001019060200180831161150057829003601f168201915b5050505050905090565b61152f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613c7c565b60405180910390fd5b5f6115c730610fd8565b90505f811161160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613e41565b60405180910390fd5b61163730600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612373565b50565b6116426121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790613c7c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590613ecf565b60405180910390fd5b6117688282612d52565b5050565b6117746121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613c7c565b60405180910390fd5b670de0b6b3a76400006103e86001611818610b36565b6118229190613f1a565b61182c9190613f88565b6118369190613f88565b821015611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90614028565b60405180910390fd5b670de0b6b3a76400006103e8600561188e610b36565b6118989190613f1a565b6118a29190613f88565b6118ac9190613f88565b8110156118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e5906140b6565b60405180910390fd5b670de0b6b3a7640000826119029190613f1a565b600b81905550670de0b6b3a76400008161191c9190613f1a565b600d819055505050565b5f6119e46119326121a9565b846119df85604051806060016040528060258152602001614a986025913960015f61195b6121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b6121b0565b6001905092915050565b5f611a016119fa6121a9565b8484612373565b6001905092915050565b611a136121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613c7c565b60405180910390fd5b8360118190555081601081905550601054601154611abf91906140d4565b600f819055508260148190555080601381905550601354601454611ae391906140d4565b601281905550601e600f5411158015611aff5750601e60125411155b611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614151565b60405180910390fd5b50505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b611b6f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613c7c565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c9791906138ab565b60405180910390a25050565b60165481565b5f611cb26121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3790613c7c565b60405180910390fd5b620186a06001611d4e610b36565b611d589190613f1a565b611d629190613f88565b821015611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b906141df565b60405180910390fd5b6103e86005611db1610b36565b611dbb9190613f1a565b611dc59190613f88565b821115611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe9061426d565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b611ead6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3290613c7c565b60405180910390fd5b5f4790505f611f4930610fd8565b9050611f76307f0000000000000000000000000000000000000000000000000000000000000000836121b0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611ffb969594939291906142c4565b60606040518083038185885af1158015612017573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061203c9190614337565b5050505050565b60115481565b6120516121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690613c7c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612215906143f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614485565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123669190613972565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890614513565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612446906145a1565b60405180910390fd5b5f81036124665761246183835f612df0565b612c8e565b600e5f9054906101000a900460ff161561285a5761248261146f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124f057506124c061146f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612562575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257a575060085f9054906101000a900460ff16155b1561285957601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561261c575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126c357600b54811115612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d9061462f565b60405180910390fd5b600d5461267283610fd8565b8261267d91906140d4565b11156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614697565b60405180910390fd5b612858565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612760575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127af57600b548111156127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190614725565b60405180910390fd5b612857565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661285657600d5461280983610fd8565b8261281491906140d4565b1115612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c90614697565b60405180910390fd5b5b5b5b5b5b5f61286430610fd8565b90505f600c548210159050808015612888575060085f9054906101000a900460ff16155b80156128db5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561292e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612981575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129c257600160085f6101000a81548160ff0219169083151502179055506129a8613079565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a70575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a79575f90505b5f8115612c7e57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ad757505f601254115b15612b6f57612b046064612af66012548861329f90919063ffffffff16565b61331690919063ffffffff16565b905060125460145482612b179190613f1a565b612b219190613f88565b60155f828254612b3191906140d4565b9250508190555060125460135482612b499190613f1a565b612b539190613f88565b60165f828254612b6391906140d4565b92505081905550612c5b565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612bc657505f600f54115b15612c5a57612bf36064612be5600f548861329f90919063ffffffff16565b61331690919063ffffffff16565b9050600f5460115482612c069190613f1a565b612c109190613f88565b60155f828254612c2091906140d4565b92505081905550600f5460105482612c389190613f1a565b612c429190613f88565b60165f828254612c5291906140d4565b925050819055505b5b5f811115612c6f57612c6e873083612df0565b5b8085612c7b9190614743565b94505b612c89878787612df0565b505050505b505050565b5f838311158290612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd191906137a2565b60405180910390fd5b505f8385612ce89190614743565b9050809150509392505050565b5f808284612d0391906140d4565b905083811015612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f906147c0565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5590614513565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec3906145a1565b60405180910390fd5b612ed783838361335f565b612f4081604051806060016040528060268152602001614a4a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612fcf815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306c9190613972565b60405180910390a3505050565b5f61308330610fd8565b90505f60165460155461309691906140d4565b90505f808314806130a657505f82145b156130b35750505061329d565b5f1515600e60019054906101000a900460ff161515036130fa576014600c546130dc9190613f1a565b8311156130f5576014600c546130f29190613f1a565b92505b613106565b61310330610fd8565b92505b5f600283601554866131189190613f1a565b6131229190613f88565b61312c9190613f88565b90505f613142828661336490919063ffffffff16565b90505f479050613151826133ad565b5f613165824761336490919063ffffffff16565b90505f61318f876131816016548561329f90919063ffffffff16565b61331690919063ffffffff16565b90505f818361319e9190614743565b90505f6015819055505f6016819055505f861180156131bc57505f81115b15613209576131cb86826135e0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613200939291906147de565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161324e90613d55565b5f6040518083038185875af1925050503d805f8114613288576040519150601f19603f3d011682016040523d82523d5f602084013e61328d565b606091505b5050809750505050505050505050505b565b5f8083036132af575f9050613310565b5f82846132bc9190613f1a565b90508284826132cb9190613f88565b1461330b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330290614883565b60405180910390fd5b809150505b92915050565b5f61335783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136b7565b905092915050565b505050565b5f6133a583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c93565b905092915050565b5f600267ffffffffffffffff8111156133c9576133c86148a1565b5b6040519080825280602002602001820160405280156133f75781602001602082028036833780820191505090505b50905030815f8151811061340e5761340d6148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d5919061490f565b816001815181106134e9576134e86148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354e307f0000000000000000000000000000000000000000000000000000000000000000846121b0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135af9594939291906149f1565b5f604051808303815f87803b1580156135c6575f80fd5b505af11580156135d8573d5f803e3d5ffd5b505050505050565b61360b307f0000000000000000000000000000000000000000000000000000000000000000846121b0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161366f969594939291906142c4565b60606040518083038185885af115801561368b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136b09190614337565b5050505050565b5f80831182906136fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f491906137a2565b60405180910390fd5b505f838561370b9190613f88565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561374f578082015181840152602081019050613734565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61377482613718565b61377e8185613722565b935061378e818560208601613732565b6137978161375a565b840191505092915050565b5f6020820190508181035f8301526137ba818461376a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137ef826137c6565b9050919050565b6137ff816137e5565b8114613809575f80fd5b50565b5f8135905061381a816137f6565b92915050565b5f819050919050565b61383281613820565b811461383c575f80fd5b50565b5f8135905061384d81613829565b92915050565b5f8060408385031215613869576138686137c2565b5b5f6138768582860161380c565b92505060206138878582860161383f565b9150509250929050565b5f8115159050919050565b6138a581613891565b82525050565b5f6020820190506138be5f83018461389c565b92915050565b5f602082840312156138d9576138d86137c2565b5b5f6138e68482850161380c565b91505092915050565b5f819050919050565b5f61391261390d613908846137c6565b6138ef565b6137c6565b9050919050565b5f613923826138f8565b9050919050565b5f61393482613919565b9050919050565b6139448161392a565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c81613820565b82525050565b5f6020820190506139855f830184613963565b92915050565b61399481613891565b811461399e575f80fd5b50565b5f813590506139af8161398b565b92915050565b5f602082840312156139ca576139c96137c2565b5b5f6139d7848285016139a1565b91505092915050565b5f805f606084860312156139f7576139f66137c2565b5b5f613a048682870161380c565b9350506020613a158682870161380c565b9250506040613a268682870161383f565b9150509250925092565b5f60ff82169050919050565b613a4581613a30565b82525050565b5f602082019050613a5e5f830184613a3c565b92915050565b613a6d816137e5565b82525050565b5f602082019050613a865f830184613a64565b92915050565b5f8060408385031215613aa257613aa16137c2565b5b5f613aaf8582860161380c565b9250506020613ac0858286016139a1565b9150509250929050565b5f8060408385031215613ae057613adf6137c2565b5b5f613aed8582860161383f565b9250506020613afe8582860161383f565b9150509250929050565b5f805f8060808587031215613b2057613b1f6137c2565b5b5f613b2d8782880161383f565b9450506020613b3e8782880161383f565b9350506040613b4f8782880161383f565b9250506060613b608782880161383f565b91505092959194509250565b5f60208284031215613b8157613b806137c2565b5b5f613b8e8482850161383f565b91505092915050565b5f8060408385031215613bad57613bac6137c2565b5b5f613bba8582860161380c565b9250506020613bcb8582860161380c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c1957607f821691505b602082108103613c2c57613c2b613bd5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c66602083613722565b9150613c7182613c32565b602082019050919050565b5f6020820190508181035f830152613c9381613c5a565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613cf4602283613722565b9150613cff82613c9a565b604082019050919050565b5f6020820190508181035f830152613d2181613ce8565b9050919050565b5f81905092915050565b50565b5f613d405f83613d28565b9150613d4b82613d32565b5f82019050919050565b5f613d5f82613d35565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613d9d601b83613722565b9150613da882613d69565b602082019050919050565b5f6020820190508181035f830152613dca81613d91565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613e2b602483613722565b9150613e3682613dd1565b604082019050919050565b5f6020820190508181035f830152613e5881613e1f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613eb9603983613722565b9150613ec482613e5f565b604082019050919050565b5f6020820190508181035f830152613ee681613ead565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f2482613820565b9150613f2f83613820565b9250828202613f3d81613820565b91508282048414831517613f5457613f53613eed565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f9282613820565b9150613f9d83613820565b925082613fad57613fac613f5b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614012602f83613722565b915061401d82613fb8565b604082019050919050565b5f6020820190508181035f83015261403f81614006565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6140a0602483613722565b91506140ab82614046565b604082019050919050565b5f6020820190508181035f8301526140cd81614094565b9050919050565b5f6140de82613820565b91506140e983613820565b925082820190508082111561410157614100613eed565b5b92915050565b7f466565732063616e6e6f7420626520686967686572207468656e2033302500005f82015250565b5f61413b601e83613722565b915061414682614107565b602082019050919050565b5f6020820190508181035f8301526141688161412f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6141c9603583613722565b91506141d48261416f565b604082019050919050565b5f6020820190508181035f8301526141f6816141bd565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614257603483613722565b9150614262826141fd565b604082019050919050565b5f6020820190508181035f8301526142848161424b565b9050919050565b5f819050919050565b5f6142ae6142a96142a48461428b565b6138ef565b613820565b9050919050565b6142be81614294565b82525050565b5f60c0820190506142d75f830189613a64565b6142e46020830188613963565b6142f160408301876142b5565b6142fe60608301866142b5565b61430b6080830185613a64565b61431860a0830184613963565b979650505050505050565b5f8151905061433181613829565b92915050565b5f805f6060848603121561434e5761434d6137c2565b5b5f61435b86828701614323565b935050602061436c86828701614323565b925050604061437d86828701614323565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143e1602483613722565b91506143ec82614387565b604082019050919050565b5f6020820190508181035f83015261440e816143d5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61446f602283613722565b915061447a82614415565b604082019050919050565b5f6020820190508181035f83015261449c81614463565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6144fd602583613722565b9150614508826144a3565b604082019050919050565b5f6020820190508181035f83015261452a816144f1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458b602383613722565b915061459682614531565b604082019050919050565b5f6020820190508181035f8301526145b88161457f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614619603583613722565b9150614624826145bf565b604082019050919050565b5f6020820190508181035f8301526146468161460d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614681601383613722565b915061468c8261464d565b602082019050919050565b5f6020820190508181035f8301526146ae81614675565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61470f603683613722565b915061471a826146b5565b604082019050919050565b5f6020820190508181035f83015261473c81614703565b9050919050565b5f61474d82613820565b915061475883613820565b92508282039050818111156147705761476f613eed565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6147aa601b83613722565b91506147b582614776565b602082019050919050565b5f6020820190508181035f8301526147d78161479e565b9050919050565b5f6060820190506147f15f830186613963565b6147fe6020830185613963565b61480b6040830184613963565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61486d602183613722565b915061487882614813565b604082019050919050565b5f6020820190508181035f83015261489a81614861565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614909816137f6565b92915050565b5f60208284031215614924576149236137c2565b5b5f614931848285016148fb565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61496c816137e5565b82525050565b5f61497d8383614963565b60208301905092915050565b5f602082019050919050565b5f61499f8261493a565b6149a98185614944565b93506149b483614954565b805f5b838110156149e45781516149cb8882614972565b97506149d683614989565b9250506001810190506149b7565b5085935050505092915050565b5f60a082019050614a045f830188613963565b614a1160208301876142b5565b8181036040830152614a238186614995565b9050614a326060830185613a64565b614a3f6080830184613963565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206ac868c9afe372f4a987b2688484684e7e4b79305976ecc87740c325ebe3fa6e64736f6c63430008140033

Deployed Bytecode

0x608060405260043610610275575f3560e01c80637571336a1161014e578063b69ef8a8116100c0578063e52fb9ec11610079578063e52fb9ec14610962578063ed9953071461098c578063f11a24d3146109a2578063f2fde38b146109cc578063f6374342146109f4578063f8b45b0514610a1e5761027c565b8063b69ef8a814610844578063c02466681461086e578063cc2ffe7c14610896578063d1294d4c146108c0578063d85ba063146108fc578063dd62ed3e146109265761027c565b80639a7a23d6116101125780639a7a23d614610718578063a2240e1914610740578063a457c2d714610768578063a9059cbb146107a4578063b1192e18146107e0578063b62496f5146108085761027c565b80637571336a1461065e578063841e4561146106865780638da5cb5b146106ae57806395d89b41146106d857806398252501146107025761027c565b806339509351116101e75780636a486a8e116101ab5780636a486a8e146105645780636b2fb1241461058e57806370a08231146105b8578063715018a6146105f45780637437681e1461060a578063751039fc146106345761027c565b8063395093511461048257806349bd5a5e146104be5780634fbee193146104e85780635c068a8c14610524578063616eb6381461054e5761027c565b8063184f5c6a11610239578063184f5c6a146103765780631864217b1461039e5780631a8145bb146103c85780631cce34ee146103f257806323b872dd1461041c578063313ce567146104585761027c565b806306fdde0314610280578063095ea7b3146102aa57806310d5de53146102e65780631694505e1461032257806318160ddd1461034c5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a48565b6040516102a191906137a2565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb9190613853565b610ad8565b6040516102dd91906138ab565b60405180910390f35b3480156102f1575f80fd5b5061030c600480360381019061030791906138c4565b610af5565b60405161031991906138ab565b60405180910390f35b34801561032d575f80fd5b50610336610b12565b604051610343919061394a565b60405180910390f35b348015610357575f80fd5b50610360610b36565b60405161036d9190613972565b60405180910390f35b348015610381575f80fd5b5061039c600480360381019061039791906139b5565b610b3f565b005b3480156103a9575f80fd5b506103b2610bf2565b6040516103bf91906138ab565b60405180910390f35b3480156103d3575f80fd5b506103dc610c05565b6040516103e99190613972565b60405180910390f35b3480156103fd575f80fd5b50610406610c0b565b60405161041391906138ab565b60405180910390f35b348015610427575f80fd5b50610442600480360381019061043d91906139e0565b610c1d565b60405161044f91906138ab565b60405180910390f35b348015610463575f80fd5b5061046c610cf1565b6040516104799190613a4b565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190613853565b610cf9565b6040516104b591906138ab565b60405180910390f35b3480156104c9575f80fd5b506104d2610da7565b6040516104df9190613a73565b60405180910390f35b3480156104f3575f80fd5b5061050e600480360381019061050991906138c4565b610dcb565b60405161051b91906138ab565b60405180910390f35b34801561052f575f80fd5b50610538610e1d565b6040516105459190613972565b60405180910390f35b348015610559575f80fd5b50610562610e23565b005b34801561056f575f80fd5b50610578610fcc565b6040516105859190613972565b60405180910390f35b348015610599575f80fd5b506105a2610fd2565b6040516105af9190613972565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d991906138c4565b610fd8565b6040516105eb9190613972565b60405180910390f35b3480156105ff575f80fd5b5061060861101d565b005b348015610615575f80fd5b5061061e611170565b60405161062b9190613972565b60405180910390f35b34801561063f575f80fd5b50610648611176565b60405161065591906138ab565b60405180910390f35b348015610669575f80fd5b50610684600480360381019061067f9190613a8c565b61122d565b005b348015610691575f80fd5b506106ac60048036038101906106a791906138c4565b61131b565b005b3480156106b9575f80fd5b506106c261146f565b6040516106cf9190613a73565b60405180910390f35b3480156106e3575f80fd5b506106ec611497565b6040516106f991906137a2565b60405180910390f35b34801561070d575f80fd5b50610716611527565b005b348015610723575f80fd5b5061073e60048036038101906107399190613a8c565b61163a565b005b34801561074b575f80fd5b5061076660048036038101906107619190613aca565b61176c565b005b348015610773575f80fd5b5061078e60048036038101906107899190613853565b611926565b60405161079b91906138ab565b60405180910390f35b3480156107af575f80fd5b506107ca60048036038101906107c59190613853565b6119ee565b6040516107d791906138ab565b60405180910390f35b3480156107eb575f80fd5b5061080660048036038101906108019190613b08565b611a0b565b005b348015610813575f80fd5b5061082e600480360381019061082991906138c4565b611b44565b60405161083b91906138ab565b60405180910390f35b34801561084f575f80fd5b50610858611b61565b6040516108659190613972565b60405180910390f35b348015610879575f80fd5b50610894600480360381019061088f9190613a8c565b611b67565b005b3480156108a1575f80fd5b506108aa611ca3565b6040516108b79190613972565b60405180910390f35b3480156108cb575f80fd5b506108e660048036038101906108e19190613b6c565b611ca9565b6040516108f391906138ab565b60405180910390f35b348015610907575f80fd5b50610910611e17565b60405161091d9190613972565b60405180910390f35b348015610931575f80fd5b5061094c60048036038101906109479190613b97565b611e1d565b6040516109599190613972565b60405180910390f35b34801561096d575f80fd5b50610976611e9f565b6040516109839190613972565b60405180910390f35b348015610997575f80fd5b506109a0611ea5565b005b3480156109ad575f80fd5b506109b6612043565b6040516109c39190613972565b60405180910390f35b3480156109d7575f80fd5b506109f260048036038101906109ed91906138c4565b612049565b005b3480156109ff575f80fd5b50610a0861219d565b604051610a159190613972565b60405180910390f35b348015610a29575f80fd5b50610a326121a3565b604051610a3f9190613972565b60405180910390f35b606060038054610a5790613c02565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390613c02565b8015610ace5780601f10610aa557610100808354040283529160200191610ace565b820191905f5260205f20905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b5f610aeb610ae46121a9565b84846121b0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610b476121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613c7c565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600e60019054906101000a900460ff1681565b60155481565b600e5f9054906101000a900460ff1681565b5f610c29848484612373565b610ce684610c356121a9565b610ce185604051806060016040528060288152602001614a706028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c986121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b6121b0565b600190509392505050565b5f6012905090565b5f610d9d610d056121a9565b84610d988560015f610d156121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b6121b0565b6001905092915050565b7f000000000000000000000000542f6e20dc7d3ec5d8222c5b5b8490d10a8a740a81565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b610e2b6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb090613c7c565b60405180910390fd5b5f4790505f8111610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690613d0a565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610f4590613d55565b5f6040518083038185875af1925050503d805f8114610f7f576040519150601f19603f3d011682016040523d82523d5f602084013e610f84565b606091505b5050905080610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90613db3565b60405180910390fd5b5050565b60125481565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110256121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90613c7c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b5f61117f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490613c7c565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6112356121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613c7c565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113236121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890613c7c565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114a690613c02565b80601f01602080910402602001604051908101604052809291908181526020018280546114d290613c02565b801561151d5780601f106114f45761010080835404028352916020019161151d565b820191905f5260205f20905b81548152906001019060200180831161150057829003601f168201915b5050505050905090565b61152f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613c7c565b60405180910390fd5b5f6115c730610fd8565b90505f811161160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613e41565b60405180910390fd5b61163730600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612373565b50565b6116426121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790613c7c565b60405180910390fd5b7f000000000000000000000000542f6e20dc7d3ec5d8222c5b5b8490d10a8a740a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590613ecf565b60405180910390fd5b6117688282612d52565b5050565b6117746121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613c7c565b60405180910390fd5b670de0b6b3a76400006103e86001611818610b36565b6118229190613f1a565b61182c9190613f88565b6118369190613f88565b821015611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90614028565b60405180910390fd5b670de0b6b3a76400006103e8600561188e610b36565b6118989190613f1a565b6118a29190613f88565b6118ac9190613f88565b8110156118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e5906140b6565b60405180910390fd5b670de0b6b3a7640000826119029190613f1a565b600b81905550670de0b6b3a76400008161191c9190613f1a565b600d819055505050565b5f6119e46119326121a9565b846119df85604051806060016040528060258152602001614a986025913960015f61195b6121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b6121b0565b6001905092915050565b5f611a016119fa6121a9565b8484612373565b6001905092915050565b611a136121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613c7c565b60405180910390fd5b8360118190555081601081905550601054601154611abf91906140d4565b600f819055508260148190555080601381905550601354601454611ae391906140d4565b601281905550601e600f5411158015611aff5750601e60125411155b611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614151565b60405180910390fd5b50505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b611b6f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613c7c565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c9791906138ab565b60405180910390a25050565b60165481565b5f611cb26121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3790613c7c565b60405180910390fd5b620186a06001611d4e610b36565b611d589190613f1a565b611d629190613f88565b821015611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b906141df565b60405180910390fd5b6103e86005611db1610b36565b611dbb9190613f1a565b611dc59190613f88565b821115611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe9061426d565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b611ead6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3290613c7c565b60405180910390fd5b5f4790505f611f4930610fd8565b9050611f76307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d836121b0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611ffb969594939291906142c4565b60606040518083038185885af1158015612017573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061203c9190614337565b5050505050565b60115481565b6120516121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690613c7c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612215906143f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614485565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123669190613972565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890614513565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612446906145a1565b60405180910390fd5b5f81036124665761246183835f612df0565b612c8e565b600e5f9054906101000a900460ff161561285a5761248261146f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124f057506124c061146f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612562575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257a575060085f9054906101000a900460ff16155b1561285957601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561261c575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126c357600b54811115612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d9061462f565b60405180910390fd5b600d5461267283610fd8565b8261267d91906140d4565b11156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614697565b60405180910390fd5b612858565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612760575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127af57600b548111156127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190614725565b60405180910390fd5b612857565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661285657600d5461280983610fd8565b8261281491906140d4565b1115612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c90614697565b60405180910390fd5b5b5b5b5b5b5f61286430610fd8565b90505f600c548210159050808015612888575060085f9054906101000a900460ff16155b80156128db5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561292e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612981575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129c257600160085f6101000a81548160ff0219169083151502179055506129a8613079565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a70575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a79575f90505b5f8115612c7e57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ad757505f601254115b15612b6f57612b046064612af66012548861329f90919063ffffffff16565b61331690919063ffffffff16565b905060125460145482612b179190613f1a565b612b219190613f88565b60155f828254612b3191906140d4565b9250508190555060125460135482612b499190613f1a565b612b539190613f88565b60165f828254612b6391906140d4565b92505081905550612c5b565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612bc657505f600f54115b15612c5a57612bf36064612be5600f548861329f90919063ffffffff16565b61331690919063ffffffff16565b9050600f5460115482612c069190613f1a565b612c109190613f88565b60155f828254612c2091906140d4565b92505081905550600f5460105482612c389190613f1a565b612c429190613f88565b60165f828254612c5291906140d4565b925050819055505b5b5f811115612c6f57612c6e873083612df0565b5b8085612c7b9190614743565b94505b612c89878787612df0565b505050505b505050565b5f838311158290612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd191906137a2565b60405180910390fd5b505f8385612ce89190614743565b9050809150509392505050565b5f808284612d0391906140d4565b905083811015612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f906147c0565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5590614513565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec3906145a1565b60405180910390fd5b612ed783838361335f565b612f4081604051806060016040528060268152602001614a4a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612fcf815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306c9190613972565b60405180910390a3505050565b5f61308330610fd8565b90505f60165460155461309691906140d4565b90505f808314806130a657505f82145b156130b35750505061329d565b5f1515600e60019054906101000a900460ff161515036130fa576014600c546130dc9190613f1a565b8311156130f5576014600c546130f29190613f1a565b92505b613106565b61310330610fd8565b92505b5f600283601554866131189190613f1a565b6131229190613f88565b61312c9190613f88565b90505f613142828661336490919063ffffffff16565b90505f479050613151826133ad565b5f613165824761336490919063ffffffff16565b90505f61318f876131816016548561329f90919063ffffffff16565b61331690919063ffffffff16565b90505f818361319e9190614743565b90505f6015819055505f6016819055505f861180156131bc57505f81115b15613209576131cb86826135e0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613200939291906147de565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161324e90613d55565b5f6040518083038185875af1925050503d805f8114613288576040519150601f19603f3d011682016040523d82523d5f602084013e61328d565b606091505b5050809750505050505050505050505b565b5f8083036132af575f9050613310565b5f82846132bc9190613f1a565b90508284826132cb9190613f88565b1461330b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330290614883565b60405180910390fd5b809150505b92915050565b5f61335783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136b7565b905092915050565b505050565b5f6133a583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c93565b905092915050565b5f600267ffffffffffffffff8111156133c9576133c86148a1565b5b6040519080825280602002602001820160405280156133f75781602001602082028036833780820191505090505b50905030815f8151811061340e5761340d6148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d5919061490f565b816001815181106134e9576134e86148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121b0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135af9594939291906149f1565b5f604051808303815f87803b1580156135c6575f80fd5b505af11580156135d8573d5f803e3d5ffd5b505050505050565b61360b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121b0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161366f969594939291906142c4565b60606040518083038185885af115801561368b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136b09190614337565b5050505050565b5f80831182906136fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f491906137a2565b60405180910390fd5b505f838561370b9190613f88565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561374f578082015181840152602081019050613734565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61377482613718565b61377e8185613722565b935061378e818560208601613732565b6137978161375a565b840191505092915050565b5f6020820190508181035f8301526137ba818461376a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137ef826137c6565b9050919050565b6137ff816137e5565b8114613809575f80fd5b50565b5f8135905061381a816137f6565b92915050565b5f819050919050565b61383281613820565b811461383c575f80fd5b50565b5f8135905061384d81613829565b92915050565b5f8060408385031215613869576138686137c2565b5b5f6138768582860161380c565b92505060206138878582860161383f565b9150509250929050565b5f8115159050919050565b6138a581613891565b82525050565b5f6020820190506138be5f83018461389c565b92915050565b5f602082840312156138d9576138d86137c2565b5b5f6138e68482850161380c565b91505092915050565b5f819050919050565b5f61391261390d613908846137c6565b6138ef565b6137c6565b9050919050565b5f613923826138f8565b9050919050565b5f61393482613919565b9050919050565b6139448161392a565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c81613820565b82525050565b5f6020820190506139855f830184613963565b92915050565b61399481613891565b811461399e575f80fd5b50565b5f813590506139af8161398b565b92915050565b5f602082840312156139ca576139c96137c2565b5b5f6139d7848285016139a1565b91505092915050565b5f805f606084860312156139f7576139f66137c2565b5b5f613a048682870161380c565b9350506020613a158682870161380c565b9250506040613a268682870161383f565b9150509250925092565b5f60ff82169050919050565b613a4581613a30565b82525050565b5f602082019050613a5e5f830184613a3c565b92915050565b613a6d816137e5565b82525050565b5f602082019050613a865f830184613a64565b92915050565b5f8060408385031215613aa257613aa16137c2565b5b5f613aaf8582860161380c565b9250506020613ac0858286016139a1565b9150509250929050565b5f8060408385031215613ae057613adf6137c2565b5b5f613aed8582860161383f565b9250506020613afe8582860161383f565b9150509250929050565b5f805f8060808587031215613b2057613b1f6137c2565b5b5f613b2d8782880161383f565b9450506020613b3e8782880161383f565b9350506040613b4f8782880161383f565b9250506060613b608782880161383f565b91505092959194509250565b5f60208284031215613b8157613b806137c2565b5b5f613b8e8482850161383f565b91505092915050565b5f8060408385031215613bad57613bac6137c2565b5b5f613bba8582860161380c565b9250506020613bcb8582860161380c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c1957607f821691505b602082108103613c2c57613c2b613bd5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c66602083613722565b9150613c7182613c32565b602082019050919050565b5f6020820190508181035f830152613c9381613c5a565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613cf4602283613722565b9150613cff82613c9a565b604082019050919050565b5f6020820190508181035f830152613d2181613ce8565b9050919050565b5f81905092915050565b50565b5f613d405f83613d28565b9150613d4b82613d32565b5f82019050919050565b5f613d5f82613d35565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613d9d601b83613722565b9150613da882613d69565b602082019050919050565b5f6020820190508181035f830152613dca81613d91565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613e2b602483613722565b9150613e3682613dd1565b604082019050919050565b5f6020820190508181035f830152613e5881613e1f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613eb9603983613722565b9150613ec482613e5f565b604082019050919050565b5f6020820190508181035f830152613ee681613ead565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f2482613820565b9150613f2f83613820565b9250828202613f3d81613820565b91508282048414831517613f5457613f53613eed565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f9282613820565b9150613f9d83613820565b925082613fad57613fac613f5b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614012602f83613722565b915061401d82613fb8565b604082019050919050565b5f6020820190508181035f83015261403f81614006565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6140a0602483613722565b91506140ab82614046565b604082019050919050565b5f6020820190508181035f8301526140cd81614094565b9050919050565b5f6140de82613820565b91506140e983613820565b925082820190508082111561410157614100613eed565b5b92915050565b7f466565732063616e6e6f7420626520686967686572207468656e2033302500005f82015250565b5f61413b601e83613722565b915061414682614107565b602082019050919050565b5f6020820190508181035f8301526141688161412f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6141c9603583613722565b91506141d48261416f565b604082019050919050565b5f6020820190508181035f8301526141f6816141bd565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614257603483613722565b9150614262826141fd565b604082019050919050565b5f6020820190508181035f8301526142848161424b565b9050919050565b5f819050919050565b5f6142ae6142a96142a48461428b565b6138ef565b613820565b9050919050565b6142be81614294565b82525050565b5f60c0820190506142d75f830189613a64565b6142e46020830188613963565b6142f160408301876142b5565b6142fe60608301866142b5565b61430b6080830185613a64565b61431860a0830184613963565b979650505050505050565b5f8151905061433181613829565b92915050565b5f805f6060848603121561434e5761434d6137c2565b5b5f61435b86828701614323565b935050602061436c86828701614323565b925050604061437d86828701614323565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143e1602483613722565b91506143ec82614387565b604082019050919050565b5f6020820190508181035f83015261440e816143d5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61446f602283613722565b915061447a82614415565b604082019050919050565b5f6020820190508181035f83015261449c81614463565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6144fd602583613722565b9150614508826144a3565b604082019050919050565b5f6020820190508181035f83015261452a816144f1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458b602383613722565b915061459682614531565b604082019050919050565b5f6020820190508181035f8301526145b88161457f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614619603583613722565b9150614624826145bf565b604082019050919050565b5f6020820190508181035f8301526146468161460d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614681601383613722565b915061468c8261464d565b602082019050919050565b5f6020820190508181035f8301526146ae81614675565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61470f603683613722565b915061471a826146b5565b604082019050919050565b5f6020820190508181035f83015261473c81614703565b9050919050565b5f61474d82613820565b915061475883613820565b92508282039050818111156147705761476f613eed565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6147aa601b83613722565b91506147b582614776565b602082019050919050565b5f6020820190508181035f8301526147d78161479e565b9050919050565b5f6060820190506147f15f830186613963565b6147fe6020830185613963565b61480b6040830184613963565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61486d602183613722565b915061487882614813565b604082019050919050565b5f6020820190508181035f83015261489a81614861565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614909816137f6565b92915050565b5f60208284031215614924576149236137c2565b5b5f614931848285016148fb565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61496c816137e5565b82525050565b5f61497d8383614963565b60208301905092915050565b5f602082019050919050565b5f61499f8261493a565b6149a98185614944565b93506149b483614954565b805f5b838110156149e45781516149cb8882614972565b97506149d683614989565b9250506001810190506149b7565b5085935050505092915050565b5f60a082019050614a045f830188613963565b614a1160208301876142b5565b8181036040830152614a238186614995565b9050614a326060830185613a64565b614a3f6080830184613963565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206ac868c9afe372f4a987b2688484684e7e4b79305976ecc87740c325ebe3fa6e64736f6c63430008140033

Deployed Bytecode Sourcemap

17519:13723:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4788:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5702:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18584:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17677:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5109:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22785:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18015:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18288:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17977:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5879:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5008:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6242:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17735:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25351:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18099:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22069:310;;;;;;;;;;;;;:::i;:::-;;18175:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18210:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5225:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10763:148;;;;;;;;;;;;;:::i;:::-;;17882:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22658:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23742:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25135:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10549:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4896:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22387:255;;;;;;;;;;;;;:::i;:::-;;24684:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23351:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6468:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5360:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23898:587;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18807:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17813:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24493:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18328:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22968:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18065:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5543:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17909:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21516:545;;;;;;;;;;;;;:::i;:::-;;18135:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10919:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18247:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17943:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4788:100;4842:13;4875:5;4868:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4788:100;:::o;5702:169::-;5785:4;5802:39;5811:12;:10;:12::i;:::-;5825:7;5834:6;5802:8;:39::i;:::-;5859:4;5852:11;;5702:169;;;;:::o;18584:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17677:51::-;;;:::o;5109:108::-;5170:7;5197:12;;5190:19;;5109:108;:::o;22785:111::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22881:7:::1;22857:21;;:31;;;;;;;;;;;;;;;;;;22785:111:::0;:::o;18015:41::-;;;;;;;;;;;;;:::o;18288:33::-;;;;:::o;17977:31::-;;;;;;;;;;;;;:::o;5879:355::-;6019:4;6036:36;6046:6;6054:9;6065:6;6036:9;:36::i;:::-;6083:121;6092:6;6100:12;:10;:12::i;:::-;6114:89;6152:6;6114:89;;;;;;;;;;;;;;;;;:11;:19;6126:6;6114:19;;;;;;;;;;;;;;;:33;6134:12;:10;:12::i;:::-;6114:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6083:8;:121::i;:::-;6222:4;6215:11;;5879:355;;;;;:::o;5008:93::-;5066:5;5091:2;5084:9;;5008:93;:::o;6242:218::-;6330:4;6347:83;6356:12;:10;:12::i;:::-;6370:7;6379:50;6418:10;6379:11;:25;6391:12;:10;:12::i;:::-;6379:25;;;;;;;;;;;;;;;:34;6405:7;6379:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6347:8;:83::i;:::-;6448:4;6441:11;;6242:218;;;;:::o;17735:38::-;;;:::o;25351:125::-;25416:4;25440:19;:28;25460:7;25440:28;;;;;;;;;;;;;;;;;;;;;;;;;25433:35;;25351:125;;;:::o;18099:29::-;;;;:::o;22069:310::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22119:18:::1;22140:21;22119:42;;22193:1;22180:10;:14;22172:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22245:12;22270:14;;;;;;;;;;;22262:28;;22298:10;22262:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22244:69;;;22332:7;22324:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22108:271;;22069:310::o:0;18175:28::-;;;;:::o;18210:30::-;;;;:::o;5225:127::-;5299:7;5326:9;:18;5336:7;5326:18;;;;;;;;;;;;;;;;5319:25;;5225:127;;;:::o;10763:148::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10870:1:::1;10833:40;;10854:6;;;;;;;;;;;10833:40;;;;;;;;;;;;10901:1;10884:6;;:19;;;;;;;;;;;;;;;;;;10763:148::o:0;17882:20::-;;;;:::o;22658:118::-;22710:4;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22741:5:::1;22726:12;;:20;;;;;;;;;;;;;;;;;;22764:4;22757:11;;22658:118:::0;:::o;23742:144::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23874:4:::1;23832:31;:39;23864:6;23832:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23742:144:::0;;:::o;25135:201::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25268:14:::1;;;;;;;;;;;25227:56;;25249:17;25227:56;;;;;;;;;;;;25311:17;25294:14;;:34;;;;;;;;;;;;;;;;;;25135:201:::0;:::o;10549:79::-;10587:7;10614:6;;;;;;;;;;;10607:13;;10549:79;:::o;4896:104::-;4952:13;4985:7;4978:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4896:104;:::o;22387:255::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22446:20:::1;22469:24;22487:4;22469:9;:24::i;:::-;22446:47;;22527:1;22512:12;:16;22504:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22580:54;22598:4;22605:14;;;;;;;;;;;22621:12;22580:9;:54::i;:::-;22435:207;22387:255::o:0;24684:245::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24791:13:::1;24783:21;;:4;:21;;::::0;24775:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24880:41;24909:4;24915:5;24880:28;:41::i;:::-;24684:245:::0;;:::o;23351:382::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23484:4:::1;23478;23474:1;23458:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23457:31;;;;:::i;:::-;23447:6;:41;;23439:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23600:4;23594;23590:1;23574:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23573:31;;;;:::i;:::-;23559:10;:45;;23551:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;23674:6;23664;:17;;;;:::i;:::-;23656:5;:25;;;;23718:6;23704:10;:21;;;;:::i;:::-;23692:9;:33;;;;23351:382:::0;;:::o;6468:269::-;6561:4;6578:129;6587:12;:10;:12::i;:::-;6601:7;6610:96;6649:15;6610:96;;;;;;;;;;;;;;;;;:11;:25;6622:12;:10;:12::i;:::-;6610:25;;;;;;;;;;;;;;;:34;6636:7;6610:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6578:8;:129::i;:::-;6725:4;6718:11;;6468:269;;;;:::o;5360:175::-;5446:4;5463:42;5473:12;:10;:12::i;:::-;5487:9;5498:6;5463:9;:42::i;:::-;5523:4;5516:11;;5360:175;;;;:::o;23898:587::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24112:16:::1;24094:15;:34;;;;24156:15;24139:14;:32;;;;24215:14;;24197:15;;:32;;;;:::i;:::-;24182:12;:47;;;;24259:17;24240:16;:36;;;;24305:16;24287:15;:34;;;;24367:15;;24348:16;;:34;;;;:::i;:::-;24332:13;:50;;;;24417:2;24401:12;;:18;;:41;;;;;24440:2;24423:13;;:19;;24401:41;24393:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;23898:587:::0;;;;:::o;18807:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17813:22::-;;;;:::o;24493:182::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24609:8:::1;24578:19;:28;24598:7;24578:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24649:7;24633:34;;;24658:8;24633:34;;;;;;:::i;:::-;;;;;;;;24493:182:::0;;:::o;18328:32::-;;;;:::o;22968:374::-;23043:4;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23100:6:::1;23096:1;23080:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;23067:9;:39;;23059:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;23216:4;23212:1;23196:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23183:9;:37;;23175:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;23303:9;23288:12;:24;;;;23330:4;23323:11;;22968:374:::0;;;:::o;18065:27::-;;;;:::o;5543:151::-;5632:7;5659:11;:18;5671:5;5659:18;;;;;;;;;;;;;;;:27;5678:7;5659:27;;;;;;;;;;;;;;;;5652:34;;5543:151;;;;:::o;17909:27::-;;;;:::o;21516:545::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21582:17:::1;21602:21;21582:41;;21634:19;21656:24;21674:4;21656:9;:24::i;:::-;21634:46;;21711:62;21728:4;21743:15;21761:11;21711:8;:62::i;:::-;21786:15;:31;;;21825:9;21858:4;21878:11;21908:1;21955::::0;21998:14:::1;;;;;;;;;;;22027:15;21786:267;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21561:500;;21516:545::o:0;18135:30::-;;;;:::o;10919:169::-;10686:12;:10;:12::i;:::-;10676:22;;:6;;;;;;;;;;;:22;;;10668:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11043:8:::1;11014:38;;11035:6;;;;;;;;;;;11014:38;;;;;;;;;;;;11072:8;11063:6;;:17;;;;;;;;;;;;;;;;;;10919:169:::0;:::o;18247:31::-;;;;:::o;17943:24::-;;;;:::o;141:98::-;194:7;221:10;214:17;;141:98;:::o;8144:381::-;8297:1;8280:19;;:5;:19;;;8272:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8378:1;8359:21;;:7;:21;;;8351:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8463:6;8433:11;:18;8445:5;8433:18;;;;;;;;;;;;;;;:27;8452:7;8433:27;;;;;;;;;;;;;;;:36;;;;8501:7;8485:32;;8494:5;8485:32;;;8510:6;8485:32;;;;;;:::i;:::-;;;;;;;;8144:381;;;:::o;25485:3113::-;25633:1;25617:18;;:4;:18;;;25609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25710:1;25696:16;;:2;:16;;;25688:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25777:1;25767:6;:11;25764:92;;25795:28;25811:4;25817:2;25821:1;25795:15;:28::i;:::-;25838:7;;25764:92;25872:12;;;;;;;;;;;25869:1052;;;25930:7;:5;:7::i;:::-;25922:15;;:4;:15;;;;:49;;;;;25964:7;:5;:7::i;:::-;25958:13;;:2;:13;;;;25922:49;:86;;;;;26006:1;25992:16;;:2;:16;;;;25922:86;:128;;;;;26043:6;26029:21;;:2;:21;;;;25922:128;:160;;;;;26072:10;;;;;;;;;;;26071:11;25922:160;25900:1010;;;26166:25;:31;26192:4;26166:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26202:31;:35;26234:2;26202:35;;;;;;;;;;;;;;;;;;;;;;;;;26201:36;26166:71;26162:733;;;26284:5;;26274:6;:15;;26266:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26408:9;;26391:13;26401:2;26391:9;:13::i;:::-;26382:6;:22;;;;:::i;:::-;:35;;26374:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26162:733;;;26520:25;:29;26546:2;26520:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26554:31;:37;26586:4;26554:37;;;;;;;;;;;;;;;;;;;;;;;;;26553:38;26520:71;26516:379;;;26638:5;;26628:6;:15;;26620:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;26516:379;;;26749:31;:35;26781:2;26749:35;;;;;;;;;;;;;;;;;;;;;;;;;26745:150;;26842:9;;26825:13;26835:2;26825:9;:13::i;:::-;26816:6;:22;;;;:::i;:::-;:35;;26808:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26745:150;26516:379;26162:733;25900:1010;25869:1052;26934:28;26965:24;26983:4;26965:9;:24::i;:::-;26934:55;;27003:12;27042;;27018:20;:36;;27003:51;;27086:7;:35;;;;;27111:10;;;;;;;;;;;27110:11;27086:35;:84;;;;;27139:25;:31;27165:4;27139:31;;;;;;;;;;;;;;;;;;;;;;;;;27138:32;27086:84;:127;;;;;27188:19;:25;27208:4;27188:25;;;;;;;;;;;;;;;;;;;;;;;;;27187:26;27086:127;:168;;;;;27231:19;:23;27251:2;27231:23;;;;;;;;;;;;;;;;;;;;;;;;;27230:24;27086:168;27068:306;;;27294:4;27281:10;;:17;;;;;;;;;;;;;;;;;;27316:10;:8;:10::i;:::-;27357:5;27344:10;;:18;;;;;;;;;;;;;;;;;;27068:306;27387:12;27403:10;;;;;;;;;;;27402:11;27387:26;;27515:19;:25;27535:4;27515:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27544:19;:23;27564:2;27544:23;;;;;;;;;;;;;;;;;;;;;;;;;27515:52;27512:99;;;27594:5;27584:15;;27512:99;27624:12;27728:7;27725:819;;;27779:25;:29;27805:2;27779:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27828:1;27812:13;;:17;27779:50;27775:616;;;27856:34;27886:3;27856:25;27867:13;;27856:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27849:41;;27957:13;;27938:16;;27931:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27909:18;;:61;;;;;;;:::i;:::-;;;;;;;;28035:13;;28017:15;;28010:4;:22;;;;:::i;:::-;:38;;;;:::i;:::-;27989:17;;:59;;;;;;;:::i;:::-;;;;;;;;27775:616;;;28109:25;:31;28135:4;28109:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28159:1;28144:12;;:16;28109:51;28106:285;;;28188:33;28217:3;28188:24;28199:12;;28188:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;28181:40;;28287:12;;28269:15;;28262:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28240:18;;:59;;;;;;;:::i;:::-;;;;;;;;28363:12;;28346:14;;28339:4;:21;;;;:::i;:::-;:36;;;;:::i;:::-;28318:17;;:57;;;;;;;:::i;:::-;;;;;;;;28106:285;27775:616;28418:1;28411:4;:8;28408:93;;;28443:42;28459:4;28473;28480;28443:15;:42::i;:::-;28408:93;28528:4;28518:14;;;;;:::i;:::-;;;27725:819;28557:33;28573:4;28579:2;28583:6;28557:15;:33::i;:::-;25598:3000;;;;25485:3113;;;;:::o;9026:193::-;9112:7;9145:1;9140;:6;;9148:12;9132:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9172:9;9188:1;9184;:5;;;;:::i;:::-;9172:17;;9210:1;9203:8;;;9026:193;;;;;:::o;8692:182::-;8750:7;8770:9;8786:1;8782;:5;;;;:::i;:::-;8770:17;;8811:1;8806;:6;;8798:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8865:1;8858:8;;;8692:182;;;;:::o;24938:189::-;25055:5;25021:25;:31;25047:4;25021:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25113:5;25079:40;;25107:4;25079:40;;;;;;;;;;;;24938:189;;:::o;6745:575::-;6903:1;6885:20;;:6;:20;;;6877:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6987:1;6966:23;;:9;:23;;;6958:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7043:47;7064:6;7072:9;7083:6;7043:20;:47::i;:::-;7124:71;7146:6;7124:71;;;;;;;;;;;;;;;;;:9;:17;7134:6;7124:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7104:9;:17;7114:6;7104:17;;;;;;;;;;;;;;;:91;;;;7229:32;7254:6;7229:9;:20;7239:9;7229:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7206:9;:20;7216:9;7206:20;;;;;;;;;;;;;;;:55;;;;7294:9;7277:35;;7286:6;7277:35;;;7305:6;7277:35;;;;;;:::i;:::-;;;;;;;;6745:575;;;:::o;29742:1497::-;29781:23;29807:24;29825:4;29807:9;:24::i;:::-;29781:50;;29842:25;29891:17;;29870:18;;:38;;;;:::i;:::-;29842:66;;29919:12;29967:1;29948:15;:20;:46;;;;29993:1;29972:17;:22;29948:46;29945:60;;;29997:7;;;;;29945:60;30046:5;30021:30;;:21;;;;;;;;;;;:30;;;30018:242;;30103:2;30088:12;;:17;;;;:::i;:::-;30070:15;:35;30067:109;;;30158:2;30143:12;;:17;;;;:::i;:::-;30125:35;;30067:109;30018:242;;;30224:24;30242:4;30224:9;:24::i;:::-;30206:42;;30018:242;30332:23;30417:1;30397:17;30376:18;;30358:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30332:86;;30429:26;30458:36;30478:15;30458;:19;;:36;;;;:::i;:::-;30429:65;;30508:25;30536:21;30508:49;;30571:36;30588:18;30571:16;:36::i;:::-;30622:18;30643:44;30669:17;30643:21;:25;;:44;;;;:::i;:::-;30622:65;;30701:23;30727:56;30765:17;30727:33;30742:17;;30727:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;30701:82;;30794:23;30833:15;30820:10;:28;;;;:::i;:::-;30794:54;;30886:1;30865:18;:22;;;;30918:1;30898:17;:21;;;;30954:1;30936:15;:19;:42;;;;;30977:1;30959:15;:19;30936:42;30933:210;;;30994:46;31007:15;31024;30994:12;:46::i;:::-;31060:71;31075:18;31095:15;31112:18;;31060:71;;;;;;;;:::i;:::-;;;;;;;;30933:210;31177:14;;;;;;;;;;;31169:28;;31205:21;31169:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31156:75;;;;;29770:1469;;;;;;;;;29742:1497;:::o;9227:254::-;9285:7;9316:1;9311;:6;9307:47;;9341:1;9334:8;;;;9307:47;9367:9;9383:1;9379;:5;;;;:::i;:::-;9367:17;;9412:1;9407;9403;:5;;;;:::i;:::-;:10;9395:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9472:1;9465:8;;;9227:254;;;;;:::o;9489:132::-;9547:7;9574:39;9578:1;9581;9574:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9567:46;;9489:132;;;;:::o;8533:125::-;;;;:::o;8882:136::-;8940:7;8967:43;8971:1;8974;8967:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8960:50;;8882:136;;;;:::o;28607:597::-;28736:21;28774:1;28760:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28736:40;;28805:4;28787;28792:1;28787:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28831:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28821:4;28826:1;28821:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28867:62;28884:4;28899:15;28917:11;28867:8;:62::i;:::-;28969:15;:66;;;29050:11;29076:1;29120:4;29147;29167:15;28969:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28662:542;28607:597;:::o;29213:520::-;29361:62;29378:4;29393:15;29411:11;29361:8;:62::i;:::-;29467:15;:31;;;29506:9;29539:4;29559:11;29585:1;29628;29679:4;29699:15;29467:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29213:520;;:::o;9629:279::-;9715:7;9747:1;9743;:5;9750:12;9735:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9774:9;9790:1;9786;:5;;;;:::i;:::-;9774:17;;9899:1;9892:8;;;9629: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:116::-;5181:21;5196:5;5181:21;:::i;:::-;5174:5;5171:32;5161:60;;5217:1;5214;5207:12;5161:60;5111:116;:::o;5233:133::-;5276:5;5314:6;5301:20;5292:29;;5330:30;5354:5;5330:30;:::i;:::-;5233:133;;;;:::o;5372:323::-;5428:6;5477:2;5465:9;5456:7;5452:23;5448:32;5445:119;;;5483:79;;:::i;:::-;5445:119;5603:1;5628:50;5670:7;5661:6;5650:9;5646:22;5628:50;:::i;:::-;5618:60;;5574:114;5372:323;;;;:::o;5701:619::-;5778:6;5786;5794;5843:2;5831:9;5822:7;5818:23;5814:32;5811:119;;;5849:79;;:::i;:::-;5811:119;5969:1;5994:53;6039:7;6030:6;6019:9;6015:22;5994:53;:::i;:::-;5984:63;;5940:117;6096:2;6122:53;6167:7;6158:6;6147:9;6143:22;6122:53;:::i;:::-;6112:63;;6067:118;6224:2;6250:53;6295:7;6286:6;6275:9;6271:22;6250:53;:::i;:::-;6240:63;;6195:118;5701:619;;;;;:::o;6326:86::-;6361:7;6401:4;6394:5;6390:16;6379:27;;6326:86;;;:::o;6418:112::-;6501:22;6517:5;6501:22;:::i;:::-;6496:3;6489:35;6418:112;;:::o;6536:214::-;6625:4;6663:2;6652:9;6648:18;6640:26;;6676:67;6740:1;6729:9;6725:17;6716:6;6676:67;:::i;:::-;6536:214;;;;:::o;6756:118::-;6843:24;6861:5;6843:24;:::i;:::-;6838:3;6831:37;6756:118;;:::o;6880:222::-;6973:4;7011:2;7000:9;6996:18;6988:26;;7024:71;7092:1;7081:9;7077:17;7068:6;7024:71;:::i;:::-;6880:222;;;;:::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:329::-;8892:6;8941:2;8929:9;8920:7;8916:23;8912:32;8909:119;;;8947:79;;:::i;:::-;8909:119;9067:1;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9038:117;8833:329;;;;:::o;9168:474::-;9236:6;9244;9293:2;9281:9;9272:7;9268:23;9264:32;9261:119;;;9299:79;;:::i;:::-;9261:119;9419:1;9444:53;9489:7;9480:6;9469:9;9465:22;9444:53;:::i;:::-;9434:63;;9390:117;9546:2;9572:53;9617:7;9608:6;9597:9;9593:22;9572:53;:::i;:::-;9562:63;;9517:118;9168:474;;;;;:::o;9648:180::-;9696:77;9693:1;9686:88;9793:4;9790:1;9783:15;9817:4;9814:1;9807:15;9834:320;9878:6;9915:1;9909:4;9905:12;9895:22;;9962:1;9956:4;9952:12;9983:18;9973:81;;10039:4;10031:6;10027:17;10017:27;;9973:81;10101:2;10093:6;10090:14;10070:18;10067:38;10064:84;;10120:18;;:::i;:::-;10064:84;9885:269;9834:320;;;:::o;10160:182::-;10300:34;10296:1;10288:6;10284:14;10277:58;10160:182;:::o;10348:366::-;10490:3;10511:67;10575:2;10570:3;10511:67;:::i;:::-;10504:74;;10587:93;10676:3;10587:93;:::i;:::-;10705:2;10700:3;10696:12;10689:19;;10348:366;;;:::o;10720:419::-;10886:4;10924:2;10913:9;10909:18;10901:26;;10973:9;10967:4;10963:20;10959:1;10948:9;10944:17;10937:47;11001:131;11127:4;11001:131;:::i;:::-;10993:139;;10720:419;;;:::o;11145:221::-;11285:34;11281:1;11273:6;11269:14;11262:58;11354:4;11349:2;11341:6;11337:15;11330:29;11145:221;:::o;11372:366::-;11514:3;11535:67;11599:2;11594:3;11535:67;:::i;:::-;11528:74;;11611:93;11700:3;11611:93;:::i;:::-;11729:2;11724:3;11720:12;11713:19;;11372:366;;;:::o;11744:419::-;11910:4;11948:2;11937:9;11933:18;11925:26;;11997:9;11991:4;11987:20;11983:1;11972:9;11968:17;11961:47;12025:131;12151:4;12025:131;:::i;:::-;12017:139;;11744:419;;;:::o;12169:147::-;12270:11;12307:3;12292:18;;12169:147;;;;:::o;12322:114::-;;:::o;12442:398::-;12601:3;12622:83;12703:1;12698:3;12622:83;:::i;:::-;12615:90;;12714:93;12803:3;12714:93;:::i;:::-;12832:1;12827:3;12823:11;12816:18;;12442:398;;;:::o;12846:379::-;13030:3;13052:147;13195:3;13052:147;:::i;:::-;13045:154;;13216:3;13209:10;;12846:379;;;:::o;13231:177::-;13371:29;13367:1;13359:6;13355:14;13348:53;13231:177;:::o;13414:366::-;13556:3;13577:67;13641:2;13636:3;13577:67;:::i;:::-;13570:74;;13653:93;13742:3;13653:93;:::i;:::-;13771:2;13766:3;13762:12;13755:19;;13414:366;;;:::o;13786:419::-;13952:4;13990:2;13979:9;13975:18;13967:26;;14039:9;14033:4;14029:20;14025:1;14014:9;14010:17;14003:47;14067:131;14193:4;14067:131;:::i;:::-;14059:139;;13786:419;;;:::o;14211:223::-;14351:34;14347:1;14339:6;14335:14;14328:58;14420:6;14415:2;14407:6;14403:15;14396:31;14211:223;:::o;14440:366::-;14582:3;14603:67;14667:2;14662:3;14603:67;:::i;:::-;14596:74;;14679:93;14768:3;14679:93;:::i;:::-;14797:2;14792:3;14788:12;14781:19;;14440:366;;;:::o;14812:419::-;14978:4;15016:2;15005:9;15001:18;14993:26;;15065:9;15059:4;15055:20;15051:1;15040:9;15036:17;15029:47;15093:131;15219:4;15093:131;:::i;:::-;15085:139;;14812:419;;;:::o;15237:244::-;15377:34;15373:1;15365:6;15361:14;15354:58;15446:27;15441:2;15433:6;15429:15;15422:52;15237:244;:::o;15487:366::-;15629:3;15650:67;15714:2;15709:3;15650:67;:::i;:::-;15643:74;;15726:93;15815:3;15726:93;:::i;:::-;15844:2;15839:3;15835:12;15828:19;;15487:366;;;:::o;15859:419::-;16025:4;16063:2;16052:9;16048:18;16040:26;;16112:9;16106:4;16102:20;16098:1;16087:9;16083:17;16076:47;16140:131;16266:4;16140:131;:::i;:::-;16132:139;;15859:419;;;:::o;16284:180::-;16332:77;16329:1;16322:88;16429:4;16426:1;16419:15;16453:4;16450:1;16443:15;16470:410;16510:7;16533:20;16551:1;16533:20;:::i;:::-;16528:25;;16567:20;16585:1;16567:20;:::i;:::-;16562:25;;16622:1;16619;16615:9;16644:30;16662:11;16644:30;:::i;:::-;16633:41;;16823:1;16814:7;16810:15;16807:1;16804:22;16784:1;16777:9;16757:83;16734:139;;16853:18;;:::i;:::-;16734:139;16518:362;16470:410;;;;:::o;16886:180::-;16934:77;16931:1;16924:88;17031:4;17028:1;17021:15;17055:4;17052:1;17045:15;17072:185;17112:1;17129:20;17147:1;17129:20;:::i;:::-;17124:25;;17163:20;17181:1;17163:20;:::i;:::-;17158:25;;17202:1;17192:35;;17207:18;;:::i;:::-;17192:35;17249:1;17246;17242:9;17237:14;;17072:185;;;;:::o;17263:234::-;17403:34;17399:1;17391:6;17387:14;17380:58;17472:17;17467:2;17459:6;17455:15;17448:42;17263:234;:::o;17503:366::-;17645:3;17666:67;17730:2;17725:3;17666:67;:::i;:::-;17659:74;;17742:93;17831:3;17742:93;:::i;:::-;17860:2;17855:3;17851:12;17844:19;;17503:366;;;:::o;17875:419::-;18041:4;18079:2;18068:9;18064:18;18056:26;;18128:9;18122:4;18118:20;18114:1;18103:9;18099:17;18092:47;18156:131;18282:4;18156:131;:::i;:::-;18148:139;;17875:419;;;:::o;18300:223::-;18440:34;18436:1;18428:6;18424:14;18417:58;18509:6;18504:2;18496:6;18492:15;18485:31;18300:223;:::o;18529:366::-;18671:3;18692:67;18756:2;18751:3;18692:67;:::i;:::-;18685:74;;18768:93;18857:3;18768:93;:::i;:::-;18886:2;18881:3;18877:12;18870:19;;18529:366;;;:::o;18901:419::-;19067:4;19105:2;19094:9;19090:18;19082:26;;19154:9;19148:4;19144:20;19140:1;19129:9;19125:17;19118:47;19182:131;19308:4;19182:131;:::i;:::-;19174:139;;18901:419;;;:::o;19326:191::-;19366:3;19385:20;19403:1;19385:20;:::i;:::-;19380:25;;19419:20;19437:1;19419:20;:::i;:::-;19414:25;;19462:1;19459;19455:9;19448:16;;19483:3;19480:1;19477:10;19474:36;;;19490:18;;:::i;:::-;19474:36;19326:191;;;;:::o;19523:180::-;19663:32;19659:1;19651:6;19647:14;19640:56;19523:180;:::o;19709:366::-;19851:3;19872:67;19936:2;19931:3;19872:67;:::i;:::-;19865:74;;19948:93;20037:3;19948:93;:::i;:::-;20066:2;20061:3;20057:12;20050:19;;19709:366;;;:::o;20081:419::-;20247:4;20285:2;20274:9;20270:18;20262:26;;20334:9;20328:4;20324:20;20320:1;20309:9;20305:17;20298:47;20362:131;20488:4;20362:131;:::i;:::-;20354:139;;20081:419;;;:::o;20506:240::-;20646:34;20642:1;20634:6;20630:14;20623:58;20715:23;20710:2;20702:6;20698:15;20691:48;20506:240;:::o;20752:366::-;20894:3;20915:67;20979:2;20974:3;20915:67;:::i;:::-;20908:74;;20991:93;21080:3;20991:93;:::i;:::-;21109:2;21104:3;21100:12;21093:19;;20752:366;;;:::o;21124:419::-;21290:4;21328:2;21317:9;21313:18;21305:26;;21377:9;21371:4;21367:20;21363:1;21352:9;21348:17;21341:47;21405:131;21531:4;21405:131;:::i;:::-;21397:139;;21124:419;;;:::o;21549:239::-;21689:34;21685:1;21677:6;21673:14;21666:58;21758:22;21753:2;21745:6;21741:15;21734:47;21549:239;:::o;21794:366::-;21936:3;21957:67;22021:2;22016:3;21957:67;:::i;:::-;21950:74;;22033:93;22122:3;22033:93;:::i;:::-;22151:2;22146:3;22142:12;22135:19;;21794:366;;;:::o;22166:419::-;22332:4;22370:2;22359:9;22355:18;22347:26;;22419:9;22413:4;22409:20;22405:1;22394:9;22390:17;22383:47;22447:131;22573:4;22447:131;:::i;:::-;22439:139;;22166:419;;;:::o;22591:85::-;22636:7;22665:5;22654:16;;22591:85;;;:::o;22682:158::-;22740:9;22773:61;22791:42;22800:32;22826:5;22800:32;:::i;:::-;22791:42;:::i;:::-;22773:61;:::i;:::-;22760:74;;22682:158;;;:::o;22846:147::-;22941:45;22980:5;22941:45;:::i;:::-;22936:3;22929:58;22846:147;;:::o;22999:807::-;23248:4;23286:3;23275:9;23271:19;23263:27;;23300:71;23368:1;23357:9;23353:17;23344:6;23300:71;:::i;:::-;23381:72;23449:2;23438:9;23434:18;23425:6;23381:72;:::i;:::-;23463:80;23539:2;23528:9;23524:18;23515:6;23463:80;:::i;:::-;23553;23629:2;23618:9;23614:18;23605:6;23553:80;:::i;:::-;23643:73;23711:3;23700:9;23696:19;23687:6;23643:73;:::i;:::-;23726;23794:3;23783:9;23779:19;23770:6;23726:73;:::i;:::-;22999:807;;;;;;;;;:::o;23812:143::-;23869:5;23900:6;23894:13;23885:22;;23916:33;23943:5;23916:33;:::i;:::-;23812:143;;;;:::o;23961:663::-;24049:6;24057;24065;24114:2;24102:9;24093:7;24089:23;24085:32;24082:119;;;24120:79;;:::i;:::-;24082:119;24240:1;24265:64;24321:7;24312:6;24301:9;24297:22;24265:64;:::i;:::-;24255:74;;24211:128;24378:2;24404:64;24460:7;24451:6;24440:9;24436:22;24404:64;:::i;:::-;24394:74;;24349:129;24517:2;24543:64;24599:7;24590:6;24579:9;24575:22;24543:64;:::i;:::-;24533:74;;24488:129;23961:663;;;;;:::o;24630:223::-;24770:34;24766:1;24758:6;24754:14;24747:58;24839:6;24834:2;24826:6;24822:15;24815:31;24630:223;:::o;24859:366::-;25001:3;25022:67;25086:2;25081:3;25022:67;:::i;:::-;25015:74;;25098:93;25187:3;25098:93;:::i;:::-;25216:2;25211:3;25207:12;25200:19;;24859:366;;;:::o;25231:419::-;25397:4;25435:2;25424:9;25420:18;25412:26;;25484:9;25478:4;25474:20;25470:1;25459:9;25455:17;25448:47;25512:131;25638:4;25512:131;:::i;:::-;25504:139;;25231:419;;;:::o;25656:221::-;25796:34;25792:1;25784:6;25780:14;25773:58;25865:4;25860:2;25852:6;25848:15;25841:29;25656:221;:::o;25883:366::-;26025:3;26046:67;26110:2;26105:3;26046:67;:::i;:::-;26039:74;;26122:93;26211:3;26122:93;:::i;:::-;26240:2;26235:3;26231:12;26224:19;;25883:366;;;:::o;26255:419::-;26421:4;26459:2;26448:9;26444:18;26436:26;;26508:9;26502:4;26498:20;26494:1;26483:9;26479:17;26472:47;26536:131;26662:4;26536:131;:::i;:::-;26528:139;;26255:419;;;:::o;26680:224::-;26820:34;26816:1;26808:6;26804:14;26797:58;26889:7;26884:2;26876:6;26872:15;26865:32;26680:224;:::o;26910:366::-;27052:3;27073:67;27137:2;27132:3;27073:67;:::i;:::-;27066:74;;27149:93;27238:3;27149:93;:::i;:::-;27267:2;27262:3;27258:12;27251:19;;26910:366;;;:::o;27282:419::-;27448:4;27486:2;27475:9;27471:18;27463:26;;27535:9;27529:4;27525:20;27521:1;27510:9;27506:17;27499:47;27563:131;27689:4;27563:131;:::i;:::-;27555:139;;27282:419;;;:::o;27707:222::-;27847:34;27843:1;27835:6;27831:14;27824:58;27916:5;27911:2;27903:6;27899:15;27892:30;27707:222;:::o;27935:366::-;28077:3;28098:67;28162:2;28157:3;28098:67;:::i;:::-;28091:74;;28174:93;28263:3;28174:93;:::i;:::-;28292:2;28287:3;28283:12;28276:19;;27935:366;;;:::o;28307:419::-;28473:4;28511:2;28500:9;28496:18;28488:26;;28560:9;28554:4;28550:20;28546:1;28535:9;28531:17;28524:47;28588:131;28714:4;28588:131;:::i;:::-;28580:139;;28307:419;;;:::o;28732:240::-;28872:34;28868:1;28860:6;28856:14;28849:58;28941:23;28936:2;28928:6;28924:15;28917:48;28732:240;:::o;28978:366::-;29120:3;29141:67;29205:2;29200:3;29141:67;:::i;:::-;29134:74;;29217:93;29306:3;29217:93;:::i;:::-;29335:2;29330:3;29326:12;29319:19;;28978:366;;;:::o;29350:419::-;29516:4;29554:2;29543:9;29539:18;29531:26;;29603:9;29597:4;29593:20;29589:1;29578:9;29574:17;29567:47;29631:131;29757:4;29631:131;:::i;:::-;29623:139;;29350:419;;;:::o;29775:169::-;29915:21;29911:1;29903:6;29899:14;29892:45;29775:169;:::o;29950:366::-;30092:3;30113:67;30177:2;30172:3;30113:67;:::i;:::-;30106:74;;30189:93;30278:3;30189:93;:::i;:::-;30307:2;30302:3;30298:12;30291:19;;29950:366;;;:::o;30322:419::-;30488:4;30526:2;30515:9;30511:18;30503:26;;30575:9;30569:4;30565:20;30561:1;30550:9;30546:17;30539:47;30603:131;30729:4;30603:131;:::i;:::-;30595:139;;30322:419;;;:::o;30747:241::-;30887:34;30883:1;30875:6;30871:14;30864:58;30956:24;30951:2;30943:6;30939:15;30932:49;30747:241;:::o;30994:366::-;31136:3;31157:67;31221:2;31216:3;31157:67;:::i;:::-;31150:74;;31233:93;31322:3;31233:93;:::i;:::-;31351:2;31346:3;31342:12;31335:19;;30994:366;;;:::o;31366:419::-;31532:4;31570:2;31559:9;31555:18;31547:26;;31619:9;31613:4;31609:20;31605:1;31594:9;31590:17;31583:47;31647:131;31773:4;31647:131;:::i;:::-;31639:139;;31366:419;;;:::o;31791:194::-;31831:4;31851:20;31869:1;31851:20;:::i;:::-;31846:25;;31885:20;31903:1;31885:20;:::i;:::-;31880:25;;31929:1;31926;31922:9;31914:17;;31953:1;31947:4;31944:11;31941:37;;;31958:18;;:::i;:::-;31941:37;31791:194;;;;:::o;31991:177::-;32131:29;32127:1;32119:6;32115:14;32108:53;31991:177;:::o;32174:366::-;32316:3;32337:67;32401:2;32396:3;32337:67;:::i;:::-;32330:74;;32413:93;32502:3;32413:93;:::i;:::-;32531:2;32526:3;32522:12;32515:19;;32174:366;;;:::o;32546:419::-;32712:4;32750:2;32739:9;32735:18;32727:26;;32799:9;32793:4;32789:20;32785:1;32774:9;32770:17;32763:47;32827:131;32953:4;32827:131;:::i;:::-;32819:139;;32546:419;;;:::o;32971:442::-;33120:4;33158:2;33147:9;33143:18;33135:26;;33171:71;33239:1;33228:9;33224:17;33215:6;33171:71;:::i;:::-;33252:72;33320:2;33309:9;33305:18;33296:6;33252:72;:::i;:::-;33334;33402:2;33391:9;33387:18;33378:6;33334:72;:::i;:::-;32971:442;;;;;;:::o;33419:220::-;33559:34;33555:1;33547:6;33543:14;33536:58;33628:3;33623:2;33615:6;33611:15;33604:28;33419:220;:::o;33645:366::-;33787:3;33808:67;33872:2;33867:3;33808:67;:::i;:::-;33801:74;;33884:93;33973:3;33884:93;:::i;:::-;34002:2;33997:3;33993:12;33986:19;;33645:366;;;:::o;34017:419::-;34183:4;34221:2;34210:9;34206:18;34198:26;;34270:9;34264:4;34260:20;34256:1;34245:9;34241:17;34234:47;34298:131;34424:4;34298:131;:::i;:::-;34290:139;;34017:419;;;:::o;34442:180::-;34490:77;34487:1;34480:88;34587:4;34584:1;34577:15;34611:4;34608:1;34601:15;34628:180;34676:77;34673:1;34666:88;34773:4;34770:1;34763:15;34797:4;34794:1;34787:15;34814:143;34871:5;34902:6;34896:13;34887:22;;34918:33;34945:5;34918:33;:::i;:::-;34814:143;;;;:::o;34963:351::-;35033:6;35082:2;35070:9;35061:7;35057:23;35053:32;35050:119;;;35088:79;;:::i;:::-;35050:119;35208:1;35233:64;35289:7;35280:6;35269:9;35265:22;35233:64;:::i;:::-;35223:74;;35179:128;34963:351;;;;:::o;35320:114::-;35387:6;35421:5;35415:12;35405:22;;35320:114;;;:::o;35440:184::-;35539:11;35573:6;35568:3;35561:19;35613:4;35608:3;35604:14;35589:29;;35440:184;;;;:::o;35630:132::-;35697:4;35720:3;35712:11;;35750:4;35745:3;35741:14;35733:22;;35630:132;;;:::o;35768:108::-;35845:24;35863:5;35845:24;:::i;:::-;35840:3;35833:37;35768:108;;:::o;35882:179::-;35951:10;35972:46;36014:3;36006:6;35972:46;:::i;:::-;36050:4;36045:3;36041:14;36027:28;;35882:179;;;;:::o;36067:113::-;36137:4;36169;36164:3;36160:14;36152:22;;36067:113;;;:::o;36216:732::-;36335:3;36364:54;36412:5;36364:54;:::i;:::-;36434:86;36513:6;36508:3;36434:86;:::i;:::-;36427:93;;36544:56;36594:5;36544:56;:::i;:::-;36623:7;36654:1;36639:284;36664:6;36661:1;36658:13;36639:284;;;36740:6;36734:13;36767:63;36826:3;36811:13;36767:63;:::i;:::-;36760:70;;36853:60;36906:6;36853:60;:::i;:::-;36843:70;;36699:224;36686:1;36683;36679:9;36674:14;;36639:284;;;36643:14;36939:3;36932:10;;36340:608;;;36216:732;;;;:::o;36954:831::-;37217:4;37255:3;37244:9;37240:19;37232:27;;37269:71;37337:1;37326:9;37322:17;37313:6;37269:71;:::i;:::-;37350:80;37426:2;37415:9;37411:18;37402:6;37350:80;:::i;:::-;37477:9;37471:4;37467:20;37462:2;37451:9;37447:18;37440:48;37505:108;37608:4;37599:6;37505:108;:::i;:::-;37497:116;;37623:72;37691:2;37680:9;37676:18;37667:6;37623:72;:::i;:::-;37705:73;37773:3;37762:9;37758:19;37749:6;37705:73;:::i;:::-;36954:831;;;;;;;;:::o

Swarm Source

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