ETH Price: $3,166.27 (+2.76%)

Token

PRAY (HOPE)
 

Overview

Max Total Supply

100,000,000 HOPE

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
fuckvitalik.eth
Balance
931,026.366485738869793941 HOPE

Value
$0.00
0x53f04f9deb144f10da4701d93f9a9f7abfd4f94b
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:
PRAY

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-02
*/

/*

//  

   EVERYONE CAN HOPE
   EVERYONE CAN PRAY 
   EVERYONE CAN CHANGES
 

*/

// 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 PRAY 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("PRAY","HOPE") {
        
        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 = 3;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;

        uint256 _sellMarketingFee = 3;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        
        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 10% 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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600481526020017f50524159000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f484f5045000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000dca565b5080600490816200010d919062000dca565b5050506000620001226200061d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200062560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000f1b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f1b565b6040518363ffffffff1660e01b81526004016200034092919062000f5e565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000f1b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200062560201b60201c565b620003e360a05160016200072260201b60201c565b60006003905060008060006003905060008060006a52b7d2dcc80cd2e40000009050606460018262000416919062000fba565b6200042291906200104a565b600a81905550606460018262000439919062000fba565b6200044591906200104a565b600881905550612710600f826200045d919062000fba565b6200046991906200104a565b60098190555086600f819055508560108190555084601181905550601154601054600f5462000499919062001082565b620004a5919062001082565b600e81905550836013819055508260148190555081601581905550601554601454601354620004d5919062001082565b620004e1919062001082565b60128190555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200058b6200057d620007c360201b60201c565b6001620007ed60201b60201c565b6200059e306001620007ed60201b60201c565b620005b361dead6001620007ed60201b60201c565b620005d5620005c7620007c360201b60201c565b60016200062560201b60201c565b620005e83060016200062560201b60201c565b620005fd61dead60016200062560201b60201c565b6200060f33826200093a60201b60201c565b5050505050505050620012ae565b600033905090565b620006356200061d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006be9062001140565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007fd6200061d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200088f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008869062001140565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200092e91906200117f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a390620011ec565b60405180910390fd5b620009c06000838362000ae860201b60201c565b620009dc8160025462000aed60201b62001cdf1790919060201c565b60028190555062000a3a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000aed60201b62001cdf1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000adc91906200121f565b60405180910390a35050565b505050565b600080828462000afe919062001082565b90508381101562000b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b3d906200128c565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bd257607f821691505b60208210810362000be85762000be762000b8a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c13565b62000c5e868362000c13565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cab62000ca562000c9f8462000c76565b62000c80565b62000c76565b9050919050565b6000819050919050565b62000cc78362000c8a565b62000cdf62000cd68262000cb2565b84845462000c20565b825550505050565b600090565b62000cf662000ce7565b62000d0381848462000cbc565b505050565b5b8181101562000d2b5762000d1f60008262000cec565b60018101905062000d09565b5050565b601f82111562000d7a5762000d448162000bee565b62000d4f8462000c03565b8101602085101562000d5f578190505b62000d7762000d6e8562000c03565b83018262000d08565b50505b505050565b600082821c905092915050565b600062000d9f6000198460080262000d7f565b1980831691505092915050565b600062000dba838362000d8c565b9150826002028217905092915050565b62000dd58262000b50565b67ffffffffffffffff81111562000df15762000df062000b5b565b5b62000dfd825462000bb9565b62000e0a82828562000d2f565b600060209050601f83116001811462000e42576000841562000e2d578287015190505b62000e39858262000dac565b86555062000ea9565b601f19841662000e528662000bee565b60005b8281101562000e7c5784890151825560018201915060208501945060208101905062000e55565b8683101562000e9c578489015162000e98601f89168262000d8c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ee38262000eb6565b9050919050565b62000ef58162000ed6565b811462000f0157600080fd5b50565b60008151905062000f158162000eea565b92915050565b60006020828403121562000f345762000f3362000eb1565b5b600062000f448482850162000f04565b91505092915050565b62000f588162000ed6565b82525050565b600060408201905062000f75600083018562000f4d565b62000f84602083018462000f4d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fc78262000c76565b915062000fd48362000c76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001010576200100f62000f8b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010578262000c76565b9150620010648362000c76565b9250826200107757620010766200101b565b5b828204905092915050565b60006200108f8262000c76565b91506200109c8362000c76565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010d457620010d362000f8b565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001128602083620010df565b91506200113582620010f0565b602082019050919050565b600060208201905081810360008301526200115b8162001119565b9050919050565b60008115159050919050565b620011798162001162565b82525050565b60006020820190506200119660008301846200116e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011d4601f83620010df565b9150620011e1826200119c565b602082019050919050565b600060208201905081810360008301526200120781620011c5565b9050919050565b620012198162000c76565b82525050565b60006020820190506200123660008301846200120e565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001274601b83620010df565b915062001281826200123c565b602082019050919050565b60006020820190508181036000830152620012a78162001265565b9050919050565b60805160a0516148436200130c60003960008181610de00152818161155c01526122c3015260008181610c050152818161226b0152818161338e0152818161346f0152818161349601528181613532015261355901526148436000f3fe6080604052600436106102975760003560e01c80638a8c523c1161015a578063c876d0b9116100c1578063e884f2601161007a578063e884f26014610a33578063ef8700e514610a5e578063f11a24d314610a89578063f2fde38b14610ab4578063f637434214610add578063f8b45b0514610b085761029e565b8063c876d0b91461091f578063c8c8ebe41461094a578063d85ba06314610975578063da641921146109a0578063dd62ed3e146109cb578063e2f4560514610a085761029e565b8063a9059cbb11610113578063a9059cbb146107fd578063b20414111461083a578063b62496f514610865578063bbc0c742146108a2578063c0246668146108cd578063c17b5b8c146108f65761029e565b80638a8c523c146106ff5780638da5cb5b14610716578063921369131461074157806395d89b411461076c5780639a7a23d614610797578063a457c2d7146107c05761029e565b806349bd5a5e116101fe578063715018a6116101b7578063715018a614610615578063751039fc1461062c5780637571336a1461065757806375f0a874146106805780637bce5a04146106ab5780638095d564146106d65761029e565b806349bd5a5e146104ef5780634a62bb651461051a5780634fbee193146105455780636a486a8e146105825780636ddd1713146105ad57806370a08231146105d85761029e565b80631a8145bb116102505780631a8145bb146103c95780631f3fed8f146103f457806323b872dd1461041f57806327c8f8351461045c578063313ce5671461048757806339509351146104b25761029e565b806306fdde03146102a3578063095ea7b3146102ce57806310d5de531461030b5780631694505e1461034857806318160ddd1461037357806318a94cf11461039e5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b33565b6040516102c59190613709565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906137c4565b610bc5565b604051610302919061381f565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d919061383a565b610be3565b60405161033f919061381f565b60405180910390f35b34801561035457600080fd5b5061035d610c03565b60405161036a91906138c6565b60405180910390f35b34801561037f57600080fd5b50610388610c27565b60405161039591906138f0565b60405180910390f35b3480156103aa57600080fd5b506103b3610c31565b6040516103c091906138f0565b60405180910390f35b3480156103d557600080fd5b506103de610c37565b6040516103eb91906138f0565b60405180910390f35b34801561040057600080fd5b50610409610c3d565b60405161041691906138f0565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061390b565b610c43565b604051610453919061381f565b60405180910390f35b34801561046857600080fd5b50610471610d1c565b60405161047e919061396d565b60405180910390f35b34801561049357600080fd5b5061049c610d22565b6040516104a991906139a4565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906137c4565b610d2b565b6040516104e6919061381f565b60405180910390f35b3480156104fb57600080fd5b50610504610dde565b604051610511919061396d565b60405180910390f35b34801561052657600080fd5b5061052f610e02565b60405161053c919061381f565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061383a565b610e15565b604051610579919061381f565b60405180910390f35b34801561058e57600080fd5b50610597610e6b565b6040516105a491906138f0565b60405180910390f35b3480156105b957600080fd5b506105c2610e71565b6040516105cf919061381f565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa919061383a565b610e84565b60405161060c91906138f0565b60405180910390f35b34801561062157600080fd5b5061062a610ecc565b005b34801561063857600080fd5b50610641611024565b60405161064e919061381f565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906139eb565b6110fa565b005b34801561068c57600080fd5b506106956111ec565b6040516106a2919061396d565b60405180910390f35b3480156106b757600080fd5b506106c0611212565b6040516106cd91906138f0565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613a2b565b611218565b005b34801561070b57600080fd5b50610714611332565b005b34801561072257600080fd5b5061072b611401565b604051610738919061396d565b60405180910390f35b34801561074d57600080fd5b5061075661142b565b60405161076391906138f0565b60405180910390f35b34801561077857600080fd5b50610781611431565b60405161078e9190613709565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b991906139eb565b6114c3565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906137c4565b6115f6565b6040516107f4919061381f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906137c4565b6116c3565b604051610831919061381f565b60405180910390f35b34801561084657600080fd5b5061084f6116e1565b60405161085c91906138f0565b60405180910390f35b34801561087157600080fd5b5061088c6004803603810190610887919061383a565b6116e7565b604051610899919061381f565b60405180910390f35b3480156108ae57600080fd5b506108b7611707565b6040516108c4919061381f565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef91906139eb565b61171a565b005b34801561090257600080fd5b5061091d60048036038101906109189190613a2b565b61185a565b005b34801561092b57600080fd5b50610934611974565b604051610941919061381f565b60405180910390f35b34801561095657600080fd5b5061095f611987565b60405161096c91906138f0565b60405180910390f35b34801561098157600080fd5b5061098a61198d565b60405161099791906138f0565b60405180910390f35b3480156109ac57600080fd5b506109b5611993565b6040516109c2919061396d565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190613a7e565b6119b9565b6040516109ff91906138f0565b60405180910390f35b348015610a1457600080fd5b50610a1d611a40565b604051610a2a91906138f0565b60405180910390f35b348015610a3f57600080fd5b50610a48611a46565b604051610a55919061381f565b60405180910390f35b348015610a6a57600080fd5b50610a73611b01565b604051610a8091906138f0565b60405180910390f35b348015610a9557600080fd5b50610a9e611b07565b604051610aab91906138f0565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad6919061383a565b611b0d565b005b348015610ae957600080fd5b50610af2611cd3565b604051610aff91906138f0565b60405180910390f35b348015610b1457600080fd5b50610b1d611cd9565b604051610b2a91906138f0565b60405180910390f35b606060038054610b4290613aed565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e90613aed565b8015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b5050505050905090565b6000610bd9610bd2611d3d565b8484611d45565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60175481565b60165481565b6000610c50848484611f0e565b610d1184610c5c611d3d565b610d0c856040518060600160405280602881526020016147c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc2611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b600190509392505050565b61dead81565b60006012905090565b6000610dd4610d38611d3d565b84610dcf8560016000610d49611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b611d45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed4611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061102e611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490613b6a565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001905090565b611102611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613b6a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611220611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613b6a565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546112d79190613bb9565b6112e19190613bb9565b600e819055506006600e54111561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613c5b565b60405180910390fd5b505050565b61133a611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613b6a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b60606004805461144090613aed565b80601f016020809104026020016040519081016040528092919081815260200182805461146c90613aed565b80156114b95780601f1061148e576101008083540402835291602001916114b9565b820191906000526020600020905b81548152906001019060200180831161149c57829003601f168201915b5050505050905090565b6114cb611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613b6a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613ced565b60405180910390fd5b6115f28282612bc4565b5050565b60006116b9611603611d3d565b846116b4856040518060600160405280602581526020016147e9602591396001600061162d611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b6001905092915050565b60006116d76116d0611d3d565b8484611f0e565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611722611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a890613b6a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161184e919061381f565b60405180910390a25050565b611862611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613b6a565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546119199190613bb9565b6119239190613bb9565b6012819055506064601254111561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613d59565b60405180910390fd5b505050565b600d60009054906101000a900460ff1681565b60085481565b600e5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611a50611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613b6a565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60185481565b60105481565b611b15611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a90613deb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b6000808284611cee9190613bb9565b905083811015611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613e57565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90613ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90613f7b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0191906138f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f749061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe39061409f565b60405180910390fd5b600081036120055761200083836000612c65565b612b5b565b600b60009054906101000a900460ff161561268357612022611401565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120905750612060611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120c95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612103575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561211c5750600560149054906101000a900460ff16155b1561268257600b60019054906101000a900460ff1661221657601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121d65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061410b565b60405180910390fd5b5b600d60009054906101000a900460ff16156123de57612233611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122ba57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561231257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123dd5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f906141c3565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124815750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124e357600a5461249283610e84565b8261249d9190613bb9565b11156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d59061422f565b60405180910390fd5b612681565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125865750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125d5576008548111156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c7906142c1565b60405180910390fd5b612680565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661267f57600a5461263283610e84565b8261263d9190613bb9565b111561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061422f565b60405180910390fd5b5b5b5b5b5b600061268e30610e84565b9050600060095482101590508080156126b35750600b60029054906101000a900460ff165b80156126cc5750600560149054906101000a900460ff16155b80156127225750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127785750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127ce5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612812576001600560146101000a81548160ff0219169083151502179055506127f6612ef8565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128c85750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128d257600090505b60008115612b4b57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561293557506000601254115b15612a02576129626064612954601254886131dc90919063ffffffff16565b61325690919063ffffffff16565b90506012546014548261297591906142e1565b61297f919061436a565b601760008282546129909190613bb9565b92505081905550601254601554826129a891906142e1565b6129b2919061436a565b601860008282546129c39190613bb9565b92505081905550601254601354826129db91906142e1565b6129e5919061436a565b601660008282546129f69190613bb9565b92505081905550612b27565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a5d57506000600e54115b15612b2657612a8a6064612a7c600e54886131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600e5460105482612a9d91906142e1565b612aa7919061436a565b60176000828254612ab89190613bb9565b92505081905550600e5460115482612ad091906142e1565b612ada919061436a565b60186000828254612aeb9190613bb9565b92505081905550600e54600f5482612b0391906142e1565b612b0d919061436a565b60166000828254612b1e9190613bb9565b925050819055505b5b6000811115612b3c57612b3b873083612c65565b5b8085612b48919061439b565b94505b612b56878787612c65565b505050505b505050565b6000838311158290612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f9190613709565b60405180910390fd5b5060008385612bb7919061439b565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb9061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a9061409f565b60405180910390fd5b612d4e8383836132a0565b612db98160405180606001604052806026815260200161479b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612eeb91906138f0565b60405180910390a3505050565b6000612f0330610e84565b90506000601854601654601754612f1a9190613bb9565b612f249190613bb9565b90506000821480612f355750600081145b15612f415750506131da565b600a600954612f5091906142e1565b8210612f6857600a600954612f6591906142e1565b91505b600060028260175485612f7b91906142e1565b612f85919061436a565b612f8f919061436a565b90506000612fa682856132a590919063ffffffff16565b90506000479050612fb6826132ef565b6000612fcb82476132a590919063ffffffff16565b90506000612ff686612fe8601654856131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600061302187613013601854866131dc90919063ffffffff16565b61325690919063ffffffff16565b90506000818385613032919061439b565b61303c919061439b565b90506000601781905550600060168190555060006018819055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161309e90614400565b60006040518083038185875af1925050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b505090506000881180156130f45750600082115b1561314157613103888361352c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161313893929190614415565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318790614400565b60006040518083038185875af1925050503d80600081146131c4576040519150601f19603f3d011682016040523d82523d6000602084013e6131c9565b606091505b505080915050505050505050505050505b565b60008083036131ee5760009050613250565b600082846131fc91906142e1565b905082848261320b919061436a565b1461324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906144be565b60405180910390fd5b809150505b92915050565b600061329883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061360d565b905092915050565b505050565b60006132e783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b60565b905092915050565b6000600267ffffffffffffffff81111561330c5761330b6144de565b5b60405190808252806020026020018201604052801561333a5781602001602082028036833780820191505090505b50905030816000815181106133525761335161450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190614551565b8160018151811061342f5761342e61450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613494307f000000000000000000000000000000000000000000000000000000000000000084611d45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134f6959493929190614677565b600060405180830381600087803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b505050505050565b613557307f000000000000000000000000000000000000000000000000000000000000000084611d45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135a1611401565b426040518863ffffffff1660e01b81526004016135c3969594939291906146d1565b60606040518083038185885af11580156135e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136069190614747565b5050505050565b60008083118290613654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364b9190613709565b60405180910390fd5b5060008385613663919061436a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136aa57808201518184015260208101905061368f565b838111156136b9576000848401525b50505050565b6000601f19601f8301169050919050565b60006136db82613670565b6136e5818561367b565b93506136f581856020860161368c565b6136fe816136bf565b840191505092915050565b6000602082019050818103600083015261372381846136d0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061375b82613730565b9050919050565b61376b81613750565b811461377657600080fd5b50565b60008135905061378881613762565b92915050565b6000819050919050565b6137a18161378e565b81146137ac57600080fd5b50565b6000813590506137be81613798565b92915050565b600080604083850312156137db576137da61372b565b5b60006137e985828601613779565b92505060206137fa858286016137af565b9150509250929050565b60008115159050919050565b61381981613804565b82525050565b60006020820190506138346000830184613810565b92915050565b6000602082840312156138505761384f61372b565b5b600061385e84828501613779565b91505092915050565b6000819050919050565b600061388c61388761388284613730565b613867565b613730565b9050919050565b600061389e82613871565b9050919050565b60006138b082613893565b9050919050565b6138c0816138a5565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6138ea8161378e565b82525050565b600060208201905061390560008301846138e1565b92915050565b6000806000606084860312156139245761392361372b565b5b600061393286828701613779565b935050602061394386828701613779565b9250506040613954868287016137af565b9150509250925092565b61396781613750565b82525050565b6000602082019050613982600083018461395e565b92915050565b600060ff82169050919050565b61399e81613988565b82525050565b60006020820190506139b96000830184613995565b92915050565b6139c881613804565b81146139d357600080fd5b50565b6000813590506139e5816139bf565b92915050565b60008060408385031215613a0257613a0161372b565b5b6000613a1085828601613779565b9250506020613a21858286016139d6565b9150509250929050565b600080600060608486031215613a4457613a4361372b565b5b6000613a52868287016137af565b9350506020613a63868287016137af565b9250506040613a74868287016137af565b9150509250925092565b60008060408385031215613a9557613a9461372b565b5b6000613aa385828601613779565b9250506020613ab485828601613779565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b0557607f821691505b602082108103613b1857613b17613abe565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5460208361367b565b9150613b5f82613b1e565b602082019050919050565b60006020820190508181036000830152613b8381613b47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc48261378e565b9150613bcf8361378e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0457613c03613b8a565b5b828201905092915050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b6000613c45601c8361367b565b9150613c5082613c0f565b602082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cd760398361367b565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613d43601d8361367b565b9150613d4e82613d0d565b602082019050919050565b60006020820190508181036000830152613d7281613d36565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613dd560268361367b565b9150613de082613d79565b604082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e41601b8361367b565b9150613e4c82613e0b565b602082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ed360248361367b565b9150613ede82613e77565b604082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f6560228361367b565b9150613f7082613f09565b604082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ff760258361367b565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061408960238361367b565b91506140948261402d565b604082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140f560168361367b565b9150614100826140bf565b602082019050919050565b60006020820190508181036000830152614124816140e8565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141ad60498361367b565b91506141b88261412b565b606082019050919050565b600060208201905081810360008301526141dc816141a0565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614219601b8361367b565b9150614224826141e3565b602082019050919050565b600060208201905081810360008301526142488161420c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142ab60368361367b565b91506142b68261424f565b604082019050919050565b600060208201905081810360008301526142da8161429e565b9050919050565b60006142ec8261378e565b91506142f78361378e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143305761432f613b8a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143758261378e565b91506143808361378e565b9250826143905761438f61433b565b5b828204905092915050565b60006143a68261378e565b91506143b18361378e565b9250828210156143c4576143c3613b8a565b5b828203905092915050565b600081905092915050565b50565b60006143ea6000836143cf565b91506143f5826143da565b600082019050919050565b600061440b826143dd565b9150819050919050565b600060608201905061442a60008301866138e1565b61443760208301856138e1565b61444460408301846138e1565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144a860218361367b565b91506144b38261444c565b604082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061454b81613762565b92915050565b6000602082840312156145675761456661372b565b5b60006145758482850161453c565b91505092915050565b6000819050919050565b60006145a361459e6145998461457e565b613867565b61378e565b9050919050565b6145b381614588565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145ee81613750565b82525050565b600061460083836145e5565b60208301905092915050565b6000602082019050919050565b6000614624826145b9565b61462e81856145c4565b9350614639836145d5565b8060005b8381101561466a57815161465188826145f4565b975061465c8361460c565b92505060018101905061463d565b5085935050505092915050565b600060a08201905061468c60008301886138e1565b61469960208301876145aa565b81810360408301526146ab8186614619565b90506146ba606083018561395e565b6146c760808301846138e1565b9695505050505050565b600060c0820190506146e6600083018961395e565b6146f360208301886138e1565b61470060408301876145aa565b61470d60608301866145aa565b61471a608083018561395e565b61472760a08301846138e1565b979650505050505050565b60008151905061474181613798565b92915050565b6000806000606084860312156147605761475f61372b565b5b600061476e86828701614732565b935050602061477f86828701614732565b925050604061479086828701614732565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aad8e73561a6c9551d0b755587151c865ef1c22453f91255940e76eaa8fb098e64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80638a8c523c1161015a578063c876d0b9116100c1578063e884f2601161007a578063e884f26014610a33578063ef8700e514610a5e578063f11a24d314610a89578063f2fde38b14610ab4578063f637434214610add578063f8b45b0514610b085761029e565b8063c876d0b91461091f578063c8c8ebe41461094a578063d85ba06314610975578063da641921146109a0578063dd62ed3e146109cb578063e2f4560514610a085761029e565b8063a9059cbb11610113578063a9059cbb146107fd578063b20414111461083a578063b62496f514610865578063bbc0c742146108a2578063c0246668146108cd578063c17b5b8c146108f65761029e565b80638a8c523c146106ff5780638da5cb5b14610716578063921369131461074157806395d89b411461076c5780639a7a23d614610797578063a457c2d7146107c05761029e565b806349bd5a5e116101fe578063715018a6116101b7578063715018a614610615578063751039fc1461062c5780637571336a1461065757806375f0a874146106805780637bce5a04146106ab5780638095d564146106d65761029e565b806349bd5a5e146104ef5780634a62bb651461051a5780634fbee193146105455780636a486a8e146105825780636ddd1713146105ad57806370a08231146105d85761029e565b80631a8145bb116102505780631a8145bb146103c95780631f3fed8f146103f457806323b872dd1461041f57806327c8f8351461045c578063313ce5671461048757806339509351146104b25761029e565b806306fdde03146102a3578063095ea7b3146102ce57806310d5de531461030b5780631694505e1461034857806318160ddd1461037357806318a94cf11461039e5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b33565b6040516102c59190613709565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906137c4565b610bc5565b604051610302919061381f565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d919061383a565b610be3565b60405161033f919061381f565b60405180910390f35b34801561035457600080fd5b5061035d610c03565b60405161036a91906138c6565b60405180910390f35b34801561037f57600080fd5b50610388610c27565b60405161039591906138f0565b60405180910390f35b3480156103aa57600080fd5b506103b3610c31565b6040516103c091906138f0565b60405180910390f35b3480156103d557600080fd5b506103de610c37565b6040516103eb91906138f0565b60405180910390f35b34801561040057600080fd5b50610409610c3d565b60405161041691906138f0565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061390b565b610c43565b604051610453919061381f565b60405180910390f35b34801561046857600080fd5b50610471610d1c565b60405161047e919061396d565b60405180910390f35b34801561049357600080fd5b5061049c610d22565b6040516104a991906139a4565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906137c4565b610d2b565b6040516104e6919061381f565b60405180910390f35b3480156104fb57600080fd5b50610504610dde565b604051610511919061396d565b60405180910390f35b34801561052657600080fd5b5061052f610e02565b60405161053c919061381f565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061383a565b610e15565b604051610579919061381f565b60405180910390f35b34801561058e57600080fd5b50610597610e6b565b6040516105a491906138f0565b60405180910390f35b3480156105b957600080fd5b506105c2610e71565b6040516105cf919061381f565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa919061383a565b610e84565b60405161060c91906138f0565b60405180910390f35b34801561062157600080fd5b5061062a610ecc565b005b34801561063857600080fd5b50610641611024565b60405161064e919061381f565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906139eb565b6110fa565b005b34801561068c57600080fd5b506106956111ec565b6040516106a2919061396d565b60405180910390f35b3480156106b757600080fd5b506106c0611212565b6040516106cd91906138f0565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613a2b565b611218565b005b34801561070b57600080fd5b50610714611332565b005b34801561072257600080fd5b5061072b611401565b604051610738919061396d565b60405180910390f35b34801561074d57600080fd5b5061075661142b565b60405161076391906138f0565b60405180910390f35b34801561077857600080fd5b50610781611431565b60405161078e9190613709565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b991906139eb565b6114c3565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906137c4565b6115f6565b6040516107f4919061381f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906137c4565b6116c3565b604051610831919061381f565b60405180910390f35b34801561084657600080fd5b5061084f6116e1565b60405161085c91906138f0565b60405180910390f35b34801561087157600080fd5b5061088c6004803603810190610887919061383a565b6116e7565b604051610899919061381f565b60405180910390f35b3480156108ae57600080fd5b506108b7611707565b6040516108c4919061381f565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef91906139eb565b61171a565b005b34801561090257600080fd5b5061091d60048036038101906109189190613a2b565b61185a565b005b34801561092b57600080fd5b50610934611974565b604051610941919061381f565b60405180910390f35b34801561095657600080fd5b5061095f611987565b60405161096c91906138f0565b60405180910390f35b34801561098157600080fd5b5061098a61198d565b60405161099791906138f0565b60405180910390f35b3480156109ac57600080fd5b506109b5611993565b6040516109c2919061396d565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed9190613a7e565b6119b9565b6040516109ff91906138f0565b60405180910390f35b348015610a1457600080fd5b50610a1d611a40565b604051610a2a91906138f0565b60405180910390f35b348015610a3f57600080fd5b50610a48611a46565b604051610a55919061381f565b60405180910390f35b348015610a6a57600080fd5b50610a73611b01565b604051610a8091906138f0565b60405180910390f35b348015610a9557600080fd5b50610a9e611b07565b604051610aab91906138f0565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad6919061383a565b611b0d565b005b348015610ae957600080fd5b50610af2611cd3565b604051610aff91906138f0565b60405180910390f35b348015610b1457600080fd5b50610b1d611cd9565b604051610b2a91906138f0565b60405180910390f35b606060038054610b4290613aed565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e90613aed565b8015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b5050505050905090565b6000610bd9610bd2611d3d565b8484611d45565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60175481565b60165481565b6000610c50848484611f0e565b610d1184610c5c611d3d565b610d0c856040518060600160405280602881526020016147c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc2611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b600190509392505050565b61dead81565b60006012905090565b6000610dd4610d38611d3d565b84610dcf8560016000610d49611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b611d45565b6001905092915050565b7f00000000000000000000000082aa985cb1cb8588f095b0e2b3a913189829036b81565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed4611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061102e611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490613b6a565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001905090565b611102611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613b6a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611220611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690613b6a565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546112d79190613bb9565b6112e19190613bb9565b600e819055506006600e54111561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613c5b565b60405180910390fd5b505050565b61133a611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613b6a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b60606004805461144090613aed565b80601f016020809104026020016040519081016040528092919081815260200182805461146c90613aed565b80156114b95780601f1061148e576101008083540402835291602001916114b9565b820191906000526020600020905b81548152906001019060200180831161149c57829003601f168201915b5050505050905090565b6114cb611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613b6a565b60405180910390fd5b7f00000000000000000000000082aa985cb1cb8588f095b0e2b3a913189829036b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613ced565b60405180910390fd5b6115f28282612bc4565b5050565b60006116b9611603611d3d565b846116b4856040518060600160405280602581526020016147e9602591396001600061162d611d3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b611d45565b6001905092915050565b60006116d76116d0611d3d565b8484611f0e565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611722611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a890613b6a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161184e919061381f565b60405180910390a25050565b611862611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890613b6a565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546119199190613bb9565b6119239190613bb9565b6012819055506064601254111561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613d59565b60405180910390fd5b505050565b600d60009054906101000a900460ff1681565b60085481565b600e5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611a50611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613b6a565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60185481565b60105481565b611b15611d3d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a90613deb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b6000808284611cee9190613bb9565b905083811015611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613e57565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90613ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90613f7b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0191906138f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f749061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe39061409f565b60405180910390fd5b600081036120055761200083836000612c65565b612b5b565b600b60009054906101000a900460ff161561268357612022611401565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120905750612060611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120c95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612103575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561211c5750600560149054906101000a900460ff16155b1561268257600b60019054906101000a900460ff1661221657601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121d65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061410b565b60405180910390fd5b5b600d60009054906101000a900460ff16156123de57612233611401565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122ba57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561231257507f00000000000000000000000082aa985cb1cb8588f095b0e2b3a913189829036b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123dd5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f906141c3565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124815750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124e357600a5461249283610e84565b8261249d9190613bb9565b11156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d59061422f565b60405180910390fd5b612681565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125865750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125d5576008548111156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c7906142c1565b60405180910390fd5b612680565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661267f57600a5461263283610e84565b8261263d9190613bb9565b111561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061422f565b60405180910390fd5b5b5b5b5b5b600061268e30610e84565b9050600060095482101590508080156126b35750600b60029054906101000a900460ff165b80156126cc5750600560149054906101000a900460ff16155b80156127225750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127785750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127ce5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612812576001600560146101000a81548160ff0219169083151502179055506127f6612ef8565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128c85750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128d257600090505b60008115612b4b57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561293557506000601254115b15612a02576129626064612954601254886131dc90919063ffffffff16565b61325690919063ffffffff16565b90506012546014548261297591906142e1565b61297f919061436a565b601760008282546129909190613bb9565b92505081905550601254601554826129a891906142e1565b6129b2919061436a565b601860008282546129c39190613bb9565b92505081905550601254601354826129db91906142e1565b6129e5919061436a565b601660008282546129f69190613bb9565b92505081905550612b27565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a5d57506000600e54115b15612b2657612a8a6064612a7c600e54886131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600e5460105482612a9d91906142e1565b612aa7919061436a565b60176000828254612ab89190613bb9565b92505081905550600e5460115482612ad091906142e1565b612ada919061436a565b60186000828254612aeb9190613bb9565b92505081905550600e54600f5482612b0391906142e1565b612b0d919061436a565b60166000828254612b1e9190613bb9565b925050819055505b5b6000811115612b3c57612b3b873083612c65565b5b8085612b48919061439b565b94505b612b56878787612c65565b505050505b505050565b6000838311158290612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f9190613709565b60405180910390fd5b5060008385612bb7919061439b565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb9061400d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a9061409f565b60405180910390fd5b612d4e8383836132a0565b612db98160405180606001604052806026815260200161479b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612eeb91906138f0565b60405180910390a3505050565b6000612f0330610e84565b90506000601854601654601754612f1a9190613bb9565b612f249190613bb9565b90506000821480612f355750600081145b15612f415750506131da565b600a600954612f5091906142e1565b8210612f6857600a600954612f6591906142e1565b91505b600060028260175485612f7b91906142e1565b612f85919061436a565b612f8f919061436a565b90506000612fa682856132a590919063ffffffff16565b90506000479050612fb6826132ef565b6000612fcb82476132a590919063ffffffff16565b90506000612ff686612fe8601654856131dc90919063ffffffff16565b61325690919063ffffffff16565b9050600061302187613013601854866131dc90919063ffffffff16565b61325690919063ffffffff16565b90506000818385613032919061439b565b61303c919061439b565b90506000601781905550600060168190555060006018819055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161309e90614400565b60006040518083038185875af1925050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b505090506000881180156130f45750600082115b1561314157613103888361352c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161313893929190614415565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318790614400565b60006040518083038185875af1925050503d80600081146131c4576040519150601f19603f3d011682016040523d82523d6000602084013e6131c9565b606091505b505080915050505050505050505050505b565b60008083036131ee5760009050613250565b600082846131fc91906142e1565b905082848261320b919061436a565b1461324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906144be565b60405180910390fd5b809150505b92915050565b600061329883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061360d565b905092915050565b505050565b60006132e783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b60565b905092915050565b6000600267ffffffffffffffff81111561330c5761330b6144de565b5b60405190808252806020026020018201604052801561333a5781602001602082028036833780820191505090505b50905030816000815181106133525761335161450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341b9190614551565b8160018151811061342f5761342e61450d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613494307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134f6959493929190614677565b600060405180830381600087803b15801561351057600080fd5b505af1158015613524573d6000803e3d6000fd5b505050505050565b613557307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135a1611401565b426040518863ffffffff1660e01b81526004016135c3969594939291906146d1565b60606040518083038185885af11580156135e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136069190614747565b5050505050565b60008083118290613654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364b9190613709565b60405180910390fd5b5060008385613663919061436a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136aa57808201518184015260208101905061368f565b838111156136b9576000848401525b50505050565b6000601f19601f8301169050919050565b60006136db82613670565b6136e5818561367b565b93506136f581856020860161368c565b6136fe816136bf565b840191505092915050565b6000602082019050818103600083015261372381846136d0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061375b82613730565b9050919050565b61376b81613750565b811461377657600080fd5b50565b60008135905061378881613762565b92915050565b6000819050919050565b6137a18161378e565b81146137ac57600080fd5b50565b6000813590506137be81613798565b92915050565b600080604083850312156137db576137da61372b565b5b60006137e985828601613779565b92505060206137fa858286016137af565b9150509250929050565b60008115159050919050565b61381981613804565b82525050565b60006020820190506138346000830184613810565b92915050565b6000602082840312156138505761384f61372b565b5b600061385e84828501613779565b91505092915050565b6000819050919050565b600061388c61388761388284613730565b613867565b613730565b9050919050565b600061389e82613871565b9050919050565b60006138b082613893565b9050919050565b6138c0816138a5565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6138ea8161378e565b82525050565b600060208201905061390560008301846138e1565b92915050565b6000806000606084860312156139245761392361372b565b5b600061393286828701613779565b935050602061394386828701613779565b9250506040613954868287016137af565b9150509250925092565b61396781613750565b82525050565b6000602082019050613982600083018461395e565b92915050565b600060ff82169050919050565b61399e81613988565b82525050565b60006020820190506139b96000830184613995565b92915050565b6139c881613804565b81146139d357600080fd5b50565b6000813590506139e5816139bf565b92915050565b60008060408385031215613a0257613a0161372b565b5b6000613a1085828601613779565b9250506020613a21858286016139d6565b9150509250929050565b600080600060608486031215613a4457613a4361372b565b5b6000613a52868287016137af565b9350506020613a63868287016137af565b9250506040613a74868287016137af565b9150509250925092565b60008060408385031215613a9557613a9461372b565b5b6000613aa385828601613779565b9250506020613ab485828601613779565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b0557607f821691505b602082108103613b1857613b17613abe565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b5460208361367b565b9150613b5f82613b1e565b602082019050919050565b60006020820190508181036000830152613b8381613b47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bc48261378e565b9150613bcf8361378e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0457613c03613b8a565b5b828201905092915050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b6000613c45601c8361367b565b9150613c5082613c0f565b602082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cd760398361367b565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613d43601d8361367b565b9150613d4e82613d0d565b602082019050919050565b60006020820190508181036000830152613d7281613d36565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613dd560268361367b565b9150613de082613d79565b604082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e41601b8361367b565b9150613e4c82613e0b565b602082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ed360248361367b565b9150613ede82613e77565b604082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f6560228361367b565b9150613f7082613f09565b604082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ff760258361367b565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061408960238361367b565b91506140948261402d565b604082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140f560168361367b565b9150614100826140bf565b602082019050919050565b60006020820190508181036000830152614124816140e8565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141ad60498361367b565b91506141b88261412b565b606082019050919050565b600060208201905081810360008301526141dc816141a0565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614219601b8361367b565b9150614224826141e3565b602082019050919050565b600060208201905081810360008301526142488161420c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142ab60368361367b565b91506142b68261424f565b604082019050919050565b600060208201905081810360008301526142da8161429e565b9050919050565b60006142ec8261378e565b91506142f78361378e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143305761432f613b8a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143758261378e565b91506143808361378e565b9250826143905761438f61433b565b5b828204905092915050565b60006143a68261378e565b91506143b18361378e565b9250828210156143c4576143c3613b8a565b5b828203905092915050565b600081905092915050565b50565b60006143ea6000836143cf565b91506143f5826143da565b600082019050919050565b600061440b826143dd565b9150819050919050565b600060608201905061442a60008301866138e1565b61443760208301856138e1565b61444460408301846138e1565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144a860218361367b565b91506144b38261444c565b604082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061454b81613762565b92915050565b6000602082840312156145675761456661372b565b5b60006145758482850161453c565b91505092915050565b6000819050919050565b60006145a361459e6145998461457e565b613867565b61378e565b9050919050565b6145b381614588565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145ee81613750565b82525050565b600061460083836145e5565b60208301905092915050565b6000602082019050919050565b6000614624826145b9565b61462e81856145c4565b9350614639836145d5565b8060005b8381101561466a57815161465188826145f4565b975061465c8361460c565b92505060018101905061463d565b5085935050505092915050565b600060a08201905061468c60008301886138e1565b61469960208301876145aa565b81810360408301526146ab8186614619565b90506146ba606083018561395e565b6146c760808301846138e1565b9695505050505050565b600060c0820190506146e6600083018961395e565b6146f360208301886138e1565b61470060408301876145aa565b61470d60608301866145aa565b61471a608083018561395e565b61472760a08301846138e1565b979650505050505050565b60008151905061474181613798565b92915050565b6000806000606084860312156147605761475f61372b565b5b600061476e86828701614732565b935050602061477f86828701614732565b925050604061479086828701614732565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aad8e73561a6c9551d0b755587151c865ef1c22453f91255940e76eaa8fb098e64736f6c634300080f0033

Deployed Bytecode Sourcemap

17327:12538:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5050:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5964:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18528:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17401:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5371:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18302:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18384;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18344;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6141:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17504:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5270:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6504:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17459:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17799:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23464:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18191:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17879:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5487:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10897:148;;;;;;;;;;;;;:::i;:::-;;21516:159;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21829:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17596:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18076;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21985:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21396:112;;;;;;;;;;;;;:::i;:::-;;10683:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18226:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5158:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23010:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6730:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5622:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18150:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18599:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17839:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22820:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22401:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17994:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17684:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18042:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17633:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5805:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17726:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21683:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18424:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18113:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11053:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18264:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17766:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5050:100;5104:13;5137:5;5130:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5050:100;:::o;5964:169::-;6047:4;6064:39;6073:12;:10;:12::i;:::-;6087:7;6096:6;6064:8;:39::i;:::-;6121:4;6114:11;;5964:169;;;;:::o;18528:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17401:51::-;;;:::o;5371:108::-;5432:7;5459:12;;5452:19;;5371:108;:::o;18302:33::-;;;;:::o;18384:::-;;;;:::o;18344:::-;;;;:::o;6141:355::-;6281:4;6298:36;6308:6;6316:9;6327:6;6298:9;:36::i;:::-;6345:121;6354:6;6362:12;:10;:12::i;:::-;6376:89;6414:6;6376:89;;;;;;;;;;;;;;;;;:11;:19;6388:6;6376:19;;;;;;;;;;;;;;;:33;6396:12;:10;:12::i;:::-;6376:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6345:8;:121::i;:::-;6484:4;6477:11;;6141:355;;;;;:::o;17504:53::-;17550:6;17504:53;:::o;5270:93::-;5328:5;5353:2;5346:9;;5270:93;:::o;6504:218::-;6592:4;6609:83;6618:12;:10;:12::i;:::-;6632:7;6641:50;6680:10;6641:11;:25;6653:12;:10;:12::i;:::-;6641:25;;;;;;;;;;;;;;;:34;6667:7;6641:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6609:8;:83::i;:::-;6710:4;6703:11;;6504:218;;;;:::o;17459:38::-;;;:::o;17799:33::-;;;;;;;;;;;;;:::o;23464:127::-;23531:4;23555:19;:28;23575:7;23555:28;;;;;;;;;;;;;;;;;;;;;;;;;23548:35;;23464:127;;;:::o;18191:28::-;;;;:::o;17879:31::-;;;;;;;;;;;;;:::o;5487:127::-;5561:7;5588:9;:18;5598:7;5588:18;;;;;;;;;;;;;;;;5581:25;;5487:127;;;:::o;10897:148::-;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11004:1:::1;10967:40;;10988:6;;;;;;;;;;;10967:40;;;;;;;;;;;;11035:1;11018:6;;:19;;;;;;;;;;;;;;;;;;10897:148::o:0;21516:159::-;21568:4;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21601:5:::1;21584:14;;:22;;;;;;;;;;;;;;;;;;21640:5;21617:20;;:28;;;;;;;;;;;;;;;;;;21663:4;21656:11;;21516:159:::0;:::o;21829:144::-;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21961:4:::1;21919:31;:39;21951:6;21919:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21829:144:::0;;:::o;17596:30::-;;;;;;;;;;;;;:::o;18076:::-;;;;:::o;21985:404::-;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22132:13:::1;22114:15;:31;;;;22174:13;22156:15;:31;;;;22218:15;22198:17;:35;;;;22295:17;;22277:15;;22259;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;22244:12;:68;;;;22347:1;22331:12;;:17;;22323:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21985:404:::0;;;:::o;21396:112::-;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21467:4:::1;21451:13;;:20;;;;;;;;;;;;;;;;;;21496:4;21482:11;;:18;;;;;;;;;;;;;;;;;;21396:112::o:0;10683:79::-;10721:7;10748:6;;;;;;;;;;;10741:13;;10683:79;:::o;18226:31::-;;;;:::o;5158:104::-;5214:13;5247:7;5240:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5158:104;:::o;23010:246::-;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23119:13:::1;23111:21;;:4;:21;;::::0;23103:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23207:41;23236:4;23242:5;23207:28;:41::i;:::-;23010:246:::0;;:::o;6730:269::-;6823:4;6840:129;6849:12;:10;:12::i;:::-;6863:7;6872:96;6911:15;6872:96;;;;;;;;;;;;;;;;;:11;:25;6884:12;:10;:12::i;:::-;6872:25;;;;;;;;;;;;;;;:34;6898:7;6872:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6840:8;:129::i;:::-;6987:4;6980:11;;6730:269;;;;:::o;5622:175::-;5708:4;5725:42;5735:12;:10;:12::i;:::-;5749:9;5760:6;5725:9;:42::i;:::-;5785:4;5778:11;;5622:175;;;;:::o;18150:32::-;;;;:::o;18599:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17839:33::-;;;;;;;;;;;;;:::o;22820:182::-;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22936:8:::1;22905:19;:28;22925:7;22905:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22976:7;22960:34;;;22985:8;22960:34;;;;;;:::i;:::-;;;;;;;;22820:182:::0;;:::o;22401:411::-;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22545:13:::1;22526:16;:32;;;;22588:13;22569:16;:32;;;;22633:15;22612:18;:36;;;;22713:18;;22694:16;;22675;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;22659:13;:72;;;;22767:3;22750:13;;:20;;22742:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22401:411:::0;;;:::o;17994:39::-;;;;;;;;;;;;;:::o;17684:35::-;;;;:::o;18042:27::-;;;;:::o;17633:38::-;;;;;;;;;;;;;:::o;5805:151::-;5894:7;5921:11;:18;5933:5;5921:18;;;;;;;;;;;;;;;:27;5940:7;5921:27;;;;;;;;;;;;;;;;5914:34;;5805:151;;;;:::o;17726:33::-;;;;:::o;21683:134::-;21743:4;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21782:5:::1;21759:20;;:28;;;;;;;;;;;;;;;;;;21805:4;21798:11;;21683:134:::0;:::o;18424:35::-;;;;:::o;18113:30::-;;;;:::o;11053:244::-;10820:12;:10;:12::i;:::-;10810:22;;:6;;;;;;;;;;;:22;;;10802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11162:1:::1;11142:22;;:8;:22;;::::0;11134:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11252:8;11223:38;;11244:6;;;;;;;;;;;11223:38;;;;;;;;;;;;11281:8;11272:6;;:17;;;;;;;;;;;;;;;;;;11053:244:::0;:::o;18264:31::-;;;;:::o;17766:24::-;;;;:::o;8932:179::-;8990:7;9010:9;9026:1;9022;:5;;;;:::i;:::-;9010:17;;9051:1;9046;:6;;9038:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9102:1;9095:8;;;8932:179;;;;:::o;321:98::-;374:7;401:10;394:17;;321:98;:::o;8388:378::-;8541:1;8524:19;;:5;:19;;;8516:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8622:1;8603:21;;:7;:21;;;8595:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8704:6;8674:11;:18;8686:5;8674:18;;;;;;;;;;;;;;;:27;8693:7;8674:27;;;;;;;;;;;;;;;:36;;;;8742:7;8726:32;;8735:5;8726:32;;;8751:6;8726:32;;;;;;:::i;:::-;;;;;;;;8388:378;;;:::o;23603:3714::-;23751:1;23735:18;;:4;:18;;;23727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23828:1;23814:16;;:2;:16;;;23806:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23905:1;23895:6;:11;23892:92;;23923:28;23939:4;23945:2;23949:1;23923:15;:28::i;:::-;23966:7;;23892:92;24007:14;;;;;;;;;;;24004:1579;;;24067:7;:5;:7::i;:::-;24059:15;;:4;:15;;;;:50;;;;;24102:7;:5;:7::i;:::-;24096:13;;:2;:13;;;;24059:50;:88;;;;;24145:1;24131:16;;:2;:16;;;;24059:88;:130;;;;;24182:6;24168:21;;:2;:21;;;;24059:130;:160;;;;;24211:8;;;;;;;;;;;24210:9;24059:160;24037:1535;;;24258:13;;;;;;;;;;;24254:148;;24303:19;:25;24323:4;24303:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24332:19;:23;24352:2;24332:23;;;;;;;;;;;;;;;;;;;;;;;;;24303:52;24295:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24254:148;24426:20;;;;;;;;;;;24422:423;;;24480:7;:5;:7::i;:::-;24474:13;;:2;:13;;;;:47;;;;;24505:15;24491:30;;:2;:30;;;;24474:47;:79;;;;;24539:13;24525:28;;:2;:28;;;;24474:79;24470:356;;;24631:12;24589:28;:39;24618:9;24589:39;;;;;;;;;;;;;;;;:54;24581:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24790:12;24748:28;:39;24777:9;24748:39;;;;;;;;;;;;;;;:54;;;;24470:356;24422:423;24914:25;:31;24940:4;24914:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;24950:31;:35;24982:2;24950:35;;;;;;;;;;;;;;;;;;;;;;;;;24949:36;24914:71;24910:647;;;25044:9;;25027:13;25037:2;25027:9;:13::i;:::-;25018:6;:22;;;;:::i;:::-;:35;;25010:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24910:647;;;25162:25;:29;25188:2;25162:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25196:31;:37;25228:4;25196:37;;;;;;;;;;;;;;;;;;;;;;;;;25195:38;25162:71;25158:399;;;25276:20;;25266:6;:30;;25258:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25158:399;;;25402:31;:35;25434:2;25402:35;;;;;;;;;;;;;;;;;;;;;;;;;25398:159;;25496:9;;25479:13;25489:2;25479:9;:13::i;:::-;25470:6;:22;;;;:::i;:::-;:35;;25462:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25398:159;25158:399;24910:647;24037:1535;24004:1579;25597:28;25628:24;25646:4;25628:9;:24::i;:::-;25597:55;;25673:12;25712:18;;25688:20;:42;;25673:57;;25761:7;:35;;;;;25785:11;;;;;;;;;;;25761:35;:61;;;;;25814:8;;;;;;;;;;;25813:9;25761:61;:110;;;;;25840:25;:31;25866:4;25840:31;;;;;;;;;;;;;;;;;;;;;;;;;25839:32;25761:110;:153;;;;;25889:19;:25;25909:4;25889:25;;;;;;;;;;;;;;;;;;;;;;;;;25888:26;25761:153;:194;;;;;25932:19;:23;25952:2;25932:23;;;;;;;;;;;;;;;;;;;;;;;;;25931:24;25761:194;25743:338;;;25993:4;25982:8;;:15;;;;;;;;;;;;;;;;;;26026:10;:8;:10::i;:::-;26064:5;26053:8;;:16;;;;;;;;;;;;;;;;;;25743:338;26101:12;26117:8;;;;;;;;;;;26116:9;26101:24;;26141:19;:25;26161:4;26141:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26170:19;:23;26190:2;26170:23;;;;;;;;;;;;;;;;;;;;;;;;;26141:52;26138:99;;;26220:5;26210:15;;26138:99;26257:12;26287:7;26284:980;;;26328:25;:29;26354:2;26328:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26377:1;26361:13;;:17;26328:50;26324:771;;;26405:34;26435:3;26405:25;26416:13;;26405:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26398:41;;26506:13;;26487:16;;26480:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26458:18;;:61;;;;;;;:::i;:::-;;;;;;;;26590:13;;26569:18;;26562:4;:25;;;;:::i;:::-;:41;;;;:::i;:::-;26538:20;;:65;;;;;;;:::i;:::-;;;;;;;;26670:13;;26651:16;;26644:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26622:18;;:61;;;;;;;:::i;:::-;;;;;;;;26324:771;;;26735:25;:31;26761:4;26735:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26785:1;26770:12;;:16;26735:51;26732:363;;;26811:33;26840:3;26811:24;26822:12;;26811:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26804:40;;26907:12;;26889:15;;26882:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26860:18;;:59;;;;;;;:::i;:::-;;;;;;;;26989:12;;26969:17;;26962:4;:24;;;;:::i;:::-;:39;;;;:::i;:::-;26938:20;;:63;;;;;;;:::i;:::-;;;;;;;;27067:12;;27049:15;;27042:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27020:18;;:59;;;;;;;:::i;:::-;;;;;;;;26732:363;26324:771;27133:1;27126:4;:8;27123:93;;;27158:42;27174:4;27188;27195;27158:15;:42::i;:::-;27123:93;27248:4;27238:14;;;;;:::i;:::-;;;26284:980;27276:33;27292:4;27298:2;27302:6;27276:15;:33::i;:::-;23716:3601;;;;23603:3714;;;;:::o;9263:190::-;9349:7;9382:1;9377;:6;;9385:12;9369:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9409:9;9425:1;9421;:5;;;;:::i;:::-;9409:17;;9444:1;9437:8;;;9263:190;;;;;:::o;23268:188::-;23385:5;23351:25;:31;23377:4;23351:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23442:5;23408:40;;23436:4;23408:40;;;;;;;;;;;;23268:188;;:::o;7007:569::-;7165:1;7147:20;;:6;:20;;;7139:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7249:1;7228:23;;:9;:23;;;7220:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7302:47;7323:6;7331:9;7342:6;7302:20;:47::i;:::-;7380:71;7402:6;7380:71;;;;;;;;;;;;;;;;;:9;:17;7390:6;7380:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7360:9;:17;7370:6;7360:17;;;;;;;;;;;;;;;:91;;;;7485:32;7510:6;7485:9;:20;7495:9;7485:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7462:9;:20;7472:9;7462:20;;;;;;;;;;;;;;;:55;;;;7550:9;7533:35;;7542:6;7533:35;;;7561:6;7533:35;;;;;;:::i;:::-;;;;;;;;7007:569;;;:::o;28199:1663::-;28238:23;28264:24;28282:4;28264:9;:24::i;:::-;28238:50;;28299:25;28369:20;;28348:18;;28327;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;28299:90;;28432:1;28413:15;:20;:46;;;;28458:1;28437:17;:22;28413:46;28410:60;;;28462:7;;;;28410:60;28525:2;28504:18;;:23;;;;:::i;:::-;28485:15;:42;28482:114;;28582:2;28561:18;;:23;;;;:::i;:::-;28543:41;;28482:114;28616:23;28701:1;28681:17;28660:18;;28642:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28616:86;;28713:26;28742:36;28762:15;28742;:19;;:36;;;;:::i;:::-;28713:65;;28799:25;28827:21;28799:49;;28861:36;28878:18;28861:16;:36::i;:::-;28919:18;28940:44;28966:17;28940:21;:25;;:44;;;;:::i;:::-;28919:65;;29005:23;29031:57;29070:17;29031:34;29046:18;;29031:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;29005:83;;29099:25;29127:59;29168:17;29127:36;29142:20;;29127:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;29099:87;;29217:23;29274:17;29256:15;29243:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;29217:74;;29343:1;29322:18;:22;;;;29376:1;29355:18;:22;;;;29411:1;29388:20;:24;;;;29436:12;29461:23;;;;;;;;;;;29453:37;;29498:17;29453:67;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29435:85;;;29562:1;29544:15;:19;:42;;;;;29585:1;29567:15;:19;29544:42;29541:210;;;29602:46;29615:15;29632;29602:12;:46::i;:::-;29668:71;29683:18;29703:15;29720:18;;29668:71;;;;;;;;:::i;:::-;;;;;;;;29541:210;29792:15;;;;;;;;;;;29784:29;;29821:21;29784:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29771:76;;;;;28227:1635;;;;;;;;;;28199:1663;:::o;9461:246::-;9519:7;9548:1;9543;:6;9539:47;;9573:1;9566:8;;;;9539:47;9596:9;9612:1;9608;:5;;;;:::i;:::-;9596:17;;9641:1;9636;9632;:5;;;;:::i;:::-;:10;9624:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9698:1;9691:8;;;9461:246;;;;;:::o;9715:132::-;9773:7;9800:39;9804:1;9807;9800:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9793:46;;9715:132;;;;:::o;8774:125::-;;;;:::o;9119:136::-;9177:7;9204:43;9208:1;9211;9204:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9197:50;;9119:136;;;;:::o;27325:488::-;27393:21;27431:1;27417:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27393:40;;27462:4;27444;27449:1;27444:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27488:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27478:4;27483:1;27478:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27523:62;27540:4;27555:15;27573:11;27523:8;:62::i;:::-;27598:15;:66;;;27679:11;27705:1;27722:4;27749;27769:15;27598:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27380:433;27325:488;:::o;27825:366::-;27908:62;27925:4;27940:15;27958:11;27908:8;:62::i;:::-;27983:15;:31;;;28022:9;28055:4;28075:11;28101:1;28118;28135:7;:5;:7::i;:::-;28157:15;27983:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27825:366;;:::o;9855:189::-;9941:7;9973:1;9969;:5;9976:12;9961:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10000:9;10016:1;10012;:5;;;;:::i;:::-;10000:17;;10035:1;10028:8;;;9855: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:179::-;12568:31;12564:1;12556:6;12552:14;12545:55;12428:179;:::o;12613:366::-;12755:3;12776:67;12840:2;12835:3;12776:67;:::i;:::-;12769:74;;12852:93;12941:3;12852:93;:::i;:::-;12970:2;12965:3;12961:12;12954:19;;12613:366;;;:::o;12985:419::-;13151:4;13189:2;13178:9;13174:18;13166:26;;13238:9;13232:4;13228:20;13224:1;13213:9;13209:17;13202:47;13266:131;13392:4;13266:131;:::i;:::-;13258:139;;12985:419;;;:::o;13410:225::-;13550:34;13546:1;13538:6;13534:14;13527:58;13619:8;13614:2;13606:6;13602:15;13595:33;13410:225;:::o;13641:366::-;13783:3;13804:67;13868:2;13863:3;13804:67;:::i;:::-;13797:74;;13880:93;13969:3;13880:93;:::i;:::-;13998:2;13993:3;13989:12;13982:19;;13641:366;;;:::o;14013:419::-;14179:4;14217:2;14206:9;14202:18;14194:26;;14266:9;14260:4;14256:20;14252:1;14241:9;14237:17;14230:47;14294:131;14420:4;14294:131;:::i;:::-;14286:139;;14013:419;;;:::o;14438:177::-;14578:29;14574:1;14566:6;14562:14;14555:53;14438:177;:::o;14621:366::-;14763:3;14784:67;14848:2;14843:3;14784:67;:::i;:::-;14777:74;;14860:93;14949:3;14860:93;:::i;:::-;14978:2;14973:3;14969:12;14962:19;;14621:366;;;:::o;14993:419::-;15159:4;15197:2;15186:9;15182:18;15174:26;;15246:9;15240:4;15236:20;15232:1;15221:9;15217:17;15210:47;15274:131;15400:4;15274:131;:::i;:::-;15266:139;;14993:419;;;:::o;15418:223::-;15558:34;15554:1;15546:6;15542:14;15535:58;15627:6;15622:2;15614:6;15610:15;15603:31;15418:223;:::o;15647:366::-;15789:3;15810:67;15874:2;15869:3;15810:67;:::i;:::-;15803:74;;15886:93;15975:3;15886:93;:::i;:::-;16004:2;15999:3;15995:12;15988:19;;15647:366;;;:::o;16019:419::-;16185:4;16223:2;16212:9;16208:18;16200:26;;16272:9;16266:4;16262:20;16258:1;16247:9;16243:17;16236:47;16300:131;16426:4;16300:131;:::i;:::-;16292:139;;16019:419;;;:::o;16444:221::-;16584:34;16580:1;16572:6;16568:14;16561:58;16653:4;16648:2;16640:6;16636:15;16629:29;16444:221;:::o;16671:366::-;16813:3;16834:67;16898:2;16893:3;16834:67;:::i;:::-;16827:74;;16910:93;16999:3;16910:93;:::i;:::-;17028:2;17023:3;17019:12;17012:19;;16671:366;;;:::o;17043:419::-;17209:4;17247:2;17236:9;17232:18;17224:26;;17296:9;17290:4;17286:20;17282:1;17271:9;17267:17;17260:47;17324:131;17450:4;17324:131;:::i;:::-;17316:139;;17043:419;;;:::o;17468:224::-;17608:34;17604:1;17596:6;17592:14;17585:58;17677:7;17672:2;17664:6;17660:15;17653:32;17468:224;:::o;17698:366::-;17840:3;17861:67;17925:2;17920:3;17861:67;:::i;:::-;17854:74;;17937:93;18026:3;17937:93;:::i;:::-;18055:2;18050:3;18046:12;18039:19;;17698:366;;;:::o;18070:419::-;18236:4;18274:2;18263:9;18259:18;18251:26;;18323:9;18317:4;18313:20;18309:1;18298:9;18294:17;18287:47;18351:131;18477:4;18351:131;:::i;:::-;18343:139;;18070:419;;;:::o;18495:222::-;18635:34;18631:1;18623:6;18619:14;18612:58;18704:5;18699:2;18691:6;18687:15;18680:30;18495:222;:::o;18723:366::-;18865:3;18886:67;18950:2;18945:3;18886:67;:::i;:::-;18879:74;;18962:93;19051:3;18962:93;:::i;:::-;19080:2;19075:3;19071:12;19064:19;;18723:366;;;:::o;19095:419::-;19261:4;19299:2;19288:9;19284:18;19276:26;;19348:9;19342:4;19338:20;19334:1;19323:9;19319:17;19312:47;19376:131;19502:4;19376:131;:::i;:::-;19368:139;;19095:419;;;:::o;19520:172::-;19660:24;19656:1;19648:6;19644:14;19637:48;19520:172;:::o;19698:366::-;19840:3;19861:67;19925:2;19920:3;19861:67;:::i;:::-;19854:74;;19937:93;20026:3;19937:93;:::i;:::-;20055:2;20050:3;20046:12;20039:19;;19698:366;;;:::o;20070:419::-;20236:4;20274:2;20263:9;20259:18;20251:26;;20323:9;20317:4;20313:20;20309:1;20298:9;20294:17;20287:47;20351:131;20477:4;20351:131;:::i;:::-;20343:139;;20070:419;;;:::o;20495:297::-;20635:34;20631:1;20623:6;20619:14;20612:58;20704:34;20699:2;20691:6;20687:15;20680:59;20773:11;20768:2;20760:6;20756:15;20749:36;20495:297;:::o;20798:366::-;20940:3;20961:67;21025:2;21020:3;20961:67;:::i;:::-;20954:74;;21037:93;21126:3;21037:93;:::i;:::-;21155:2;21150:3;21146:12;21139:19;;20798:366;;;:::o;21170:419::-;21336:4;21374:2;21363:9;21359:18;21351:26;;21423:9;21417:4;21413:20;21409:1;21398:9;21394:17;21387:47;21451:131;21577:4;21451:131;:::i;:::-;21443:139;;21170:419;;;:::o;21595:177::-;21735:29;21731:1;21723:6;21719:14;21712:53;21595:177;:::o;21778:366::-;21920:3;21941:67;22005:2;22000:3;21941:67;:::i;:::-;21934:74;;22017:93;22106:3;22017:93;:::i;:::-;22135:2;22130:3;22126:12;22119:19;;21778:366;;;:::o;22150:419::-;22316:4;22354:2;22343:9;22339:18;22331:26;;22403:9;22397:4;22393:20;22389:1;22378:9;22374:17;22367:47;22431:131;22557:4;22431:131;:::i;:::-;22423:139;;22150:419;;;:::o;22575:241::-;22715:34;22711:1;22703:6;22699:14;22692:58;22784:24;22779:2;22771:6;22767:15;22760:49;22575:241;:::o;22822:366::-;22964:3;22985:67;23049:2;23044:3;22985:67;:::i;:::-;22978:74;;23061:93;23150:3;23061:93;:::i;:::-;23179:2;23174:3;23170:12;23163:19;;22822:366;;;:::o;23194:419::-;23360:4;23398:2;23387:9;23383:18;23375:26;;23447:9;23441:4;23437:20;23433:1;23422:9;23418:17;23411:47;23475:131;23601:4;23475:131;:::i;:::-;23467:139;;23194:419;;;:::o;23619:348::-;23659:7;23682:20;23700:1;23682:20;:::i;:::-;23677:25;;23716:20;23734:1;23716:20;:::i;:::-;23711:25;;23904:1;23836:66;23832:74;23829:1;23826:81;23821:1;23814:9;23807:17;23803:105;23800:131;;;23911:18;;:::i;:::-;23800:131;23959:1;23956;23952:9;23941:20;;23619:348;;;;:::o;23973:180::-;24021:77;24018:1;24011:88;24118:4;24115:1;24108:15;24142:4;24139:1;24132:15;24159:185;24199:1;24216:20;24234:1;24216:20;:::i;:::-;24211:25;;24250:20;24268:1;24250:20;:::i;:::-;24245:25;;24289:1;24279:35;;24294:18;;:::i;:::-;24279:35;24336:1;24333;24329:9;24324:14;;24159:185;;;;:::o;24350:191::-;24390:4;24410:20;24428:1;24410:20;:::i;:::-;24405:25;;24444:20;24462:1;24444:20;:::i;:::-;24439:25;;24483:1;24480;24477:8;24474:34;;;24488:18;;:::i;:::-;24474:34;24533:1;24530;24526:9;24518:17;;24350:191;;;;:::o;24547:147::-;24648:11;24685:3;24670:18;;24547:147;;;;:::o;24700:114::-;;:::o;24820:398::-;24979:3;25000:83;25081:1;25076:3;25000:83;:::i;:::-;24993:90;;25092:93;25181:3;25092:93;:::i;:::-;25210:1;25205:3;25201:11;25194:18;;24820:398;;;:::o;25224:379::-;25408:3;25430:147;25573:3;25430:147;:::i;:::-;25423:154;;25594:3;25587:10;;25224:379;;;:::o;25609:442::-;25758:4;25796:2;25785:9;25781:18;25773:26;;25809:71;25877:1;25866:9;25862:17;25853:6;25809:71;:::i;:::-;25890:72;25958:2;25947:9;25943:18;25934:6;25890:72;:::i;:::-;25972;26040:2;26029:9;26025:18;26016:6;25972:72;:::i;:::-;25609:442;;;;;;:::o;26057:220::-;26197:34;26193:1;26185:6;26181:14;26174:58;26266:3;26261:2;26253:6;26249:15;26242:28;26057:220;:::o;26283:366::-;26425:3;26446:67;26510:2;26505:3;26446:67;:::i;:::-;26439:74;;26522:93;26611:3;26522:93;:::i;:::-;26640:2;26635:3;26631:12;26624:19;;26283:366;;;:::o;26655:419::-;26821:4;26859:2;26848:9;26844:18;26836:26;;26908:9;26902:4;26898:20;26894:1;26883:9;26879:17;26872:47;26936:131;27062:4;26936:131;:::i;:::-;26928:139;;26655:419;;;:::o;27080:180::-;27128:77;27125:1;27118:88;27225:4;27222:1;27215:15;27249:4;27246:1;27239:15;27266:180;27314:77;27311:1;27304:88;27411:4;27408:1;27401:15;27435:4;27432:1;27425:15;27452:143;27509:5;27540:6;27534:13;27525:22;;27556:33;27583:5;27556:33;:::i;:::-;27452:143;;;;:::o;27601:351::-;27671:6;27720:2;27708:9;27699:7;27695:23;27691:32;27688:119;;;27726:79;;:::i;:::-;27688:119;27846:1;27871:64;27927:7;27918:6;27907:9;27903:22;27871:64;:::i;:::-;27861:74;;27817:128;27601:351;;;;:::o;27958:85::-;28003:7;28032:5;28021:16;;27958:85;;;:::o;28049:158::-;28107:9;28140:61;28158:42;28167:32;28193:5;28167:32;:::i;:::-;28158:42;:::i;:::-;28140:61;:::i;:::-;28127:74;;28049:158;;;:::o;28213:147::-;28308:45;28347:5;28308:45;:::i;:::-;28303:3;28296:58;28213:147;;:::o;28366:114::-;28433:6;28467:5;28461:12;28451:22;;28366:114;;;:::o;28486:184::-;28585:11;28619:6;28614:3;28607:19;28659:4;28654:3;28650:14;28635:29;;28486:184;;;;:::o;28676:132::-;28743:4;28766:3;28758:11;;28796:4;28791:3;28787:14;28779:22;;28676:132;;;:::o;28814:108::-;28891:24;28909:5;28891:24;:::i;:::-;28886:3;28879:37;28814:108;;:::o;28928:179::-;28997:10;29018:46;29060:3;29052:6;29018:46;:::i;:::-;29096:4;29091:3;29087:14;29073:28;;28928:179;;;;:::o;29113:113::-;29183:4;29215;29210:3;29206:14;29198:22;;29113:113;;;:::o;29262:732::-;29381:3;29410:54;29458:5;29410:54;:::i;:::-;29480:86;29559:6;29554:3;29480:86;:::i;:::-;29473:93;;29590:56;29640:5;29590:56;:::i;:::-;29669:7;29700:1;29685:284;29710:6;29707:1;29704:13;29685:284;;;29786:6;29780:13;29813:63;29872:3;29857:13;29813:63;:::i;:::-;29806:70;;29899:60;29952:6;29899:60;:::i;:::-;29889:70;;29745:224;29732:1;29729;29725:9;29720:14;;29685:284;;;29689:14;29985:3;29978:10;;29386:608;;;29262:732;;;;:::o;30000:831::-;30263:4;30301:3;30290:9;30286:19;30278:27;;30315:71;30383:1;30372:9;30368:17;30359:6;30315:71;:::i;:::-;30396:80;30472:2;30461:9;30457:18;30448:6;30396:80;:::i;:::-;30523:9;30517:4;30513:20;30508:2;30497:9;30493:18;30486:48;30551:108;30654:4;30645:6;30551:108;:::i;:::-;30543:116;;30669:72;30737:2;30726:9;30722:18;30713:6;30669:72;:::i;:::-;30751:73;30819:3;30808:9;30804:19;30795:6;30751:73;:::i;:::-;30000:831;;;;;;;;:::o;30837:807::-;31086:4;31124:3;31113:9;31109:19;31101:27;;31138:71;31206:1;31195:9;31191:17;31182:6;31138:71;:::i;:::-;31219:72;31287:2;31276:9;31272:18;31263:6;31219:72;:::i;:::-;31301:80;31377:2;31366:9;31362:18;31353:6;31301:80;:::i;:::-;31391;31467:2;31456:9;31452:18;31443:6;31391:80;:::i;:::-;31481:73;31549:3;31538:9;31534:19;31525:6;31481:73;:::i;:::-;31564;31632:3;31621:9;31617:19;31608:6;31564:73;:::i;:::-;30837:807;;;;;;;;;:::o;31650:143::-;31707:5;31738:6;31732:13;31723:22;;31754:33;31781:5;31754:33;:::i;:::-;31650:143;;;;:::o;31799:663::-;31887:6;31895;31903;31952:2;31940:9;31931:7;31927:23;31923:32;31920:119;;;31958:79;;:::i;:::-;31920:119;32078:1;32103:64;32159:7;32150:6;32139:9;32135:22;32103:64;:::i;:::-;32093:74;;32049:128;32216:2;32242:64;32298:7;32289:6;32278:9;32274:22;32242:64;:::i;:::-;32232:74;;32187:129;32355:2;32381:64;32437:7;32428:6;32417:9;32413:22;32381:64;:::i;:::-;32371:74;;32326:129;31799:663;;;;;:::o

Swarm Source

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