ETH Price: $3,908.59 (+0.08%)

Token

ERC-20: CRUSADES (CRUSADES)
 

Overview

Max Total Supply

100,000,000 CRUSADES

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000010253908 CRUSADES

Value
$0.00
0x4b71039B78c052E6eC1166f72661E9166e048FaC
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:
CRUSADES

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-05
*/

/*


      Religious conflict can be the
      bloodiest and cruelest conflicts that
      turn people into fanatics

*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.15;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; 
        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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    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;
        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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        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;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) {require(b != -1 || a != MIN_INT256);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 CRUSADES is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public tokenDevelopmentAddress;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;  
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;  
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    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 marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event DevelopmentWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event BuyBackTriggered(uint256 amount); 
    event OwnerForcedSwapBack(uint256 timestamp);

    constructor() ERC20("CRUSADES", "CRUSADES") {
        
        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 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 1;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 1;
        
        uint256 totalSupply = 1 * 1e8 * 1e18;
        
        maxWallet = totalSupply * 1 / 100; // 1% Max wallet
        maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        swapTokensAtAmount = totalSupply * 15 / 10000; // 0.15% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;
        
    	marketingWallet = address(msg.sender); 
        tokenDevelopmentAddress = address(msg.sender); 

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        transferDelayEnabled = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _DevelopmentFee) external onlyOwner {//TG 
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _DevelopmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;
        require(buyTotalFees <= 6, "Must keep fees at 6% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _DevelopmentFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _DevelopmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;
        require(sellTotalFees <= 100, "Must keep fees at 100% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external 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 isExcludedFromFees(address account) external 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(limitsInEffect){
            if (
                from != owner() && 
                to != owner() && 
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){ 
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        if(takeFee){
            
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDevelopment += fees * buyDevelopmentFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance >= swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }
        
        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(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;

        
        (bool success,) = address(tokenDevelopmentAddress).call{value: ethForDevelopment}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        (success,) = address(marketingWallet).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":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevelopmentWalletUpdated","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":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyDevelopmentFee","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":"buyMarketingFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"tokenDevelopmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevelopmentFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevelopmentFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f43525553414445530000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f43525553414445530000000000000000000000000000000000000000000000008152508160039081620000fb919062000dca565b5080600490816200010d919062000dca565b5050506000620001226200061d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200062560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000f1b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f1b565b6040518363ffffffff1660e01b81526004016200034092919062000f5e565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000f1b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200062560201b60201c565b620003e360a05160016200072260201b60201c565b60008060006001905060008060006001905060006a52b7d2dcc80cd2e40000009050606460018262000416919062000fba565b6200042291906200104a565b600a81905550606460018262000439919062000fba565b6200044591906200104a565b600881905550612710600f826200045d919062000fba565b6200046991906200104a565b60098190555086600f819055508560108190555084601181905550601154601054600f5462000499919062001082565b620004a5919062001082565b600e81905550836013819055508260148190555081601581905550601554601454601354620004d5919062001082565b620004e1919062001082565b60128190555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200058b6200057d620007c360201b60201c565b6001620007ed60201b60201c565b6200059e306001620007ed60201b60201c565b620005b361dead6001620007ed60201b60201c565b620005d5620005c7620007c360201b60201c565b60016200062560201b60201c565b620005e83060016200062560201b60201c565b620005fd61dead60016200062560201b60201c565b6200060f33826200093a60201b60201c565b5050505050505050620012ae565b600033905090565b620006356200061d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006be9062001140565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007fd6200061d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200088f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008869062001140565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200092e91906200117f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a390620011ec565b60405180910390fd5b620009c06000838362000ae860201b60201c565b620009dc8160025462000aed60201b62001cdf1790919060201c565b60028190555062000a3a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000aed60201b62001cdf1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000adc91906200121f565b60405180910390a35050565b505050565b600080828462000afe919062001082565b90508381101562000b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b3d906200128c565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bd257607f821691505b60208210810362000be85762000be762000b8a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c13565b62000c5e868362000c13565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cab62000ca562000c9f8462000c76565b62000c80565b62000c76565b9050919050565b6000819050919050565b62000cc78362000c8a565b62000cdf62000cd68262000cb2565b84845462000c20565b825550505050565b600090565b62000cf662000ce7565b62000d0381848462000cbc565b505050565b5b8181101562000d2b5762000d1f60008262000cec565b60018101905062000d09565b5050565b601f82111562000d7a5762000d448162000bee565b62000d4f8462000c03565b8101602085101562000d5f578190505b62000d7762000d6e8562000c03565b83018262000d08565b50505b505050565b600082821c905092915050565b600062000d9f6000198460080262000d7f565b1980831691505092915050565b600062000dba838362000d8c565b9150826002028217905092915050565b62000dd58262000b50565b67ffffffffffffffff81111562000df15762000df062000b5b565b5b62000dfd825462000bb9565b62000e0a82828562000d2f565b600060209050601f83116001811462000e42576000841562000e2d578287015190505b62000e39858262000dac565b86555062000ea9565b601f19841662000e528662000bee565b60005b8281101562000e7c5784890151825560018201915060208501945060208101905062000e55565b8683101562000e9c578489015162000e98601f89168262000d8c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ee38262000eb6565b9050919050565b62000ef58162000ed6565b811462000f0157600080fd5b50565b60008151905062000f158162000eea565b92915050565b60006020828403121562000f345762000f3362000eb1565b5b600062000f448482850162000f04565b91505092915050565b62000f588162000ed6565b82525050565b600060408201905062000f75600083018562000f4d565b62000f84602083018462000f4d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fc78262000c76565b915062000fd48362000c76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001010576200100f62000f8b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010578262000c76565b9150620010648362000c76565b9250826200107757620010766200101b565b5b828204905092915050565b60006200108f8262000c76565b91506200109c8362000c76565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010d457620010d362000f8b565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001128602083620010df565b91506200113582620010f0565b602082019050919050565b600060208201905081810360008301526200115b8162001119565b9050919050565b60008115159050919050565b620011798162001162565b82525050565b60006020820190506200119660008301846200116e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011d4601f83620010df565b9150620011e1826200119c565b602082019050919050565b600060208201905081810360008301526200120781620011c5565b9050919050565b620012198162000c76565b82525050565b60006020820190506200123660008301846200120e565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001274601b83620010df565b915062001281826200123c565b602082019050919050565b60006020820190508181036000830152620012a78162001265565b9050919050565b60805160a0516148436200130c60003960008181610de00152818161155c01526122c3015260008181610c050152818161226b0152818161338e0152818161346f0152818161349601528181613532015261355901526148436000f3fe6080604052600436106102975760003560e01c80638a8c523c1161015a578063c876d0b9116100c1578063e884f2601161007a578063e884f26014610a33578063ef8700e514610a5e578063f11a24d314610a89578063f2fde38b14610ab4578063f637434214610add578063f8b45b0514610b085761029e565b8063c876d0b91461091f578063c8c8ebe41461094a578063d85ba06314610975578063da641921146109a0578063dd62ed3e146109cb578063e2f4560514610a085761029e565b8063a9059cbb11610113578063a9059cbb146107fd578063b20414111461083a578063b62496f514610865578063bbc0c742146108a2578063c0246668146108cd578063c17b5b8c146108f65761029e565b80638a8c523c146106ff5780638da5cb5b14610716578063921369131461074157806395d89b411461076c5780639a7a23d614610797578063a457c2d7146107c05761029e565b806349bd5a5e116101fe578063715018a6116101b7578063715018a614610615578063751039fc1461062c5780637571336a1461065757806375f0a874146106805780637bce5a04146106ab5780638095d564146106d65761029e565b806349bd5a5e146104ef5780634a62bb651461051a5780634fbee193146105455780636a486a8e146105825780636ddd1713146105ad57806370a08231146105d85761029e565b80631a8145bb116102505780631a8145bb146103c95780631f3fed8f146103f457806323b872dd1461041f57806327c8f8351461045c578063313ce5671461048757806339509351146104b25761029e565b806306fdde03146102a3578063095ea7b3146102ce57806310d5de531461030b5780631694505e1461034857806318160ddd1461037357806318a94cf11461039e5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b33565b6040516102c59190613709565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906137c4565b610bc5565b604051610302919061381f565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d919061383a565b610be3565b60405161033f919061381f565b60405180910390f35b34801561035457600080fd5b5061035d610c03565b60405161036a91906138c6565b60405180910390f35b34801561037f57600080fd5b50610388610c27565b60405161039591906138f0565b60405180910390f35b3480156103aa57600080fd5b506103b3610c31565b6040516103c091906138f0565b60405180910390f35b3480156103d557600080fd5b506103de610c37565b6040516103eb91906138f0565b60405180910390f35b34801561040057600080fd5b50610409610c3d565b60405161041691906138f0565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061390b565b610c43565b604051610453919061381f565b60405180910390f35b34801561046857600080fd5b50610471610d1c565b60405161047e919061396d565b60405180910390f35b34801561049357600080fd5b5061049c610d22565b6040516104a991906139a4565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906137c4565b610d2b565b6040516104e6919061381f565b60405180910390f35b3480156104fb57600080fd5b50610504610dde565b604051610511919061396d565b60405180910390f35b34801561052657600080fd5b5061052f610e02565b60405161053c919061381f565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061383a565b610e15565b604051610579919061381f565b60405180910390f35b34801561058e57600080fd5b50610597610e6b565b6040516105a491906138f0565b60405180910390f35b3480156105b957600080fd5b506105c2610e71565b6040516105cf919061381f565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa919061383a565b610e84565b60405161060c91906138f0565b60405180910390f35b34801561062157600080fd5b5061062a610ecc565b005b34801561063857600080fd5b50610641611024565b60405161064e919061381f565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906139eb565b6110fa565b005b34801561068c57600080fd5b506106956111ec565b6040516106a2919061396d565b60405180910390f35b3480156106b757600080fd5b506106c0611212565b6040516106cd91906138f0565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613a2b565b611218565b005b34801561070b57600080fd5b50610714611332565b005b34801561072257600080fd5b5061072b611401565b604051610738919061396d565b60405180910390f35b34801561074d57600080fd5b5061075661142b565b60405161076391906138f0565b60405180910390f35b34801561077857600080fd5b50610781611431565b60405161078e9190613709565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b991906139eb565b6114c3565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906137c4565b6115f6565b6040516107f4919061381f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906137c4565b6116c3565b604051610831919061381f565b60405180910390f35b34801561084657600080fd5b5061084f6116e1565b60405161085c91906138f0565b60405180910390f35b34801561087157600080fd5b5061088c6004803603810190610887919061383a565b6116e7565b604051610899919061381f565b60405180910390f35b3480156108ae57600080fd5b506108b7611707565b6040516108c4919061381f565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef91906139eb565b61171a565b005b34801561090257600080fd5b5061091d60048036038101906109189190613a2b565b61185a565b005b34801561092b57600080fd5b50610934611974565b604051610941919061381f565b60405180910390f35b34801561095657600080fd5b5061095f611987565b60405161096c91906138f0565b60405180910390f35b34801561098157600080fd5b5061098a61198d565b60405161099791906138f0565b60405180910390f35b3480156109ac57600080fd5b506109b5611993565b6040516109c2919061396d565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190613a7e565b6119b9565b6040516109ff91906138f0565b60405180910390f35b348015610a1457600080fd5b50610a1d611a40565b604051610a2a91906138f0565b60405180910390f35b348015610a3f57600080fd5b50610a48611a46565b604051610a55919061381f565b60405180910390f35b348015610a6a57600080fd5b50610a73611b01565b604051610a8091906138f0565b60405180910390f35b348015610a9557600080fd5b50610a9e611b07565b604051610aab91906138f0565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad6919061383a565b611b0d565b005b348015610ae957600080fd5b50610af2611cd3565b604051610aff91906138f0565b60405180910390f35b348015610b1457600080fd5b50610b1d611cd9565b604051610b2a91906138f0565b60405180910390f35b606060038054610b4290613aed565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e90613aed565b8015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b5050505050905090565b6000610bd9610bd2611d3d565b8484611d45565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60175481565b60165481565b6000610c50848484611f0e565b610d1184610c5c611d3d565b610d0c856040518060600160405280602881526020016147c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc2611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b600190509392505050565b61dead81565b60006012905090565b6000610dd4610d38611d3d565b84610dcf8560016000610d49611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b611d45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed4611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061102e611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490613b6a565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001905090565b611102611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613b6a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611220611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613b6a565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546112d79190613bb9565b6112e19190613bb9565b600e819055506006600e54111561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613c5b565b60405180910390fd5b505050565b61133a611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613b6a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b60606004805461144090613aed565b80601f016020809104026020016040519081016040528092919081815260200182805461146c90613aed565b80156114b95780601f1061148e576101008083540402835291602001916114b9565b820191906000526020600020905b81548152906001019060200180831161149c57829003601f168201915b5050505050905090565b6114cb611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613b6a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613ced565b60405180910390fd5b6115f28282612bc4565b5050565b60006116b9611603611d3d565b846116b4856040518060600160405280602581526020016147e9602591396001600061162d611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b6001905092915050565b60006116d76116d0611d3d565b8484611f0e565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611722611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a890613b6a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161184e919061381f565b60405180910390a25050565b611862611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613b6a565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546119199190613bb9565b6119239190613bb9565b6012819055506064601254111561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613d59565b60405180910390fd5b505050565b600d60009054906101000a900460ff1681565b60085481565b600e5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611a50611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613b6a565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60185481565b60105481565b611b15611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a90613deb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b6000808284611cee9190613bb9565b905083811015611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613e57565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90613ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90613f7b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0191906138f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f749061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe39061409f565b60405180910390fd5b600081036120055761200083836000612c65565b612b5b565b600b60009054906101000a900460ff161561268357612022611401565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120905750612060611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120c95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612103575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561211c5750600560149054906101000a900460ff16155b1561268257600b60019054906101000a900460ff1661221657601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121d65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061410b565b60405180910390fd5b5b600d60009054906101000a900460ff16156123de57612233611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122ba57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561231257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123dd5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f906141c3565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124815750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124e357600a5461249283610e84565b8261249d9190613bb9565b11156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d59061422f565b60405180910390fd5b612681565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125865750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125d5576008548111156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c7906142c1565b60405180910390fd5b612680565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661267f57600a5461263283610e84565b8261263d9190613bb9565b111561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061422f565b60405180910390fd5b5b5b5b5b5b600061268e30610e84565b9050600060095482101590508080156126b35750600b60029054906101000a900460ff165b80156126cc5750600560149054906101000a900460ff16155b80156127225750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127785750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127ce5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612812576001600560146101000a81548160ff0219169083151502179055506127f6612ef8565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128c85750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128d257600090505b60008115612b4b57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561293557506000601254115b15612a02576129626064612954601254886131dc90919063ffffffff16565b61325690919063ffffffff16565b90506012546014548261297591906142e1565b61297f919061436a565b601760008282546129909190613bb9565b92505081905550601254601554826129a891906142e1565b6129b2919061436a565b601860008282546129c39190613bb9565b92505081905550601254601354826129db91906142e1565b6129e5919061436a565b601660008282546129f69190613bb9565b92505081905550612b27565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a5d57506000600e54115b15612b2657612a8a6064612a7c600e54886131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600e5460105482612a9d91906142e1565b612aa7919061436a565b60176000828254612ab89190613bb9565b92505081905550600e5460115482612ad091906142e1565b612ada919061436a565b60186000828254612aeb9190613bb9565b92505081905550600e54600f5482612b0391906142e1565b612b0d919061436a565b60166000828254612b1e9190613bb9565b925050819055505b5b6000811115612b3c57612b3b873083612c65565b5b8085612b48919061439b565b94505b612b56878787612c65565b505050505b505050565b6000838311158290612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f9190613709565b60405180910390fd5b5060008385612bb7919061439b565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb9061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a9061409f565b60405180910390fd5b612d4e8383836132a0565b612db98160405180606001604052806026815260200161479b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612eeb91906138f0565b60405180910390a3505050565b6000612f0330610e84565b90506000601854601654601754612f1a9190613bb9565b612f249190613bb9565b90506000821480612f355750600081145b15612f415750506131da565b600a600954612f5091906142e1565b8210612f6857600a600954612f6591906142e1565b91505b600060028260175485612f7b91906142e1565b612f85919061436a565b612f8f919061436a565b90506000612fa682856132a590919063ffffffff16565b90506000479050612fb6826132ef565b6000612fcb82476132a590919063ffffffff16565b90506000612ff686612fe8601654856131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600061302187613013601854866131dc90919063ffffffff16565b61325690919063ffffffff16565b90506000818385613032919061439b565b61303c919061439b565b90506000601781905550600060168190555060006018819055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161309e90614400565b60006040518083038185875af1925050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b505090506000881180156130f45750600082115b1561314157613103888361352c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161313893929190614415565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318790614400565b60006040518083038185875af1925050503d80600081146131c4576040519150601f19603f3d011682016040523d82523d6000602084013e6131c9565b606091505b505080915050505050505050505050505b565b60008083036131ee5760009050613250565b600082846131fc91906142e1565b905082848261320b919061436a565b1461324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906144be565b60405180910390fd5b809150505b92915050565b600061329883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061360d565b905092915050565b505050565b60006132e783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b60565b905092915050565b6000600267ffffffffffffffff81111561330c5761330b6144de565b5b60405190808252806020026020018201604052801561333a5781602001602082028036833780820191505090505b50905030816000815181106133525761335161450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190614551565b8160018151811061342f5761342e61450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613494307f000000000000000000000000000000000000000000000000000000000000000084611d45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134f6959493929190614677565b600060405180830381600087803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b505050505050565b613557307f000000000000000000000000000000000000000000000000000000000000000084611d45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135a1611401565b426040518863ffffffff1660e01b81526004016135c3969594939291906146d1565b60606040518083038185885af11580156135e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136069190614747565b5050505050565b60008083118290613654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364b9190613709565b60405180910390fd5b5060008385613663919061436a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136aa57808201518184015260208101905061368f565b838111156136b9576000848401525b50505050565b6000601f19601f8301169050919050565b60006136db82613670565b6136e5818561367b565b93506136f581856020860161368c565b6136fe816136bf565b840191505092915050565b6000602082019050818103600083015261372381846136d0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061375b82613730565b9050919050565b61376b81613750565b811461377657600080fd5b50565b60008135905061378881613762565b92915050565b6000819050919050565b6137a18161378e565b81146137ac57600080fd5b50565b6000813590506137be81613798565b92915050565b600080604083850312156137db576137da61372b565b5b60006137e985828601613779565b92505060206137fa858286016137af565b9150509250929050565b60008115159050919050565b61381981613804565b82525050565b60006020820190506138346000830184613810565b92915050565b6000602082840312156138505761384f61372b565b5b600061385e84828501613779565b91505092915050565b6000819050919050565b600061388c61388761388284613730565b613867565b613730565b9050919050565b600061389e82613871565b9050919050565b60006138b082613893565b9050919050565b6138c0816138a5565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6138ea8161378e565b82525050565b600060208201905061390560008301846138e1565b92915050565b6000806000606084860312156139245761392361372b565b5b600061393286828701613779565b935050602061394386828701613779565b9250506040613954868287016137af565b9150509250925092565b61396781613750565b82525050565b6000602082019050613982600083018461395e565b92915050565b600060ff82169050919050565b61399e81613988565b82525050565b60006020820190506139b96000830184613995565b92915050565b6139c881613804565b81146139d357600080fd5b50565b6000813590506139e5816139bf565b92915050565b60008060408385031215613a0257613a0161372b565b5b6000613a1085828601613779565b9250506020613a21858286016139d6565b9150509250929050565b600080600060608486031215613a4457613a4361372b565b5b6000613a52868287016137af565b9350506020613a63868287016137af565b9250506040613a74868287016137af565b9150509250925092565b60008060408385031215613a9557613a9461372b565b5b6000613aa385828601613779565b9250506020613ab485828601613779565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b0557607f821691505b602082108103613b1857613b17613abe565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5460208361367b565b9150613b5f82613b1e565b602082019050919050565b60006020820190508181036000830152613b8381613b47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc48261378e565b9150613bcf8361378e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0457613c03613b8a565b5b828201905092915050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b6000613c45601c8361367b565b9150613c5082613c0f565b602082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cd760398361367b565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f4d757374206b65657020666565732061742031303025206f72206c6573730000600082015250565b6000613d43601e8361367b565b9150613d4e82613d0d565b602082019050919050565b60006020820190508181036000830152613d7281613d36565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613dd560268361367b565b9150613de082613d79565b604082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e41601b8361367b565b9150613e4c82613e0b565b602082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ed360248361367b565b9150613ede82613e77565b604082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f6560228361367b565b9150613f7082613f09565b604082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ff760258361367b565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061408960238361367b565b91506140948261402d565b604082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140f560168361367b565b9150614100826140bf565b602082019050919050565b60006020820190508181036000830152614124816140e8565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141ad60498361367b565b91506141b88261412b565b606082019050919050565b600060208201905081810360008301526141dc816141a0565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614219601b8361367b565b9150614224826141e3565b602082019050919050565b600060208201905081810360008301526142488161420c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142ab60368361367b565b91506142b68261424f565b604082019050919050565b600060208201905081810360008301526142da8161429e565b9050919050565b60006142ec8261378e565b91506142f78361378e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143305761432f613b8a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143758261378e565b91506143808361378e565b9250826143905761438f61433b565b5b828204905092915050565b60006143a68261378e565b91506143b18361378e565b9250828210156143c4576143c3613b8a565b5b828203905092915050565b600081905092915050565b50565b60006143ea6000836143cf565b91506143f5826143da565b600082019050919050565b600061440b826143dd565b9150819050919050565b600060608201905061442a60008301866138e1565b61443760208301856138e1565b61444460408301846138e1565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144a860218361367b565b91506144b38261444c565b604082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061454b81613762565b92915050565b6000602082840312156145675761456661372b565b5b60006145758482850161453c565b91505092915050565b6000819050919050565b60006145a361459e6145998461457e565b613867565b61378e565b9050919050565b6145b381614588565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145ee81613750565b82525050565b600061460083836145e5565b60208301905092915050565b6000602082019050919050565b6000614624826145b9565b61462e81856145c4565b9350614639836145d5565b8060005b8381101561466a57815161465188826145f4565b975061465c8361460c565b92505060018101905061463d565b5085935050505092915050565b600060a08201905061468c60008301886138e1565b61469960208301876145aa565b81810360408301526146ab8186614619565b90506146ba606083018561395e565b6146c760808301846138e1565b9695505050505050565b600060c0820190506146e6600083018961395e565b6146f360208301886138e1565b61470060408301876145aa565b61470d60608301866145aa565b61471a608083018561395e565b61472760a08301846138e1565b979650505050505050565b60008151905061474181613798565b92915050565b6000806000606084860312156147605761475f61372b565b5b600061476e86828701614732565b935050602061477f86828701614732565b925050604061479086828701614732565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207fcecff99f70ea46ddc80a024fbe12383768dec7a310ca324a9e1af23e363f2564736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80638a8c523c1161015a578063c876d0b9116100c1578063e884f2601161007a578063e884f26014610a33578063ef8700e514610a5e578063f11a24d314610a89578063f2fde38b14610ab4578063f637434214610add578063f8b45b0514610b085761029e565b8063c876d0b91461091f578063c8c8ebe41461094a578063d85ba06314610975578063da641921146109a0578063dd62ed3e146109cb578063e2f4560514610a085761029e565b8063a9059cbb11610113578063a9059cbb146107fd578063b20414111461083a578063b62496f514610865578063bbc0c742146108a2578063c0246668146108cd578063c17b5b8c146108f65761029e565b80638a8c523c146106ff5780638da5cb5b14610716578063921369131461074157806395d89b411461076c5780639a7a23d614610797578063a457c2d7146107c05761029e565b806349bd5a5e116101fe578063715018a6116101b7578063715018a614610615578063751039fc1461062c5780637571336a1461065757806375f0a874146106805780637bce5a04146106ab5780638095d564146106d65761029e565b806349bd5a5e146104ef5780634a62bb651461051a5780634fbee193146105455780636a486a8e146105825780636ddd1713146105ad57806370a08231146105d85761029e565b80631a8145bb116102505780631a8145bb146103c95780631f3fed8f146103f457806323b872dd1461041f57806327c8f8351461045c578063313ce5671461048757806339509351146104b25761029e565b806306fdde03146102a3578063095ea7b3146102ce57806310d5de531461030b5780631694505e1461034857806318160ddd1461037357806318a94cf11461039e5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b33565b6040516102c59190613709565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906137c4565b610bc5565b604051610302919061381f565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d919061383a565b610be3565b60405161033f919061381f565b60405180910390f35b34801561035457600080fd5b5061035d610c03565b60405161036a91906138c6565b60405180910390f35b34801561037f57600080fd5b50610388610c27565b60405161039591906138f0565b60405180910390f35b3480156103aa57600080fd5b506103b3610c31565b6040516103c091906138f0565b60405180910390f35b3480156103d557600080fd5b506103de610c37565b6040516103eb91906138f0565b60405180910390f35b34801561040057600080fd5b50610409610c3d565b60405161041691906138f0565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061390b565b610c43565b604051610453919061381f565b60405180910390f35b34801561046857600080fd5b50610471610d1c565b60405161047e919061396d565b60405180910390f35b34801561049357600080fd5b5061049c610d22565b6040516104a991906139a4565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906137c4565b610d2b565b6040516104e6919061381f565b60405180910390f35b3480156104fb57600080fd5b50610504610dde565b604051610511919061396d565b60405180910390f35b34801561052657600080fd5b5061052f610e02565b60405161053c919061381f565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061383a565b610e15565b604051610579919061381f565b60405180910390f35b34801561058e57600080fd5b50610597610e6b565b6040516105a491906138f0565b60405180910390f35b3480156105b957600080fd5b506105c2610e71565b6040516105cf919061381f565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa919061383a565b610e84565b60405161060c91906138f0565b60405180910390f35b34801561062157600080fd5b5061062a610ecc565b005b34801561063857600080fd5b50610641611024565b60405161064e919061381f565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906139eb565b6110fa565b005b34801561068c57600080fd5b506106956111ec565b6040516106a2919061396d565b60405180910390f35b3480156106b757600080fd5b506106c0611212565b6040516106cd91906138f0565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613a2b565b611218565b005b34801561070b57600080fd5b50610714611332565b005b34801561072257600080fd5b5061072b611401565b604051610738919061396d565b60405180910390f35b34801561074d57600080fd5b5061075661142b565b60405161076391906138f0565b60405180910390f35b34801561077857600080fd5b50610781611431565b60405161078e9190613709565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b991906139eb565b6114c3565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906137c4565b6115f6565b6040516107f4919061381f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906137c4565b6116c3565b604051610831919061381f565b60405180910390f35b34801561084657600080fd5b5061084f6116e1565b60405161085c91906138f0565b60405180910390f35b34801561087157600080fd5b5061088c6004803603810190610887919061383a565b6116e7565b604051610899919061381f565b60405180910390f35b3480156108ae57600080fd5b506108b7611707565b6040516108c4919061381f565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef91906139eb565b61171a565b005b34801561090257600080fd5b5061091d60048036038101906109189190613a2b565b61185a565b005b34801561092b57600080fd5b50610934611974565b604051610941919061381f565b60405180910390f35b34801561095657600080fd5b5061095f611987565b60405161096c91906138f0565b60405180910390f35b34801561098157600080fd5b5061098a61198d565b60405161099791906138f0565b60405180910390f35b3480156109ac57600080fd5b506109b5611993565b6040516109c2919061396d565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190613a7e565b6119b9565b6040516109ff91906138f0565b60405180910390f35b348015610a1457600080fd5b50610a1d611a40565b604051610a2a91906138f0565b60405180910390f35b348015610a3f57600080fd5b50610a48611a46565b604051610a55919061381f565b60405180910390f35b348015610a6a57600080fd5b50610a73611b01565b604051610a8091906138f0565b60405180910390f35b348015610a9557600080fd5b50610a9e611b07565b604051610aab91906138f0565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad6919061383a565b611b0d565b005b348015610ae957600080fd5b50610af2611cd3565b604051610aff91906138f0565b60405180910390f35b348015610b1457600080fd5b50610b1d611cd9565b604051610b2a91906138f0565b60405180910390f35b606060038054610b4290613aed565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e90613aed565b8015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b5050505050905090565b6000610bd9610bd2611d3d565b8484611d45565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60175481565b60165481565b6000610c50848484611f0e565b610d1184610c5c611d3d565b610d0c856040518060600160405280602881526020016147c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc2611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b600190509392505050565b61dead81565b60006012905090565b6000610dd4610d38611d3d565b84610dcf8560016000610d49611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b611d45565b6001905092915050565b7f0000000000000000000000001564f3e86c469d3862c4dfb0f4fdf13ba083748081565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed4611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061102e611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490613b6a565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001905090565b611102611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613b6a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611220611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613b6a565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546112d79190613bb9565b6112e19190613bb9565b600e819055506006600e54111561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613c5b565b60405180910390fd5b505050565b61133a611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613b6a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b60606004805461144090613aed565b80601f016020809104026020016040519081016040528092919081815260200182805461146c90613aed565b80156114b95780601f1061148e576101008083540402835291602001916114b9565b820191906000526020600020905b81548152906001019060200180831161149c57829003601f168201915b5050505050905090565b6114cb611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613b6a565b60405180910390fd5b7f0000000000000000000000001564f3e86c469d3862c4dfb0f4fdf13ba083748073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613ced565b60405180910390fd5b6115f28282612bc4565b5050565b60006116b9611603611d3d565b846116b4856040518060600160405280602581526020016147e9602591396001600061162d611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b6001905092915050565b60006116d76116d0611d3d565b8484611f0e565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611722611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a890613b6a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161184e919061381f565b60405180910390a25050565b611862611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613b6a565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546119199190613bb9565b6119239190613bb9565b6012819055506064601254111561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613d59565b60405180910390fd5b505050565b600d60009054906101000a900460ff1681565b60085481565b600e5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611a50611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613b6a565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60185481565b60105481565b611b15611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a90613deb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b6000808284611cee9190613bb9565b905083811015611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613e57565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90613ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90613f7b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0191906138f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f749061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe39061409f565b60405180910390fd5b600081036120055761200083836000612c65565b612b5b565b600b60009054906101000a900460ff161561268357612022611401565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120905750612060611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120c95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612103575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561211c5750600560149054906101000a900460ff16155b1561268257600b60019054906101000a900460ff1661221657601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121d65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061410b565b60405180910390fd5b5b600d60009054906101000a900460ff16156123de57612233611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122ba57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561231257507f0000000000000000000000001564f3e86c469d3862c4dfb0f4fdf13ba083748073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123dd5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f906141c3565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124815750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124e357600a5461249283610e84565b8261249d9190613bb9565b11156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d59061422f565b60405180910390fd5b612681565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125865750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125d5576008548111156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c7906142c1565b60405180910390fd5b612680565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661267f57600a5461263283610e84565b8261263d9190613bb9565b111561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061422f565b60405180910390fd5b5b5b5b5b5b600061268e30610e84565b9050600060095482101590508080156126b35750600b60029054906101000a900460ff165b80156126cc5750600560149054906101000a900460ff16155b80156127225750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127785750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127ce5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612812576001600560146101000a81548160ff0219169083151502179055506127f6612ef8565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128c85750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128d257600090505b60008115612b4b57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561293557506000601254115b15612a02576129626064612954601254886131dc90919063ffffffff16565b61325690919063ffffffff16565b90506012546014548261297591906142e1565b61297f919061436a565b601760008282546129909190613bb9565b92505081905550601254601554826129a891906142e1565b6129b2919061436a565b601860008282546129c39190613bb9565b92505081905550601254601354826129db91906142e1565b6129e5919061436a565b601660008282546129f69190613bb9565b92505081905550612b27565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a5d57506000600e54115b15612b2657612a8a6064612a7c600e54886131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600e5460105482612a9d91906142e1565b612aa7919061436a565b60176000828254612ab89190613bb9565b92505081905550600e5460115482612ad091906142e1565b612ada919061436a565b60186000828254612aeb9190613bb9565b92505081905550600e54600f5482612b0391906142e1565b612b0d919061436a565b60166000828254612b1e9190613bb9565b925050819055505b5b6000811115612b3c57612b3b873083612c65565b5b8085612b48919061439b565b94505b612b56878787612c65565b505050505b505050565b6000838311158290612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f9190613709565b60405180910390fd5b5060008385612bb7919061439b565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb9061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a9061409f565b60405180910390fd5b612d4e8383836132a0565b612db98160405180606001604052806026815260200161479b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612eeb91906138f0565b60405180910390a3505050565b6000612f0330610e84565b90506000601854601654601754612f1a9190613bb9565b612f249190613bb9565b90506000821480612f355750600081145b15612f415750506131da565b600a600954612f5091906142e1565b8210612f6857600a600954612f6591906142e1565b91505b600060028260175485612f7b91906142e1565b612f85919061436a565b612f8f919061436a565b90506000612fa682856132a590919063ffffffff16565b90506000479050612fb6826132ef565b6000612fcb82476132a590919063ffffffff16565b90506000612ff686612fe8601654856131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600061302187613013601854866131dc90919063ffffffff16565b61325690919063ffffffff16565b90506000818385613032919061439b565b61303c919061439b565b90506000601781905550600060168190555060006018819055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161309e90614400565b60006040518083038185875af1925050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b505090506000881180156130f45750600082115b1561314157613103888361352c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161313893929190614415565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318790614400565b60006040518083038185875af1925050503d80600081146131c4576040519150601f19603f3d011682016040523d82523d6000602084013e6131c9565b606091505b505080915050505050505050505050505b565b60008083036131ee5760009050613250565b600082846131fc91906142e1565b905082848261320b919061436a565b1461324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906144be565b60405180910390fd5b809150505b92915050565b600061329883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061360d565b905092915050565b505050565b60006132e783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b60565b905092915050565b6000600267ffffffffffffffff81111561330c5761330b6144de565b5b60405190808252806020026020018201604052801561333a5781602001602082028036833780820191505090505b50905030816000815181106133525761335161450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190614551565b8160018151811061342f5761342e61450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613494307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134f6959493929190614677565b600060405180830381600087803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b505050505050565b613557307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135a1611401565b426040518863ffffffff1660e01b81526004016135c3969594939291906146d1565b60606040518083038185885af11580156135e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136069190614747565b5050505050565b60008083118290613654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364b9190613709565b60405180910390fd5b5060008385613663919061436a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136aa57808201518184015260208101905061368f565b838111156136b9576000848401525b50505050565b6000601f19601f8301169050919050565b60006136db82613670565b6136e5818561367b565b93506136f581856020860161368c565b6136fe816136bf565b840191505092915050565b6000602082019050818103600083015261372381846136d0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061375b82613730565b9050919050565b61376b81613750565b811461377657600080fd5b50565b60008135905061378881613762565b92915050565b6000819050919050565b6137a18161378e565b81146137ac57600080fd5b50565b6000813590506137be81613798565b92915050565b600080604083850312156137db576137da61372b565b5b60006137e985828601613779565b92505060206137fa858286016137af565b9150509250929050565b60008115159050919050565b61381981613804565b82525050565b60006020820190506138346000830184613810565b92915050565b6000602082840312156138505761384f61372b565b5b600061385e84828501613779565b91505092915050565b6000819050919050565b600061388c61388761388284613730565b613867565b613730565b9050919050565b600061389e82613871565b9050919050565b60006138b082613893565b9050919050565b6138c0816138a5565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6138ea8161378e565b82525050565b600060208201905061390560008301846138e1565b92915050565b6000806000606084860312156139245761392361372b565b5b600061393286828701613779565b935050602061394386828701613779565b9250506040613954868287016137af565b9150509250925092565b61396781613750565b82525050565b6000602082019050613982600083018461395e565b92915050565b600060ff82169050919050565b61399e81613988565b82525050565b60006020820190506139b96000830184613995565b92915050565b6139c881613804565b81146139d357600080fd5b50565b6000813590506139e5816139bf565b92915050565b60008060408385031215613a0257613a0161372b565b5b6000613a1085828601613779565b9250506020613a21858286016139d6565b9150509250929050565b600080600060608486031215613a4457613a4361372b565b5b6000613a52868287016137af565b9350506020613a63868287016137af565b9250506040613a74868287016137af565b9150509250925092565b60008060408385031215613a9557613a9461372b565b5b6000613aa385828601613779565b9250506020613ab485828601613779565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b0557607f821691505b602082108103613b1857613b17613abe565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5460208361367b565b9150613b5f82613b1e565b602082019050919050565b60006020820190508181036000830152613b8381613b47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc48261378e565b9150613bcf8361378e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0457613c03613b8a565b5b828201905092915050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b6000613c45601c8361367b565b9150613c5082613c0f565b602082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cd760398361367b565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f4d757374206b65657020666565732061742031303025206f72206c6573730000600082015250565b6000613d43601e8361367b565b9150613d4e82613d0d565b602082019050919050565b60006020820190508181036000830152613d7281613d36565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613dd560268361367b565b9150613de082613d79565b604082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e41601b8361367b565b9150613e4c82613e0b565b602082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ed360248361367b565b9150613ede82613e77565b604082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f6560228361367b565b9150613f7082613f09565b604082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ff760258361367b565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061408960238361367b565b91506140948261402d565b604082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140f560168361367b565b9150614100826140bf565b602082019050919050565b60006020820190508181036000830152614124816140e8565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141ad60498361367b565b91506141b88261412b565b606082019050919050565b600060208201905081810360008301526141dc816141a0565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614219601b8361367b565b9150614224826141e3565b602082019050919050565b600060208201905081810360008301526142488161420c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142ab60368361367b565b91506142b68261424f565b604082019050919050565b600060208201905081810360008301526142da8161429e565b9050919050565b60006142ec8261378e565b91506142f78361378e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143305761432f613b8a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143758261378e565b91506143808361378e565b9250826143905761438f61433b565b5b828204905092915050565b60006143a68261378e565b91506143b18361378e565b9250828210156143c4576143c3613b8a565b5b828203905092915050565b600081905092915050565b50565b60006143ea6000836143cf565b91506143f5826143da565b600082019050919050565b600061440b826143dd565b9150819050919050565b600060608201905061442a60008301866138e1565b61443760208301856138e1565b61444460408301846138e1565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144a860218361367b565b91506144b38261444c565b604082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061454b81613762565b92915050565b6000602082840312156145675761456661372b565b5b60006145758482850161453c565b91505092915050565b6000819050919050565b60006145a361459e6145998461457e565b613867565b61378e565b9050919050565b6145b381614588565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145ee81613750565b82525050565b600061460083836145e5565b60208301905092915050565b6000602082019050919050565b6000614624826145b9565b61462e81856145c4565b9350614639836145d5565b8060005b8381101561466a57815161465188826145f4565b975061465c8361460c565b92505060018101905061463d565b5085935050505092915050565b600060a08201905061468c60008301886138e1565b61469960208301876145aa565b81810360408301526146ab8186614619565b90506146ba606083018561395e565b6146c760808301846138e1565b9695505050505050565b600060c0820190506146e6600083018961395e565b6146f360208301886138e1565b61470060408301876145aa565b61470d60608301866145aa565b61471a608083018561395e565b61472760a08301846138e1565b979650505050505050565b60008151905061474181613798565b92915050565b6000806000606084860312156147605761475f61372b565b5b600061476e86828701614732565b935050602061477f86828701614732565b925050604061479086828701614732565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207fcecff99f70ea46ddc80a024fbe12383768dec7a310ca324a9e1af23e363f2564736f6c634300080f0033

Deployed Bytecode Sourcemap

17363:12552:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5086:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6000:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18568:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17441:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5407:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18342:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18424;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18384;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6177:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17544:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5306:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6540:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17499:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17839:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23514:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18231:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17919:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5523:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10933:148;;;;;;;;;;;;;:::i;:::-;;21565:159;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21878:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17636:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22034:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21445:112;;;;;;;;;;;;;:::i;:::-;;10719:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18266:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5194:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23060:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6766:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5658:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18190:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18639:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17879:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22870:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22450:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18034:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17724:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18082:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17673:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5841:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17766:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21732:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18464:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18153:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11089:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18304:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17806:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5086:100;5140:13;5173:5;5166:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5086:100;:::o;6000:169::-;6083:4;6100:39;6109:12;:10;:12::i;:::-;6123:7;6132:6;6100:8;:39::i;:::-;6157:4;6150:11;;6000:169;;;;:::o;18568:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17441:51::-;;;:::o;5407:108::-;5468:7;5495:12;;5488:19;;5407:108;:::o;18342:33::-;;;;:::o;18424:::-;;;;:::o;18384:::-;;;;:::o;6177:355::-;6317:4;6334:36;6344:6;6352:9;6363:6;6334:9;:36::i;:::-;6381:121;6390:6;6398:12;:10;:12::i;:::-;6412:89;6450:6;6412:89;;;;;;;;;;;;;;;;;:11;:19;6424:6;6412:19;;;;;;;;;;;;;;;:33;6432:12;:10;:12::i;:::-;6412:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6381:8;:121::i;:::-;6520:4;6513:11;;6177:355;;;;;:::o;17544:53::-;17590:6;17544:53;:::o;5306:93::-;5364:5;5389:2;5382:9;;5306:93;:::o;6540:218::-;6628:4;6645:83;6654:12;:10;:12::i;:::-;6668:7;6677:50;6716:10;6677:11;:25;6689:12;:10;:12::i;:::-;6677:25;;;;;;;;;;;;;;;:34;6703:7;6677:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6645:8;:83::i;:::-;6746:4;6739:11;;6540:218;;;;:::o;17499:38::-;;;:::o;17839:33::-;;;;;;;;;;;;;:::o;23514:127::-;23581:4;23605:19;:28;23625:7;23605:28;;;;;;;;;;;;;;;;;;;;;;;;;23598:35;;23514:127;;;:::o;18231:28::-;;;;:::o;17919:31::-;;;;;;;;;;;;;:::o;5523:127::-;5597:7;5624:9;:18;5634:7;5624:18;;;;;;;;;;;;;;;;5617:25;;5523:127;;;:::o;10933:148::-;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11040:1:::1;11003:40;;11024:6;;;;;;;;;;;11003:40;;;;;;;;;;;;11071:1;11054:6;;:19;;;;;;;;;;;;;;;;;;10933:148::o:0;21565:159::-;21617:4;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21650:5:::1;21633:14;;:22;;;;;;;;;;;;;;;;;;21689:5;21666:20;;:28;;;;;;;;;;;;;;;;;;21712:4;21705:11;;21565:159:::0;:::o;21878:144::-;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22010:4:::1;21968:31;:39;22000:6;21968:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21878:144:::0;;:::o;17636:30::-;;;;;;;;;;;;;:::o;18116:::-;;;;:::o;22034:404::-;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22181:13:::1;22163:15;:31;;;;22223:13;22205:15;:31;;;;22267:15;22247:17;:35;;;;22344:17;;22326:15;;22308;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;22293:12;:68;;;;22396:1;22380:12;;:17;;22372:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;22034:404:::0;;;:::o;21445:112::-;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21516:4:::1;21500:13;;:20;;;;;;;;;;;;;;;;;;21545:4;21531:11;;:18;;;;;;;;;;;;;;;;;;21445:112::o:0;10719:79::-;10757:7;10784:6;;;;;;;;;;;10777:13;;10719:79;:::o;18266:31::-;;;;:::o;5194:104::-;5250:13;5283:7;5276:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5194:104;:::o;23060:246::-;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23169:13:::1;23161:21;;:4;:21;;::::0;23153:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23257:41;23286:4;23292:5;23257:28;:41::i;:::-;23060:246:::0;;:::o;6766:269::-;6859:4;6876:129;6885:12;:10;:12::i;:::-;6899:7;6908:96;6947:15;6908:96;;;;;;;;;;;;;;;;;:11;:25;6920:12;:10;:12::i;:::-;6908:25;;;;;;;;;;;;;;;:34;6934:7;6908:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6876:8;:129::i;:::-;7023:4;7016:11;;6766:269;;;;:::o;5658:175::-;5744:4;5761:42;5771:12;:10;:12::i;:::-;5785:9;5796:6;5761:9;:42::i;:::-;5821:4;5814:11;;5658:175;;;;:::o;18190:32::-;;;;:::o;18639:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17879:33::-;;;;;;;;;;;;;:::o;22870:182::-;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22986:8:::1;22955:19;:28;22975:7;22955:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23026:7;23010:34;;;23035:8;23010:34;;;;;;:::i;:::-;;;;;;;;22870:182:::0;;:::o;22450:412::-;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22594:13:::1;22575:16;:32;;;;22637:13;22618:16;:32;;;;22682:15;22661:18;:36;;;;22762:18;;22743:16;;22724;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;22708:13;:72;;;;22816:3;22799:13;;:20;;22791:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22450:412:::0;;;:::o;18034:39::-;;;;;;;;;;;;;:::o;17724:35::-;;;;:::o;18082:27::-;;;;:::o;17673:38::-;;;;;;;;;;;;;:::o;5841:151::-;5930:7;5957:11;:18;5969:5;5957:18;;;;;;;;;;;;;;;:27;5976:7;5957:27;;;;;;;;;;;;;;;;5950:34;;5841:151;;;;:::o;17766:33::-;;;;:::o;21732:134::-;21792:4;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21831:5:::1;21808:20;;:28;;;;;;;;;;;;;;;;;;21854:4;21847:11;;21732:134:::0;:::o;18464:35::-;;;;:::o;18153:30::-;;;;:::o;11089:244::-;10856:12;:10;:12::i;:::-;10846:22;;:6;;;;;;;;;;;:22;;;10838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11198:1:::1;11178:22;;:8;:22;;::::0;11170:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11288:8;11259:38;;11280:6;;;;;;;;;;;11259:38;;;;;;;;;;;;11317:8;11308:6;;:17;;;;;;;;;;;;;;;;;;11089:244:::0;:::o;18304:31::-;;;;:::o;17806:24::-;;;;:::o;8968:179::-;9026:7;9046:9;9062:1;9058;:5;;;;:::i;:::-;9046:17;;9087:1;9082;:6;;9074:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9138:1;9131:8;;;8968:179;;;;:::o;357:98::-;410:7;437:10;430:17;;357:98;:::o;8424:378::-;8577:1;8560:19;;:5;:19;;;8552:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8658:1;8639:21;;:7;:21;;;8631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8740:6;8710:11;:18;8722:5;8710:18;;;;;;;;;;;;;;;:27;8729:7;8710:27;;;;;;;;;;;;;;;:36;;;;8778:7;8762:32;;8771:5;8762:32;;;8787:6;8762:32;;;;;;:::i;:::-;;;;;;;;8424:378;;;:::o;23653:3714::-;23801:1;23785:18;;:4;:18;;;23777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23878:1;23864:16;;:2;:16;;;23856:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23955:1;23945:6;:11;23942:92;;23973:28;23989:4;23995:2;23999:1;23973:15;:28::i;:::-;24016:7;;23942:92;24057:14;;;;;;;;;;;24054:1579;;;24117:7;:5;:7::i;:::-;24109:15;;:4;:15;;;;:50;;;;;24152:7;:5;:7::i;:::-;24146:13;;:2;:13;;;;24109:50;:88;;;;;24195:1;24181:16;;:2;:16;;;;24109:88;:130;;;;;24232:6;24218:21;;:2;:21;;;;24109:130;:160;;;;;24261:8;;;;;;;;;;;24260:9;24109:160;24087:1535;;;24308:13;;;;;;;;;;;24304:148;;24353:19;:25;24373:4;24353:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24382:19;:23;24402:2;24382:23;;;;;;;;;;;;;;;;;;;;;;;;;24353:52;24345:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24304:148;24476:20;;;;;;;;;;;24472:423;;;24530:7;:5;:7::i;:::-;24524:13;;:2;:13;;;;:47;;;;;24555:15;24541:30;;:2;:30;;;;24524:47;:79;;;;;24589:13;24575:28;;:2;:28;;;;24524:79;24520:356;;;24681:12;24639:28;:39;24668:9;24639:39;;;;;;;;;;;;;;;;:54;24631:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24840:12;24798:28;:39;24827:9;24798:39;;;;;;;;;;;;;;;:54;;;;24520:356;24472:423;24964:25;:31;24990:4;24964:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25000:31;:35;25032:2;25000:35;;;;;;;;;;;;;;;;;;;;;;;;;24999:36;24964:71;24960:647;;;25094:9;;25077:13;25087:2;25077:9;:13::i;:::-;25068:6;:22;;;;:::i;:::-;:35;;25060:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24960:647;;;25212:25;:29;25238:2;25212:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25246:31;:37;25278:4;25246:37;;;;;;;;;;;;;;;;;;;;;;;;;25245:38;25212:71;25208:399;;;25326:20;;25316:6;:30;;25308:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25208:399;;;25452:31;:35;25484:2;25452:35;;;;;;;;;;;;;;;;;;;;;;;;;25448:159;;25546:9;;25529:13;25539:2;25529:9;:13::i;:::-;25520:6;:22;;;;:::i;:::-;:35;;25512:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25448:159;25208:399;24960:647;24087:1535;24054:1579;25647:28;25678:24;25696:4;25678:9;:24::i;:::-;25647:55;;25723:12;25762:18;;25738:20;:42;;25723:57;;25811:7;:35;;;;;25835:11;;;;;;;;;;;25811:35;:61;;;;;25864:8;;;;;;;;;;;25863:9;25811:61;:110;;;;;25890:25;:31;25916:4;25890:31;;;;;;;;;;;;;;;;;;;;;;;;;25889:32;25811:110;:153;;;;;25939:19;:25;25959:4;25939:25;;;;;;;;;;;;;;;;;;;;;;;;;25938:26;25811:153;:194;;;;;25982:19;:23;26002:2;25982:23;;;;;;;;;;;;;;;;;;;;;;;;;25981:24;25811:194;25793:338;;;26043:4;26032:8;;:15;;;;;;;;;;;;;;;;;;26076:10;:8;:10::i;:::-;26114:5;26103:8;;:16;;;;;;;;;;;;;;;;;;25793:338;26151:12;26167:8;;;;;;;;;;;26166:9;26151:24;;26191:19;:25;26211:4;26191:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26220:19;:23;26240:2;26220:23;;;;;;;;;;;;;;;;;;;;;;;;;26191:52;26188:99;;;26270:5;26260:15;;26188:99;26307:12;26337:7;26334:980;;;26378:25;:29;26404:2;26378:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26427:1;26411:13;;:17;26378:50;26374:771;;;26455:34;26485:3;26455:25;26466:13;;26455:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26448:41;;26556:13;;26537:16;;26530:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26508:18;;:61;;;;;;;:::i;:::-;;;;;;;;26640:13;;26619:18;;26612:4;:25;;;;:::i;:::-;:41;;;;:::i;:::-;26588:20;;:65;;;;;;;:::i;:::-;;;;;;;;26720:13;;26701:16;;26694:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26672:18;;:61;;;;;;;:::i;:::-;;;;;;;;26374:771;;;26785:25;:31;26811:4;26785:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26835:1;26820:12;;:16;26785:51;26782:363;;;26861:33;26890:3;26861:24;26872:12;;26861:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26854:40;;26957:12;;26939:15;;26932:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26910:18;;:59;;;;;;;:::i;:::-;;;;;;;;27039:12;;27019:17;;27012:4;:24;;;;:::i;:::-;:39;;;;:::i;:::-;26988:20;;:63;;;;;;;:::i;:::-;;;;;;;;27117:12;;27099:15;;27092:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27070:18;;:59;;;;;;;:::i;:::-;;;;;;;;26782:363;26374:771;27183:1;27176:4;:8;27173:93;;;27208:42;27224:4;27238;27245;27208:15;:42::i;:::-;27173:93;27298:4;27288:14;;;;;:::i;:::-;;;26334:980;27326:33;27342:4;27348:2;27352:6;27326:15;:33::i;:::-;23766:3601;;;;23653:3714;;;;:::o;9299:190::-;9385:7;9418:1;9413;:6;;9421:12;9405:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9445:9;9461:1;9457;:5;;;;:::i;:::-;9445:17;;9480:1;9473:8;;;9299:190;;;;;:::o;23318:188::-;23435:5;23401:25;:31;23427:4;23401:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23492:5;23458:40;;23486:4;23458:40;;;;;;;;;;;;23318:188;;:::o;7043:569::-;7201:1;7183:20;;:6;:20;;;7175:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7285:1;7264:23;;:9;:23;;;7256:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7338:47;7359:6;7367:9;7378:6;7338:20;:47::i;:::-;7416:71;7438:6;7416:71;;;;;;;;;;;;;;;;;:9;:17;7426:6;7416:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7396:9;:17;7406:6;7396:17;;;;;;;;;;;;;;;:91;;;;7521:32;7546:6;7521:9;:20;7531:9;7521:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7498:9;:20;7508:9;7498:20;;;;;;;;;;;;;;;:55;;;;7586:9;7569:35;;7578:6;7569:35;;;7597:6;7569:35;;;;;;:::i;:::-;;;;;;;;7043:569;;;:::o;28249:1663::-;28288:23;28314:24;28332:4;28314:9;:24::i;:::-;28288:50;;28349:25;28419:20;;28398:18;;28377;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;28349:90;;28482:1;28463:15;:20;:46;;;;28508:1;28487:17;:22;28463:46;28460:60;;;28512:7;;;;28460:60;28575:2;28554:18;;:23;;;;:::i;:::-;28535:15;:42;28532:114;;28632:2;28611:18;;:23;;;;:::i;:::-;28593:41;;28532:114;28666:23;28751:1;28731:17;28710:18;;28692:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28666:86;;28763:26;28792:36;28812:15;28792;:19;;:36;;;;:::i;:::-;28763:65;;28849:25;28877:21;28849:49;;28911:36;28928:18;28911:16;:36::i;:::-;28969:18;28990:44;29016:17;28990:21;:25;;:44;;;;:::i;:::-;28969:65;;29055:23;29081:57;29120:17;29081:34;29096:18;;29081:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;29055:83;;29149:25;29177:59;29218:17;29177:36;29192:20;;29177:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;29149:87;;29267:23;29324:17;29306:15;29293:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;29267:74;;29393:1;29372:18;:22;;;;29426:1;29405:18;:22;;;;29461:1;29438:20;:24;;;;29486:12;29511:23;;;;;;;;;;;29503:37;;29548:17;29503:67;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29485:85;;;29612:1;29594:15;:19;:42;;;;;29635:1;29617:15;:19;29594:42;29591:210;;;29652:46;29665:15;29682;29652:12;:46::i;:::-;29718:71;29733:18;29753:15;29770:18;;29718:71;;;;;;;;:::i;:::-;;;;;;;;29591:210;29842:15;;;;;;;;;;;29834:29;;29871:21;29834:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29821:76;;;;;28277:1635;;;;;;;;;;28249:1663;:::o;9497:246::-;9555:7;9584:1;9579;:6;9575:47;;9609:1;9602:8;;;;9575:47;9632:9;9648:1;9644;:5;;;;:::i;:::-;9632:17;;9677:1;9672;9668;:5;;;;:::i;:::-;:10;9660:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9734:1;9727:8;;;9497:246;;;;;:::o;9751:132::-;9809:7;9836:39;9840:1;9843;9836:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9829:46;;9751:132;;;;:::o;8810:125::-;;;;:::o;9155:136::-;9213:7;9240:43;9244:1;9247;9240:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9233:50;;9155:136;;;;:::o;27375:488::-;27443:21;27481:1;27467:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27443:40;;27512:4;27494;27499:1;27494:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27538:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27528:4;27533:1;27528:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27573:62;27590:4;27605:15;27623:11;27573:8;:62::i;:::-;27648:15;:66;;;27729:11;27755:1;27772:4;27799;27819:15;27648:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27430:433;27375:488;:::o;27875:366::-;27958:62;27975:4;27990:15;28008:11;27958:8;:62::i;:::-;28033:15;:31;;;28072:9;28105:4;28125:11;28151:1;28168;28185:7;:5;:7::i;:::-;28207:15;28033:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27875:366;;:::o;9891:189::-;9977:7;10009:1;10005;:5;10012:12;9997:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10036:9;10052:1;10048;:5;;;;:::i;:::-;10036:17;;10071:1;10064:8;;;9891:189;;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:468::-;6892:6;6900;6949:2;6937:9;6928:7;6924:23;6920:32;6917:119;;;6955:79;;:::i;:::-;6917:119;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7202:2;7228:50;7270:7;7261:6;7250:9;7246:22;7228:50;:::i;:::-;7218:60;;7173:115;6827:468;;;;;:::o;7301:619::-;7378:6;7386;7394;7443:2;7431:9;7422:7;7418:23;7414:32;7411:119;;;7449:79;;:::i;:::-;7411:119;7569:1;7594:53;7639:7;7630:6;7619:9;7615:22;7594:53;:::i;:::-;7584:63;;7540:117;7696:2;7722:53;7767:7;7758:6;7747:9;7743:22;7722:53;:::i;:::-;7712:63;;7667:118;7824:2;7850:53;7895:7;7886:6;7875:9;7871:22;7850:53;:::i;:::-;7840:63;;7795:118;7301:619;;;;;:::o;7926:474::-;7994:6;8002;8051:2;8039:9;8030:7;8026:23;8022:32;8019:119;;;8057:79;;:::i;:::-;8019:119;8177:1;8202:53;8247:7;8238:6;8227:9;8223:22;8202:53;:::i;:::-;8192:63;;8148:117;8304:2;8330:53;8375:7;8366:6;8355:9;8351:22;8330:53;:::i;:::-;8320:63;;8275:118;7926:474;;;;;:::o;8406:180::-;8454:77;8451:1;8444:88;8551:4;8548:1;8541:15;8575:4;8572:1;8565:15;8592:320;8636:6;8673:1;8667:4;8663:12;8653:22;;8720:1;8714:4;8710:12;8741:18;8731:81;;8797:4;8789:6;8785:17;8775:27;;8731:81;8859:2;8851:6;8848:14;8828:18;8825:38;8822:84;;8878:18;;:::i;:::-;8822:84;8643:269;8592:320;;;:::o;8918:182::-;9058:34;9054:1;9046:6;9042:14;9035:58;8918:182;:::o;9106:366::-;9248:3;9269:67;9333:2;9328:3;9269:67;:::i;:::-;9262:74;;9345:93;9434:3;9345:93;:::i;:::-;9463:2;9458:3;9454:12;9447:19;;9106:366;;;:::o;9478:419::-;9644:4;9682:2;9671:9;9667:18;9659:26;;9731:9;9725:4;9721:20;9717:1;9706:9;9702:17;9695:47;9759:131;9885:4;9759:131;:::i;:::-;9751:139;;9478:419;;;:::o;9903:180::-;9951:77;9948:1;9941:88;10048:4;10045:1;10038:15;10072:4;10069:1;10062:15;10089:305;10129:3;10148:20;10166:1;10148:20;:::i;:::-;10143:25;;10182:20;10200:1;10182:20;:::i;:::-;10177:25;;10336:1;10268:66;10264:74;10261:1;10258:81;10255:107;;;10342:18;;:::i;:::-;10255:107;10386:1;10383;10379:9;10372:16;;10089:305;;;;:::o;10400:178::-;10540:30;10536:1;10528:6;10524:14;10517:54;10400:178;:::o;10584:366::-;10726:3;10747:67;10811:2;10806:3;10747:67;:::i;:::-;10740:74;;10823:93;10912:3;10823:93;:::i;:::-;10941:2;10936:3;10932:12;10925:19;;10584:366;;;:::o;10956:419::-;11122:4;11160:2;11149:9;11145:18;11137:26;;11209:9;11203:4;11199:20;11195:1;11184:9;11180:17;11173:47;11237:131;11363:4;11237:131;:::i;:::-;11229:139;;10956:419;;;:::o;11381:244::-;11521:34;11517:1;11509:6;11505:14;11498:58;11590:27;11585:2;11577:6;11573:15;11566:52;11381:244;:::o;11631:366::-;11773:3;11794:67;11858:2;11853:3;11794:67;:::i;:::-;11787:74;;11870:93;11959:3;11870:93;:::i;:::-;11988:2;11983:3;11979:12;11972:19;;11631:366;;;:::o;12003:419::-;12169:4;12207:2;12196:9;12192:18;12184:26;;12256:9;12250:4;12246:20;12242:1;12231:9;12227:17;12220:47;12284:131;12410:4;12284:131;:::i;:::-;12276:139;;12003:419;;;:::o;12428:180::-;12568:32;12564:1;12556:6;12552:14;12545:56;12428:180;:::o;12614:366::-;12756:3;12777:67;12841:2;12836:3;12777:67;:::i;:::-;12770:74;;12853:93;12942:3;12853:93;:::i;:::-;12971:2;12966:3;12962:12;12955:19;;12614:366;;;:::o;12986:419::-;13152:4;13190:2;13179:9;13175:18;13167:26;;13239:9;13233:4;13229:20;13225:1;13214:9;13210:17;13203:47;13267:131;13393:4;13267:131;:::i;:::-;13259:139;;12986:419;;;:::o;13411:225::-;13551:34;13547:1;13539:6;13535:14;13528:58;13620:8;13615:2;13607:6;13603:15;13596:33;13411:225;:::o;13642:366::-;13784:3;13805:67;13869:2;13864:3;13805:67;:::i;:::-;13798:74;;13881:93;13970:3;13881:93;:::i;:::-;13999:2;13994:3;13990:12;13983:19;;13642:366;;;:::o;14014:419::-;14180:4;14218:2;14207:9;14203:18;14195:26;;14267:9;14261:4;14257:20;14253:1;14242:9;14238:17;14231:47;14295:131;14421:4;14295:131;:::i;:::-;14287:139;;14014:419;;;:::o;14439:177::-;14579:29;14575:1;14567:6;14563:14;14556:53;14439:177;:::o;14622:366::-;14764:3;14785:67;14849:2;14844:3;14785:67;:::i;:::-;14778:74;;14861:93;14950:3;14861:93;:::i;:::-;14979:2;14974:3;14970:12;14963:19;;14622:366;;;:::o;14994:419::-;15160:4;15198:2;15187:9;15183:18;15175:26;;15247:9;15241:4;15237:20;15233:1;15222:9;15218:17;15211:47;15275:131;15401:4;15275:131;:::i;:::-;15267:139;;14994:419;;;:::o;15419:223::-;15559:34;15555:1;15547:6;15543:14;15536:58;15628:6;15623:2;15615:6;15611:15;15604:31;15419:223;:::o;15648:366::-;15790:3;15811:67;15875:2;15870:3;15811:67;:::i;:::-;15804:74;;15887:93;15976:3;15887:93;:::i;:::-;16005:2;16000:3;15996:12;15989:19;;15648:366;;;:::o;16020:419::-;16186:4;16224:2;16213:9;16209:18;16201:26;;16273:9;16267:4;16263:20;16259:1;16248:9;16244:17;16237:47;16301:131;16427:4;16301:131;:::i;:::-;16293:139;;16020:419;;;:::o;16445:221::-;16585:34;16581:1;16573:6;16569:14;16562:58;16654:4;16649:2;16641:6;16637:15;16630:29;16445:221;:::o;16672:366::-;16814:3;16835:67;16899:2;16894:3;16835:67;:::i;:::-;16828:74;;16911:93;17000:3;16911:93;:::i;:::-;17029:2;17024:3;17020:12;17013:19;;16672:366;;;:::o;17044:419::-;17210:4;17248:2;17237:9;17233:18;17225:26;;17297:9;17291:4;17287:20;17283:1;17272:9;17268:17;17261:47;17325:131;17451:4;17325:131;:::i;:::-;17317:139;;17044:419;;;:::o;17469:224::-;17609:34;17605:1;17597:6;17593:14;17586:58;17678:7;17673:2;17665:6;17661:15;17654:32;17469:224;:::o;17699:366::-;17841:3;17862:67;17926:2;17921:3;17862:67;:::i;:::-;17855:74;;17938:93;18027:3;17938:93;:::i;:::-;18056:2;18051:3;18047:12;18040:19;;17699:366;;;:::o;18071:419::-;18237:4;18275:2;18264:9;18260:18;18252:26;;18324:9;18318:4;18314:20;18310:1;18299:9;18295:17;18288:47;18352:131;18478:4;18352:131;:::i;:::-;18344:139;;18071:419;;;:::o;18496:222::-;18636:34;18632:1;18624:6;18620:14;18613:58;18705:5;18700:2;18692:6;18688:15;18681:30;18496:222;:::o;18724:366::-;18866:3;18887:67;18951:2;18946:3;18887:67;:::i;:::-;18880:74;;18963:93;19052:3;18963:93;:::i;:::-;19081:2;19076:3;19072:12;19065:19;;18724:366;;;:::o;19096:419::-;19262:4;19300:2;19289:9;19285:18;19277:26;;19349:9;19343:4;19339:20;19335:1;19324:9;19320:17;19313:47;19377:131;19503:4;19377:131;:::i;:::-;19369:139;;19096:419;;;:::o;19521:172::-;19661:24;19657:1;19649:6;19645:14;19638:48;19521:172;:::o;19699:366::-;19841:3;19862:67;19926:2;19921:3;19862:67;:::i;:::-;19855:74;;19938:93;20027:3;19938:93;:::i;:::-;20056:2;20051:3;20047:12;20040:19;;19699:366;;;:::o;20071:419::-;20237:4;20275:2;20264:9;20260:18;20252:26;;20324:9;20318:4;20314:20;20310:1;20299:9;20295:17;20288:47;20352:131;20478:4;20352:131;:::i;:::-;20344:139;;20071:419;;;:::o;20496:297::-;20636:34;20632:1;20624:6;20620:14;20613:58;20705:34;20700:2;20692:6;20688:15;20681:59;20774:11;20769:2;20761:6;20757:15;20750:36;20496:297;:::o;20799:366::-;20941:3;20962:67;21026:2;21021:3;20962:67;:::i;:::-;20955:74;;21038:93;21127:3;21038:93;:::i;:::-;21156:2;21151:3;21147:12;21140:19;;20799:366;;;:::o;21171:419::-;21337:4;21375:2;21364:9;21360:18;21352:26;;21424:9;21418:4;21414:20;21410:1;21399:9;21395:17;21388:47;21452:131;21578:4;21452:131;:::i;:::-;21444:139;;21171:419;;;:::o;21596:177::-;21736:29;21732:1;21724:6;21720:14;21713:53;21596:177;:::o;21779:366::-;21921:3;21942:67;22006:2;22001:3;21942:67;:::i;:::-;21935:74;;22018:93;22107:3;22018:93;:::i;:::-;22136:2;22131:3;22127:12;22120:19;;21779:366;;;:::o;22151:419::-;22317:4;22355:2;22344:9;22340:18;22332:26;;22404:9;22398:4;22394:20;22390:1;22379:9;22375:17;22368:47;22432:131;22558:4;22432:131;:::i;:::-;22424:139;;22151:419;;;:::o;22576:241::-;22716:34;22712:1;22704:6;22700:14;22693:58;22785:24;22780:2;22772:6;22768:15;22761:49;22576:241;:::o;22823:366::-;22965:3;22986:67;23050:2;23045:3;22986:67;:::i;:::-;22979:74;;23062:93;23151:3;23062:93;:::i;:::-;23180:2;23175:3;23171:12;23164:19;;22823:366;;;:::o;23195:419::-;23361:4;23399:2;23388:9;23384:18;23376:26;;23448:9;23442:4;23438:20;23434:1;23423:9;23419:17;23412:47;23476:131;23602:4;23476:131;:::i;:::-;23468:139;;23195:419;;;:::o;23620:348::-;23660:7;23683:20;23701:1;23683:20;:::i;:::-;23678:25;;23717:20;23735:1;23717:20;:::i;:::-;23712:25;;23905:1;23837:66;23833:74;23830:1;23827:81;23822:1;23815:9;23808:17;23804:105;23801:131;;;23912:18;;:::i;:::-;23801:131;23960:1;23957;23953:9;23942:20;;23620:348;;;;:::o;23974:180::-;24022:77;24019:1;24012:88;24119:4;24116:1;24109:15;24143:4;24140:1;24133:15;24160:185;24200:1;24217:20;24235:1;24217:20;:::i;:::-;24212:25;;24251:20;24269:1;24251:20;:::i;:::-;24246:25;;24290:1;24280:35;;24295:18;;:::i;:::-;24280:35;24337:1;24334;24330:9;24325:14;;24160:185;;;;:::o;24351:191::-;24391:4;24411:20;24429:1;24411:20;:::i;:::-;24406:25;;24445:20;24463:1;24445:20;:::i;:::-;24440:25;;24484:1;24481;24478:8;24475:34;;;24489:18;;:::i;:::-;24475:34;24534:1;24531;24527:9;24519:17;;24351:191;;;;:::o;24548:147::-;24649:11;24686:3;24671:18;;24548:147;;;;:::o;24701:114::-;;:::o;24821:398::-;24980:3;25001:83;25082:1;25077:3;25001:83;:::i;:::-;24994:90;;25093:93;25182:3;25093:93;:::i;:::-;25211:1;25206:3;25202:11;25195:18;;24821:398;;;:::o;25225:379::-;25409:3;25431:147;25574:3;25431:147;:::i;:::-;25424:154;;25595:3;25588:10;;25225:379;;;:::o;25610:442::-;25759:4;25797:2;25786:9;25782:18;25774:26;;25810:71;25878:1;25867:9;25863:17;25854:6;25810:71;:::i;:::-;25891:72;25959:2;25948:9;25944:18;25935:6;25891:72;:::i;:::-;25973;26041:2;26030:9;26026:18;26017:6;25973:72;:::i;:::-;25610:442;;;;;;:::o;26058:220::-;26198:34;26194:1;26186:6;26182:14;26175:58;26267:3;26262:2;26254:6;26250:15;26243:28;26058:220;:::o;26284:366::-;26426:3;26447:67;26511:2;26506:3;26447:67;:::i;:::-;26440:74;;26523:93;26612:3;26523:93;:::i;:::-;26641:2;26636:3;26632:12;26625:19;;26284:366;;;:::o;26656:419::-;26822:4;26860:2;26849:9;26845:18;26837:26;;26909:9;26903:4;26899:20;26895:1;26884:9;26880:17;26873:47;26937:131;27063:4;26937:131;:::i;:::-;26929:139;;26656:419;;;:::o;27081:180::-;27129:77;27126:1;27119:88;27226:4;27223:1;27216:15;27250:4;27247:1;27240:15;27267:180;27315:77;27312:1;27305:88;27412:4;27409:1;27402:15;27436:4;27433:1;27426:15;27453:143;27510:5;27541:6;27535:13;27526:22;;27557:33;27584:5;27557:33;:::i;:::-;27453:143;;;;:::o;27602:351::-;27672:6;27721:2;27709:9;27700:7;27696:23;27692:32;27689:119;;;27727:79;;:::i;:::-;27689:119;27847:1;27872:64;27928:7;27919:6;27908:9;27904:22;27872:64;:::i;:::-;27862:74;;27818:128;27602:351;;;;:::o;27959:85::-;28004:7;28033:5;28022:16;;27959:85;;;:::o;28050:158::-;28108:9;28141:61;28159:42;28168:32;28194:5;28168:32;:::i;:::-;28159:42;:::i;:::-;28141:61;:::i;:::-;28128:74;;28050:158;;;:::o;28214:147::-;28309:45;28348:5;28309:45;:::i;:::-;28304:3;28297:58;28214:147;;:::o;28367:114::-;28434:6;28468:5;28462:12;28452:22;;28367:114;;;:::o;28487:184::-;28586:11;28620:6;28615:3;28608:19;28660:4;28655:3;28651:14;28636:29;;28487:184;;;;:::o;28677:132::-;28744:4;28767:3;28759:11;;28797:4;28792:3;28788:14;28780:22;;28677:132;;;:::o;28815:108::-;28892:24;28910:5;28892:24;:::i;:::-;28887:3;28880:37;28815:108;;:::o;28929:179::-;28998:10;29019:46;29061:3;29053:6;29019:46;:::i;:::-;29097:4;29092:3;29088:14;29074:28;;28929:179;;;;:::o;29114:113::-;29184:4;29216;29211:3;29207:14;29199:22;;29114:113;;;:::o;29263:732::-;29382:3;29411:54;29459:5;29411:54;:::i;:::-;29481:86;29560:6;29555:3;29481:86;:::i;:::-;29474:93;;29591:56;29641:5;29591:56;:::i;:::-;29670:7;29701:1;29686:284;29711:6;29708:1;29705:13;29686:284;;;29787:6;29781:13;29814:63;29873:3;29858:13;29814:63;:::i;:::-;29807:70;;29900:60;29953:6;29900:60;:::i;:::-;29890:70;;29746:224;29733:1;29730;29726:9;29721:14;;29686:284;;;29690:14;29986:3;29979:10;;29387:608;;;29263:732;;;;:::o;30001:831::-;30264:4;30302:3;30291:9;30287:19;30279:27;;30316:71;30384:1;30373:9;30369:17;30360:6;30316:71;:::i;:::-;30397:80;30473:2;30462:9;30458:18;30449:6;30397:80;:::i;:::-;30524:9;30518:4;30514:20;30509:2;30498:9;30494:18;30487:48;30552:108;30655:4;30646:6;30552:108;:::i;:::-;30544:116;;30670:72;30738:2;30727:9;30723:18;30714:6;30670:72;:::i;:::-;30752:73;30820:3;30809:9;30805:19;30796:6;30752:73;:::i;:::-;30001:831;;;;;;;;:::o;30838:807::-;31087:4;31125:3;31114:9;31110:19;31102:27;;31139:71;31207:1;31196:9;31192:17;31183:6;31139:71;:::i;:::-;31220:72;31288:2;31277:9;31273:18;31264:6;31220:72;:::i;:::-;31302:80;31378:2;31367:9;31363:18;31354:6;31302:80;:::i;:::-;31392;31468:2;31457:9;31453:18;31444:6;31392:80;:::i;:::-;31482:73;31550:3;31539:9;31535:19;31526:6;31482:73;:::i;:::-;31565;31633:3;31622:9;31618:19;31609:6;31565:73;:::i;:::-;30838:807;;;;;;;;;:::o;31651:143::-;31708:5;31739:6;31733:13;31724:22;;31755:33;31782:5;31755:33;:::i;:::-;31651:143;;;;:::o;31800:663::-;31888:6;31896;31904;31953:2;31941:9;31932:7;31928:23;31924:32;31921:119;;;31959:79;;:::i;:::-;31921:119;32079:1;32104:64;32160:7;32151:6;32140:9;32136:22;32104:64;:::i;:::-;32094:74;;32050:128;32217:2;32243:64;32299:7;32290:6;32279:9;32275:22;32243:64;:::i;:::-;32233:74;;32188:129;32356:2;32382:64;32438:7;32429:6;32418:9;32414:22;32382:64;:::i;:::-;32372:74;;32327:129;31800:663;;;;;:::o

Swarm Source

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