ETH Price: $2,965.21 (+1.16%)
Gas: 2 Gwei

Token

TOR Enhancer (TER)
 

Overview

Max Total Supply

10,000,000 TER

Holders

140

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
12,829.532593485 TER

Value
$0.00
0x0bc8a2a32c701d0756831451496a0c2942cf5bdc
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:
TORENHANCER

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT



pragma solidity ^0.8.4;

abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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);
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed prevOwner, address indexed newOwner);
    constructor () {
        _owner = 0x6292A68901cFaea9E5cebE3bBd6282d56107532e; // owner address
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view virtual 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);
    }
}

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 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 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 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 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 TORENHANCER is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "TOR Enhancer";
    string private _symbol = "TER"; 

    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x871D2963eE5c570F0005451ee08d2f8f2Ba21dB6); // Marketing Address
    address payable public teamWalletAddress = payable(0xdc8095082AD1bdEF11aCdBB3850Ab7243D8aFD67); // Team Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;
    mapping (address => bool) public _isBlacklisted;

    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyMarketingFee = 3;
    uint256 public _buyTeamFee = 1;

    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellMarketingFee = 3;
    uint256 public _sellTeamFee = 1;
    

    uint256 public _liquidityShare = 3; // original 5
    uint256 public _marketingShare = 9;
    uint256 public _teamShare = 3; // original 12

    uint256 public _totalTaxIfBuying = 5;  // original 12
    uint256 public _totalTaxIfSelling = 5;  // original 12
    uint256 public _totalDistributionShares = 15;  // original 12

    uint256 private _totalSupply = 10000000 * 10**_decimals;
    uint256 public _maxTxAmount = 300000 * 10**_decimals; 
    uint256 public _walletMax = 300000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 1000 * 10**3;

    

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[marketingWalletAddress] = true;
        isExcludedFromFee[teamWalletAddress] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[marketingWalletAddress] = true;
        isWalletLimitExempt[teamWalletAddress] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[marketingWalletAddress] = true;
        isTxLimitExempt[teamWalletAddress] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);

        
    }

    function remoFromBlacklist(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }

    function addBlakcklist(address[] calldata addresses) external onlyOwner {
        for (uint256 i; i <addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = true;
            
        }   
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

    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 minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    } 

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

    function _approve(address owner, address spender, uint256 amount) private {
        
        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 setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
      
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "This address is blacklisted");
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        
        if(inSwapAndLiquify)
        {  return _basicTransfer(sender, recipient, amount);}

        
        else
        {
            
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            } 


            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;

            
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);        
        emit Transfer(sender, recipient, amount);
        return true; 
        
    
    }
    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountBNBMarketing);

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

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":true,"internalType":"address","name":"prevOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"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":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","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":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addBlakcklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":[{"internalType":"address","name":"account","type":"address"}],"name":"remoFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600c81526020017f544f5220456e68616e6365720000000000000000000000000000000000000000815250600190805190602001906200005192919062000ea9565b506040518060400160405280600381526020017f5445520000000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f92919062000ea9565b506009600360006101000a81548160ff021916908360ff16021790555073871d2963ee5c570f0005451ee08d2f8f2ba21db6600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dc8095082ad1bdef11acdbb3850ab7243d8afd67600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506001600c556003600d556001600e556001600f556003601055600160115560036012556009601355600360145560056015556005601655600f601755600360009054906101000a900460ff16600a620001f891906200111a565b6298968062000208919062001257565b601855600360009054906101000a900460ff16600a6200022991906200111a565b620493e062000239919062001257565b601955600360009054906101000a900460ff16600a6200025a91906200111a565b620493e06200026a919062001257565b601a55620f4240601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002d257600080fd5b50736292a68901cfaea9e5cebe3bbd6282d56107532e6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040257600080fd5b505afa15801562000417573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043d919062000f70565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004a057600080fd5b505afa158015620004b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004db919062000f70565b6040518363ffffffff1660e01b8152600401620004fa92919062000fe5565b602060405180830381600087803b1580156200051557600080fd5b505af11580156200052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000550919062000f70565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200068c62000e1560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000862600e546200084e600d54600c5462000e3e60201b62001bb11790919060201c565b62000e3e60201b62001bb11790919060201c565b601581905550620008a16011546200088d601054600f5462000e3e60201b62001bb11790919060201c565b62000e3e60201b62001bb11790919060201c565b601681905550620008e0601454620008cc60135460125462000e3e60201b62001bb11790919060201c565b62000e3e60201b62001bb11790919060201c565b601781905550600160086000620008fc62000e1560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600062000b2962000e1560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018546005600062000d5762000ea160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000da562000ea160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000e06919062001034565b60405180910390a350620013e7565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000e4f919062001062565b90508381101562000e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e8e9062001012565b60405180910390fd5b8091505092915050565b600033905090565b82805462000eb79062001303565b90600052602060002090601f01602090048101928262000edb576000855562000f27565b82601f1062000ef657805160ff191683800117855562000f27565b8280016001018555821562000f27579182015b8281111562000f2657825182559160200191906001019062000f09565b5b50905062000f36919062000f3a565b5090565b5b8082111562000f5557600081600090555060010162000f3b565b5090565b60008151905062000f6a81620013cd565b92915050565b60006020828403121562000f8357600080fd5b600062000f938482850162000f59565b91505092915050565b62000fa781620012b8565b82525050565b600062000fbc601b8362001051565b915062000fc982620013a4565b602082019050919050565b62000fdf81620012ec565b82525050565b600060408201905062000ffc600083018562000f9c565b6200100b602083018462000f9c565b9392505050565b600060208201905081810360008301526200102d8162000fad565b9050919050565b60006020820190506200104b600083018462000fd4565b92915050565b600082825260208201905092915050565b60006200106f82620012ec565b91506200107c83620012ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010b457620010b362001339565b5b828201905092915050565b6000808291508390505b60018511156200111157808604811115620010e957620010e862001339565b5b6001851615620010f95780820291505b8081029050620011098562001397565b9450620010c9565b94509492505050565b60006200112782620012ec565b91506200113483620012f6565b9250620011637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200116b565b905092915050565b6000826200117d576001905062001250565b816200118d576000905062001250565b8160018114620011a65760028114620011b157620011e7565b600191505062001250565b60ff841115620011c657620011c562001339565b5b8360020a915084821115620011e057620011df62001339565b5b5062001250565b5060208310610133831016604e8410600b8410161715620012215782820a9050838111156200121b576200121a62001339565b5b62001250565b620012308484846001620010bf565b925090508184048111156200124a576200124962001339565b5b81810290505b9392505050565b60006200126482620012ec565b91506200127183620012ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620012ad57620012ac62001339565b5b828202905092915050565b6000620012c582620012cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200131c57607f821691505b6020821081141562001333576200133262001368565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b620013d881620012b8565b8114620013e457600080fd5b50565b60805160601c61405b6200140d600039600081816111e3015261120f015261405b6000f3fe6080604052600436106102e85760003560e01c806388790a6811610190578063c8607952116100dc578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610b91578063f473fc3914610bba578063f84ba65d14610be3578063f872858a14610c0c576102ef565b8063dd62ed3e14610b00578063ec28438a14610b3d578063f0cd1dac14610b66576102ef565b8063c8607952146109ec578063c867d60b14610a17578063cab0347114610a54578063d158272d14610a7f578063da00097d14610aaa578063dc44b6a014610ad5576102ef565b8063a457c2d711610149578063c469b6dd11610123578063c469b6dd14610942578063c49b9a801461096d578063c5d2418914610996578063c816841b146109c1576102ef565b8063a457c2d71461089d578063a83f53a7146108da578063a9059cbb14610905576102ef565b806388790a68146107895780638b42507f146107b45780638da5cb5b146107f157806395d89b411461081c578063a073d37f14610847578063a08e671f14610872576102ef565b80632b112e491161024f57806357a5802f11610208578063715018a6116101e2578063715018a6146106f15780637d1db4a514610708578063807c2d9c1461073357806382eefb431461075e576102ef565b806357a5802f1461065e57806361a23c691461068957806370a08231146106b4576102ef565b80632b112e4914610526578063313ce56714610551578063395093511461057c5780633ecad271146105b95780634a74bb02146105f65780635342acb414610621576102ef565b80631870517a116102a15780631870517a146104065780631cdd3be31461042f5780631e18c3cd1461046c5780632198cf6c1461049557806323b872dd146104be57806327c8f835146104fb576102ef565b806306fdde03146102f4578063087332141461031f578063095ea7b3146103485780631245e347146103855780631694505e146103b057806318160ddd146103db576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c37565b604051610316919061377a565b60405180910390f35b34801561032b57600080fd5b506103466004803603810190610341919061338a565b610cc9565b005b34801561035457600080fd5b5061036f600480360381019061036a91906132b7565b610d90565b60405161037c9190613744565b60405180910390f35b34801561039157600080fd5b5061039a610dae565b6040516103a791906136c8565b60405180910390f35b3480156103bc57600080fd5b506103c5610dd4565b6040516103d2919061375f565b60405180910390f35b3480156103e757600080fd5b506103f0610dfa565b6040516103fd91906138dc565b60405180910390f35b34801561041257600080fd5b5061042d6004803603810190610428919061338a565b610e04565b005b34801561043b57600080fd5b506104566004803603810190610451919061319e565b610ecb565b6040516104639190613744565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906132f3565b610eeb565b005b3480156104a157600080fd5b506104bc60048036038101906104b7919061327b565b611030565b005b3480156104ca57600080fd5b506104e560048036038101906104e0919061322c565b611107565b6040516104f29190613744565b60405180910390f35b34801561050757600080fd5b506105106111e1565b60405161051d91906136ad565b60405180910390f35b34801561053257600080fd5b5061053b611205565b60405161054891906138dc565b60405180910390f35b34801561055d57600080fd5b50610566611249565b6040516105739190613981565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e91906132b7565b611260565b6040516105b09190613744565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061319e565b611313565b6040516105ed9190613744565b60405180910390f35b34801561060257600080fd5b5061060b611333565b6040516106189190613744565b60405180910390f35b34801561062d57600080fd5b506106486004803603810190610643919061319e565b611346565b6040516106559190613744565b60405180910390f35b34801561066a57600080fd5b50610673611366565b60405161068091906138dc565b60405180910390f35b34801561069557600080fd5b5061069e61136c565b6040516106ab91906138dc565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d6919061319e565b611372565b6040516106e891906138dc565b60405180910390f35b3480156106fd57600080fd5b506107066113bb565b005b34801561071457600080fd5b5061071d6114f5565b60405161072a91906138dc565b60405180910390f35b34801561073f57600080fd5b506107486114fb565b60405161075591906138dc565b60405180910390f35b34801561076a57600080fd5b50610773611501565b60405161078091906138dc565b60405180910390f35b34801561079557600080fd5b5061079e611507565b6040516107ab91906138dc565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061319e565b61150d565b6040516107e89190613744565b60405180910390f35b3480156107fd57600080fd5b5061080661152d565b60405161081391906136ad565b60405180910390f35b34801561082857600080fd5b50610831611556565b60405161083e919061377a565b60405180910390f35b34801561085357600080fd5b5061085c6115e8565b60405161086991906138dc565b60405180910390f35b34801561087e57600080fd5b506108876115f2565b60405161089491906138dc565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf91906132b7565b6115f8565b6040516108d19190613744565b60405180910390f35b3480156108e657600080fd5b506108ef6116c5565b6040516108fc91906138dc565b60405180910390f35b34801561091157600080fd5b5061092c600480360381019061092791906132b7565b6116cb565b6040516109399190613744565b60405180910390f35b34801561094e57600080fd5b506109576116ea565b60405161096491906138dc565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190613338565b6116f0565b005b3480156109a257600080fd5b506109ab6117c0565b6040516109b891906138dc565b60405180910390f35b3480156109cd57600080fd5b506109d66117c6565b6040516109e391906136ad565b60405180910390f35b3480156109f857600080fd5b50610a016117ec565b604051610a0e91906138dc565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a39919061319e565b6117f2565b604051610a4b9190613744565b60405180910390f35b348015610a6057600080fd5b50610a69611812565b604051610a7691906138dc565b60405180910390f35b348015610a8b57600080fd5b50610a94611818565b604051610aa191906136c8565b60405180910390f35b348015610ab657600080fd5b50610abf61183e565b604051610acc9190613744565b60405180910390f35b348015610ae157600080fd5b50610aea611851565b604051610af791906138dc565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b2291906131f0565b611857565b604051610b3491906138dc565b60405180910390f35b348015610b4957600080fd5b50610b646004803603810190610b5f9190613361565b6118de565b005b348015610b7257600080fd5b50610b7b611964565b604051610b8891906138dc565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb39190613361565b61196a565b005b348015610bc657600080fd5b50610be16004803603810190610bdc919061319e565b6119f0565b005b348015610bef57600080fd5b50610c0a6004803603810190610c05919061327b565b611ac7565b005b348015610c1857600080fd5b50610c21611b9e565b604051610c2e9190613744565b60405180910390f35b606060018054610c4690613bd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7290613bd6565b8015610cbf5780601f10610c9457610100808354040283529160200191610cbf565b820191906000526020600020905b815481529060010190602001808311610ca257829003601f168201915b5050505050905090565b610cd1611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610cef61152d565b73ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c9061385c565b60405180910390fd5b82600f819055508160108190555080601181905550610d85601154610d77601054600f54611bb190919063ffffffff16565b611bb190919063ffffffff16565b601681905550505050565b6000610da4610d9d611c0f565b8484611c17565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610e0c611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610e2a61152d565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e779061385c565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610ec0600e54610eb2600d54600c54611bb190919063ffffffff16565b611bb190919063ffffffff16565b601581905550505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b610ef3611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610f1161152d565b73ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e9061385c565b60405180910390fd5b60005b8282905081101561102b576001600b6000858585818110610fb4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610fc9919061319e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061102490613c08565b9050610f6a565b505050565b611038611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661105661152d565b73ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a39061385c565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611114848484611de2565b506111d684611121611c0f565b6111d185604051806060016040528060288152602001613fd960289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611187611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b611c17565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006112446112337f0000000000000000000000000000000000000000000000000000000000000000611372565b60185461255290919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b600061130961126d611c0f565b84611304856006600061127e611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b611c17565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c3611c0f565b73ffffffffffffffffffffffffffffffffffffffff166113e161152d565b73ffffffffffffffffffffffffffffffffffffffff1614611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e9061385c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461156590613bd6565b80601f016020809104026020016040519081016040528092919081815260200182805461159190613bd6565b80156115de5780601f106115b3576101008083540402835291602001916115de565b820191906000526020600020905b8154815290600101906020018083116115c157829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b60006116bb611605611c0f565b846116b685604051806060016040528060258152602001614001602591396006600061162f611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b611c17565b6001905092915050565b60145481565b60006116df6116d8611c0f565b8484611de2565b506001905092915050565b600e5481565b6116f8611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661171661152d565b73ffffffffffffffffffffffffffffffffffffffff161461176c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117639061385c565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516117b59190613744565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118e6611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661190461152d565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061385c565b60405180910390fd5b8060198190555050565b60155481565b611972611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661199061152d565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd9061385c565b60405180910390fd5b80601a8190555050565b6119f8611c0f565b73ffffffffffffffffffffffffffffffffffffffff16611a1661152d565b73ffffffffffffffffffffffffffffffffffffffff1614611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a639061385c565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611acf611c0f565b73ffffffffffffffffffffffffffffffffffffffff16611aed61152d565b73ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061385c565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611bc091906139f1565b905083811015611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc906137dc565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e906138bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906137bc565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dd591906138dc565b60405180910390a3505050565b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e885750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe906137fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e9061389c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e9061379c565b60405180910390fd5b60008211611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe19061387c565b60405180910390fd5b601d60149054906101000a900460ff16156120115761200a84848461259c565b90506124e7565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b55750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612100576019548211156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f69061381c565b60405180910390fd5b5b600061210b30611372565b90506000601b5482101590508080156121315750601d60149054906101000a900460ff16155b80156121875750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561219f5750601d60159054906101000a900460ff165b156121c957601d60169054906101000a900460ff16156121bf57601b5491505b6121c88261276f565b5b612252846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123385750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61234c57612347878787612960565b61234e565b845b9050601d60179054906101000a900460ff1680156123b65750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123e557601a546123d9826123cb89611372565b611bb190919063ffffffff16565b11156123e457600080fd5b5b61243781600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d791906138dc565b60405180910390a3600193505050505b9392505050565b6000838311158290612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d919061377a565b60405180910390fd5b50600083856125459190613ad2565b9050809150509392505050565b600061259483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ee565b905092915050565b6000612627826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126bc82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161275c91906138dc565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006127c860026127ba6017546127ac60125487612b8790919063ffffffff16565b612c0290919063ffffffff16565b612c0290919063ffffffff16565b905060006127df828461255290919063ffffffff16565b90506127ea81612c4c565b6000479050600061281b61280a6002601254612c0290919063ffffffff16565b60175461255290919063ffffffff16565b90506000612859600261284b8461283d60125488612b8790919063ffffffff16565b612c0290919063ffffffff16565b612c0290919063ffffffff16565b905060006128848361287660145487612b8790919063ffffffff16565b612c0290919063ffffffff16565b905060006128ad8261289f858861255290919063ffffffff16565b61255290919063ffffffff16565b905060008111156128e5576128e4600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f49565b5b600082111561291b5761291a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f49565b5b60008311801561292b5750600087115b1561293b5761293a8784612f94565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129e8576129e160646129d360155486612b8790919063ffffffff16565b612c0290919063ffffffff16565b9050612a66565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a6557612a626064612a5460165486612b8790919063ffffffff16565b612c0290919063ffffffff16565b90505b5b6000811115612b6a57612ac181600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b6191906138dc565b60405180910390a35b612b7d818461255290919063ffffffff16565b9150509392505050565b600080831415612b9a5760009050612bfc565b60008284612ba89190613a78565b9050828482612bb79190613a47565b14612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee9061383c565b60405180910390fd5b809150505b92915050565b6000612c4483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613088565b905092915050565b6000600267ffffffffffffffff811115612c8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612cbd5781602001602082028036833780820191505090505b5090503081600081518110612cfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9d57600080fd5b505afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd591906131c7565b81600181518110612e0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e7630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c17565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eda959493929190613927565b600060405180830381600087803b158015612ef457600080fd5b505af1158015612f08573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f3d9291906138f7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f8f573d6000803e3d6000fd5b505050565b612fc130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c17565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061300d61152d565b426040518863ffffffff1660e01b815260040161302f969594939291906136e3565b6060604051808303818588803b15801561304857600080fd5b505af115801561305c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061308191906133d9565b5050505050565b600080831182906130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c6919061377a565b60405180910390fd5b50600083856130de9190613a47565b9050809150509392505050565b6000813590506130fa81613f93565b92915050565b60008151905061310f81613f93565b92915050565b60008083601f84011261312757600080fd5b8235905067ffffffffffffffff81111561314057600080fd5b60208301915083602082028301111561315857600080fd5b9250929050565b60008135905061316e81613faa565b92915050565b60008135905061318381613fc1565b92915050565b60008151905061319881613fc1565b92915050565b6000602082840312156131b057600080fd5b60006131be848285016130eb565b91505092915050565b6000602082840312156131d957600080fd5b60006131e784828501613100565b91505092915050565b6000806040838503121561320357600080fd5b6000613211858286016130eb565b9250506020613222858286016130eb565b9150509250929050565b60008060006060848603121561324157600080fd5b600061324f868287016130eb565b9350506020613260868287016130eb565b925050604061327186828701613174565b9150509250925092565b6000806040838503121561328e57600080fd5b600061329c858286016130eb565b92505060206132ad8582860161315f565b9150509250929050565b600080604083850312156132ca57600080fd5b60006132d8858286016130eb565b92505060206132e985828601613174565b9150509250929050565b6000806020838503121561330657600080fd5b600083013567ffffffffffffffff81111561332057600080fd5b61332c85828601613115565b92509250509250929050565b60006020828403121561334a57600080fd5b60006133588482850161315f565b91505092915050565b60006020828403121561337357600080fd5b600061338184828501613174565b91505092915050565b60008060006060848603121561339f57600080fd5b60006133ad86828701613174565b93505060206133be86828701613174565b92505060406133cf86828701613174565b9150509250925092565b6000806000606084860312156133ee57600080fd5b60006133fc86828701613189565b935050602061340d86828701613189565b925050604061341e86828701613189565b9150509250925092565b6000613434838361344f565b60208301905092915050565b61344981613b18565b82525050565b61345881613b06565b82525050565b61346781613b06565b82525050565b6000613478826139ac565b61348281856139cf565b935061348d8361399c565b8060005b838110156134be5781516134a58882613428565b97506134b0836139c2565b925050600181019050613491565b5085935050505092915050565b6134d481613b2a565b82525050565b6134e381613b6d565b82525050565b6134f281613b91565b82525050565b6000613503826139b7565b61350d81856139e0565b935061351d818560208601613ba3565b61352681613cde565b840191505092915050565b600061353e6023836139e0565b915061354982613cef565b604082019050919050565b60006135616022836139e0565b915061356c82613d3e565b604082019050919050565b6000613584601b836139e0565b915061358f82613d8d565b602082019050919050565b60006135a7601b836139e0565b91506135b282613db6565b602082019050919050565b60006135ca6028836139e0565b91506135d582613ddf565b604082019050919050565b60006135ed6021836139e0565b91506135f882613e2e565b604082019050919050565b60006136106020836139e0565b915061361b82613e7d565b602082019050919050565b60006136336029836139e0565b915061363e82613ea6565b604082019050919050565b60006136566025836139e0565b915061366182613ef5565b604082019050919050565b60006136796024836139e0565b915061368482613f44565b604082019050919050565b61369881613b56565b82525050565b6136a781613b60565b82525050565b60006020820190506136c2600083018461345e565b92915050565b60006020820190506136dd6000830184613440565b92915050565b600060c0820190506136f8600083018961345e565b613705602083018861368f565b61371260408301876134e9565b61371f60608301866134e9565b61372c608083018561345e565b61373960a083018461368f565b979650505050505050565b600060208201905061375960008301846134cb565b92915050565b600060208201905061377460008301846134da565b92915050565b6000602082019050818103600083015261379481846134f8565b905092915050565b600060208201905081810360008301526137b581613531565b9050919050565b600060208201905081810360008301526137d581613554565b9050919050565b600060208201905081810360008301526137f581613577565b9050919050565b600060208201905081810360008301526138158161359a565b9050919050565b60006020820190508181036000830152613835816135bd565b9050919050565b60006020820190508181036000830152613855816135e0565b9050919050565b6000602082019050818103600083015261387581613603565b9050919050565b6000602082019050818103600083015261389581613626565b9050919050565b600060208201905081810360008301526138b581613649565b9050919050565b600060208201905081810360008301526138d58161366c565b9050919050565b60006020820190506138f1600083018461368f565b92915050565b600060408201905061390c600083018561368f565b818103602083015261391e818461346d565b90509392505050565b600060a08201905061393c600083018861368f565b61394960208301876134e9565b818103604083015261395b818661346d565b905061396a606083018561345e565b613977608083018461368f565b9695505050505050565b6000602082019050613996600083018461369e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006139fc82613b56565b9150613a0783613b56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a3c57613a3b613c51565b5b828201905092915050565b6000613a5282613b56565b9150613a5d83613b56565b925082613a6d57613a6c613c80565b5b828204905092915050565b6000613a8382613b56565b9150613a8e83613b56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ac757613ac6613c51565b5b828202905092915050565b6000613add82613b56565b9150613ae883613b56565b925082821015613afb57613afa613c51565b5b828203905092915050565b6000613b1182613b36565b9050919050565b6000613b2382613b36565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613b7882613b7f565b9050919050565b6000613b8a82613b36565b9050919050565b6000613b9c82613b56565b9050919050565b60005b83811015613bc1578082015181840152602081019050613ba6565b83811115613bd0576000848401525b50505050565b60006002820490506001821680613bee57607f821691505b60208210811415613c0257613c01613caf565b5b50919050565b6000613c1382613b56565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c4657613c45613c51565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613f9c81613b06565b8114613fa757600080fd5b50565b613fb381613b2a565b8114613fbe57600080fd5b50565b613fca81613b56565b8114613fd557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a683effcdbd0046a2a22e5c0585755d2767ec854ff5ec78a93aab32b0db3792f64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c806388790a6811610190578063c8607952116100dc578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610b91578063f473fc3914610bba578063f84ba65d14610be3578063f872858a14610c0c576102ef565b8063dd62ed3e14610b00578063ec28438a14610b3d578063f0cd1dac14610b66576102ef565b8063c8607952146109ec578063c867d60b14610a17578063cab0347114610a54578063d158272d14610a7f578063da00097d14610aaa578063dc44b6a014610ad5576102ef565b8063a457c2d711610149578063c469b6dd11610123578063c469b6dd14610942578063c49b9a801461096d578063c5d2418914610996578063c816841b146109c1576102ef565b8063a457c2d71461089d578063a83f53a7146108da578063a9059cbb14610905576102ef565b806388790a68146107895780638b42507f146107b45780638da5cb5b146107f157806395d89b411461081c578063a073d37f14610847578063a08e671f14610872576102ef565b80632b112e491161024f57806357a5802f11610208578063715018a6116101e2578063715018a6146106f15780637d1db4a514610708578063807c2d9c1461073357806382eefb431461075e576102ef565b806357a5802f1461065e57806361a23c691461068957806370a08231146106b4576102ef565b80632b112e4914610526578063313ce56714610551578063395093511461057c5780633ecad271146105b95780634a74bb02146105f65780635342acb414610621576102ef565b80631870517a116102a15780631870517a146104065780631cdd3be31461042f5780631e18c3cd1461046c5780632198cf6c1461049557806323b872dd146104be57806327c8f835146104fb576102ef565b806306fdde03146102f4578063087332141461031f578063095ea7b3146103485780631245e347146103855780631694505e146103b057806318160ddd146103db576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c37565b604051610316919061377a565b60405180910390f35b34801561032b57600080fd5b506103466004803603810190610341919061338a565b610cc9565b005b34801561035457600080fd5b5061036f600480360381019061036a91906132b7565b610d90565b60405161037c9190613744565b60405180910390f35b34801561039157600080fd5b5061039a610dae565b6040516103a791906136c8565b60405180910390f35b3480156103bc57600080fd5b506103c5610dd4565b6040516103d2919061375f565b60405180910390f35b3480156103e757600080fd5b506103f0610dfa565b6040516103fd91906138dc565b60405180910390f35b34801561041257600080fd5b5061042d6004803603810190610428919061338a565b610e04565b005b34801561043b57600080fd5b506104566004803603810190610451919061319e565b610ecb565b6040516104639190613744565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906132f3565b610eeb565b005b3480156104a157600080fd5b506104bc60048036038101906104b7919061327b565b611030565b005b3480156104ca57600080fd5b506104e560048036038101906104e0919061322c565b611107565b6040516104f29190613744565b60405180910390f35b34801561050757600080fd5b506105106111e1565b60405161051d91906136ad565b60405180910390f35b34801561053257600080fd5b5061053b611205565b60405161054891906138dc565b60405180910390f35b34801561055d57600080fd5b50610566611249565b6040516105739190613981565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e91906132b7565b611260565b6040516105b09190613744565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db919061319e565b611313565b6040516105ed9190613744565b60405180910390f35b34801561060257600080fd5b5061060b611333565b6040516106189190613744565b60405180910390f35b34801561062d57600080fd5b506106486004803603810190610643919061319e565b611346565b6040516106559190613744565b60405180910390f35b34801561066a57600080fd5b50610673611366565b60405161068091906138dc565b60405180910390f35b34801561069557600080fd5b5061069e61136c565b6040516106ab91906138dc565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d6919061319e565b611372565b6040516106e891906138dc565b60405180910390f35b3480156106fd57600080fd5b506107066113bb565b005b34801561071457600080fd5b5061071d6114f5565b60405161072a91906138dc565b60405180910390f35b34801561073f57600080fd5b506107486114fb565b60405161075591906138dc565b60405180910390f35b34801561076a57600080fd5b50610773611501565b60405161078091906138dc565b60405180910390f35b34801561079557600080fd5b5061079e611507565b6040516107ab91906138dc565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061319e565b61150d565b6040516107e89190613744565b60405180910390f35b3480156107fd57600080fd5b5061080661152d565b60405161081391906136ad565b60405180910390f35b34801561082857600080fd5b50610831611556565b60405161083e919061377a565b60405180910390f35b34801561085357600080fd5b5061085c6115e8565b60405161086991906138dc565b60405180910390f35b34801561087e57600080fd5b506108876115f2565b60405161089491906138dc565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf91906132b7565b6115f8565b6040516108d19190613744565b60405180910390f35b3480156108e657600080fd5b506108ef6116c5565b6040516108fc91906138dc565b60405180910390f35b34801561091157600080fd5b5061092c600480360381019061092791906132b7565b6116cb565b6040516109399190613744565b60405180910390f35b34801561094e57600080fd5b506109576116ea565b60405161096491906138dc565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190613338565b6116f0565b005b3480156109a257600080fd5b506109ab6117c0565b6040516109b891906138dc565b60405180910390f35b3480156109cd57600080fd5b506109d66117c6565b6040516109e391906136ad565b60405180910390f35b3480156109f857600080fd5b50610a016117ec565b604051610a0e91906138dc565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a39919061319e565b6117f2565b604051610a4b9190613744565b60405180910390f35b348015610a6057600080fd5b50610a69611812565b604051610a7691906138dc565b60405180910390f35b348015610a8b57600080fd5b50610a94611818565b604051610aa191906136c8565b60405180910390f35b348015610ab657600080fd5b50610abf61183e565b604051610acc9190613744565b60405180910390f35b348015610ae157600080fd5b50610aea611851565b604051610af791906138dc565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b2291906131f0565b611857565b604051610b3491906138dc565b60405180910390f35b348015610b4957600080fd5b50610b646004803603810190610b5f9190613361565b6118de565b005b348015610b7257600080fd5b50610b7b611964565b604051610b8891906138dc565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb39190613361565b61196a565b005b348015610bc657600080fd5b50610be16004803603810190610bdc919061319e565b6119f0565b005b348015610bef57600080fd5b50610c0a6004803603810190610c05919061327b565b611ac7565b005b348015610c1857600080fd5b50610c21611b9e565b604051610c2e9190613744565b60405180910390f35b606060018054610c4690613bd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7290613bd6565b8015610cbf5780601f10610c9457610100808354040283529160200191610cbf565b820191906000526020600020905b815481529060010190602001808311610ca257829003601f168201915b5050505050905090565b610cd1611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610cef61152d565b73ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c9061385c565b60405180910390fd5b82600f819055508160108190555080601181905550610d85601154610d77601054600f54611bb190919063ffffffff16565b611bb190919063ffffffff16565b601681905550505050565b6000610da4610d9d611c0f565b8484611c17565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610e0c611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610e2a61152d565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e779061385c565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610ec0600e54610eb2600d54600c54611bb190919063ffffffff16565b611bb190919063ffffffff16565b601581905550505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b610ef3611c0f565b73ffffffffffffffffffffffffffffffffffffffff16610f1161152d565b73ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e9061385c565b60405180910390fd5b60005b8282905081101561102b576001600b6000858585818110610fb4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610fc9919061319e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061102490613c08565b9050610f6a565b505050565b611038611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661105661152d565b73ffffffffffffffffffffffffffffffffffffffff16146110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a39061385c565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611114848484611de2565b506111d684611121611c0f565b6111d185604051806060016040528060288152602001613fd960289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611187611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b611c17565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006112446112337f000000000000000000000000000000000000000000000000000000000000dead611372565b60185461255290919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b600061130961126d611c0f565b84611304856006600061127e611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b611c17565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c3611c0f565b73ffffffffffffffffffffffffffffffffffffffff166113e161152d565b73ffffffffffffffffffffffffffffffffffffffff1614611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e9061385c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461156590613bd6565b80601f016020809104026020016040519081016040528092919081815260200182805461159190613bd6565b80156115de5780601f106115b3576101008083540402835291602001916115de565b820191906000526020600020905b8154815290600101906020018083116115c157829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b60006116bb611605611c0f565b846116b685604051806060016040528060258152602001614001602591396006600061162f611c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b611c17565b6001905092915050565b60145481565b60006116df6116d8611c0f565b8484611de2565b506001905092915050565b600e5481565b6116f8611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661171661152d565b73ffffffffffffffffffffffffffffffffffffffff161461176c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117639061385c565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516117b59190613744565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118e6611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661190461152d565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061385c565b60405180910390fd5b8060198190555050565b60155481565b611972611c0f565b73ffffffffffffffffffffffffffffffffffffffff1661199061152d565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd9061385c565b60405180910390fd5b80601a8190555050565b6119f8611c0f565b73ffffffffffffffffffffffffffffffffffffffff16611a1661152d565b73ffffffffffffffffffffffffffffffffffffffff1614611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a639061385c565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611acf611c0f565b73ffffffffffffffffffffffffffffffffffffffff16611aed61152d565b73ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061385c565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611bc091906139f1565b905083811015611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc906137dc565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e906138bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906137bc565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dd591906138dc565b60405180910390a3505050565b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e885750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe906137fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e9061389c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e9061379c565b60405180910390fd5b60008211611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe19061387c565b60405180910390fd5b601d60149054906101000a900460ff16156120115761200a84848461259c565b90506124e7565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b55750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612100576019548211156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f69061381c565b60405180910390fd5b5b600061210b30611372565b90506000601b5482101590508080156121315750601d60149054906101000a900460ff16155b80156121875750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561219f5750601d60159054906101000a900460ff165b156121c957601d60169054906101000a900460ff16156121bf57601b5491505b6121c88261276f565b5b612252846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123385750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61234c57612347878787612960565b61234e565b845b9050601d60179054906101000a900460ff1680156123b65750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123e557601a546123d9826123cb89611372565b611bb190919063ffffffff16565b11156123e457600080fd5b5b61243781600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d791906138dc565b60405180910390a3600193505050505b9392505050565b6000838311158290612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d919061377a565b60405180910390fd5b50600083856125459190613ad2565b9050809150509392505050565b600061259483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ee565b905092915050565b6000612627826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ee9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126bc82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161275c91906138dc565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006127c860026127ba6017546127ac60125487612b8790919063ffffffff16565b612c0290919063ffffffff16565b612c0290919063ffffffff16565b905060006127df828461255290919063ffffffff16565b90506127ea81612c4c565b6000479050600061281b61280a6002601254612c0290919063ffffffff16565b60175461255290919063ffffffff16565b90506000612859600261284b8461283d60125488612b8790919063ffffffff16565b612c0290919063ffffffff16565b612c0290919063ffffffff16565b905060006128848361287660145487612b8790919063ffffffff16565b612c0290919063ffffffff16565b905060006128ad8261289f858861255290919063ffffffff16565b61255290919063ffffffff16565b905060008111156128e5576128e4600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f49565b5b600082111561291b5761291a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f49565b5b60008311801561292b5750600087115b1561293b5761293a8784612f94565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129e8576129e160646129d360155486612b8790919063ffffffff16565b612c0290919063ffffffff16565b9050612a66565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a6557612a626064612a5460165486612b8790919063ffffffff16565b612c0290919063ffffffff16565b90505b5b6000811115612b6a57612ac181600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b6191906138dc565b60405180910390a35b612b7d818461255290919063ffffffff16565b9150509392505050565b600080831415612b9a5760009050612bfc565b60008284612ba89190613a78565b9050828482612bb79190613a47565b14612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee9061383c565b60405180910390fd5b809150505b92915050565b6000612c4483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613088565b905092915050565b6000600267ffffffffffffffff811115612c8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612cbd5781602001602082028036833780820191505090505b5090503081600081518110612cfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9d57600080fd5b505afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd591906131c7565b81600181518110612e0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e7630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c17565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eda959493929190613927565b600060405180830381600087803b158015612ef457600080fd5b505af1158015612f08573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f3d9291906138f7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f8f573d6000803e3d6000fd5b505050565b612fc130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c17565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061300d61152d565b426040518863ffffffff1660e01b815260040161302f969594939291906136e3565b6060604051808303818588803b15801561304857600080fd5b505af115801561305c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061308191906133d9565b5050505050565b600080831182906130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c6919061377a565b60405180910390fd5b50600083856130de9190613a47565b9050809150509392505050565b6000813590506130fa81613f93565b92915050565b60008151905061310f81613f93565b92915050565b60008083601f84011261312757600080fd5b8235905067ffffffffffffffff81111561314057600080fd5b60208301915083602082028301111561315857600080fd5b9250929050565b60008135905061316e81613faa565b92915050565b60008135905061318381613fc1565b92915050565b60008151905061319881613fc1565b92915050565b6000602082840312156131b057600080fd5b60006131be848285016130eb565b91505092915050565b6000602082840312156131d957600080fd5b60006131e784828501613100565b91505092915050565b6000806040838503121561320357600080fd5b6000613211858286016130eb565b9250506020613222858286016130eb565b9150509250929050565b60008060006060848603121561324157600080fd5b600061324f868287016130eb565b9350506020613260868287016130eb565b925050604061327186828701613174565b9150509250925092565b6000806040838503121561328e57600080fd5b600061329c858286016130eb565b92505060206132ad8582860161315f565b9150509250929050565b600080604083850312156132ca57600080fd5b60006132d8858286016130eb565b92505060206132e985828601613174565b9150509250929050565b6000806020838503121561330657600080fd5b600083013567ffffffffffffffff81111561332057600080fd5b61332c85828601613115565b92509250509250929050565b60006020828403121561334a57600080fd5b60006133588482850161315f565b91505092915050565b60006020828403121561337357600080fd5b600061338184828501613174565b91505092915050565b60008060006060848603121561339f57600080fd5b60006133ad86828701613174565b93505060206133be86828701613174565b92505060406133cf86828701613174565b9150509250925092565b6000806000606084860312156133ee57600080fd5b60006133fc86828701613189565b935050602061340d86828701613189565b925050604061341e86828701613189565b9150509250925092565b6000613434838361344f565b60208301905092915050565b61344981613b18565b82525050565b61345881613b06565b82525050565b61346781613b06565b82525050565b6000613478826139ac565b61348281856139cf565b935061348d8361399c565b8060005b838110156134be5781516134a58882613428565b97506134b0836139c2565b925050600181019050613491565b5085935050505092915050565b6134d481613b2a565b82525050565b6134e381613b6d565b82525050565b6134f281613b91565b82525050565b6000613503826139b7565b61350d81856139e0565b935061351d818560208601613ba3565b61352681613cde565b840191505092915050565b600061353e6023836139e0565b915061354982613cef565b604082019050919050565b60006135616022836139e0565b915061356c82613d3e565b604082019050919050565b6000613584601b836139e0565b915061358f82613d8d565b602082019050919050565b60006135a7601b836139e0565b91506135b282613db6565b602082019050919050565b60006135ca6028836139e0565b91506135d582613ddf565b604082019050919050565b60006135ed6021836139e0565b91506135f882613e2e565b604082019050919050565b60006136106020836139e0565b915061361b82613e7d565b602082019050919050565b60006136336029836139e0565b915061363e82613ea6565b604082019050919050565b60006136566025836139e0565b915061366182613ef5565b604082019050919050565b60006136796024836139e0565b915061368482613f44565b604082019050919050565b61369881613b56565b82525050565b6136a781613b60565b82525050565b60006020820190506136c2600083018461345e565b92915050565b60006020820190506136dd6000830184613440565b92915050565b600060c0820190506136f8600083018961345e565b613705602083018861368f565b61371260408301876134e9565b61371f60608301866134e9565b61372c608083018561345e565b61373960a083018461368f565b979650505050505050565b600060208201905061375960008301846134cb565b92915050565b600060208201905061377460008301846134da565b92915050565b6000602082019050818103600083015261379481846134f8565b905092915050565b600060208201905081810360008301526137b581613531565b9050919050565b600060208201905081810360008301526137d581613554565b9050919050565b600060208201905081810360008301526137f581613577565b9050919050565b600060208201905081810360008301526138158161359a565b9050919050565b60006020820190508181036000830152613835816135bd565b9050919050565b60006020820190508181036000830152613855816135e0565b9050919050565b6000602082019050818103600083015261387581613603565b9050919050565b6000602082019050818103600083015261389581613626565b9050919050565b600060208201905081810360008301526138b581613649565b9050919050565b600060208201905081810360008301526138d58161366c565b9050919050565b60006020820190506138f1600083018461368f565b92915050565b600060408201905061390c600083018561368f565b818103602083015261391e818461346d565b90509392505050565b600060a08201905061393c600083018861368f565b61394960208301876134e9565b818103604083015261395b818661346d565b905061396a606083018561345e565b613977608083018461368f565b9695505050505050565b6000602082019050613996600083018461369e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006139fc82613b56565b9150613a0783613b56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a3c57613a3b613c51565b5b828201905092915050565b6000613a5282613b56565b9150613a5d83613b56565b925082613a6d57613a6c613c80565b5b828204905092915050565b6000613a8382613b56565b9150613a8e83613b56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ac757613ac6613c51565b5b828202905092915050565b6000613add82613b56565b9150613ae883613b56565b925082821015613afb57613afa613c51565b5b828203905092915050565b6000613b1182613b36565b9050919050565b6000613b2382613b36565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613b7882613b7f565b9050919050565b6000613b8a82613b36565b9050919050565b6000613b9c82613b56565b9050919050565b60005b83811015613bc1578082015181840152602081019050613ba6565b83811115613bd0576000848401525b50505050565b60006002820490506001821680613bee57607f821691505b60208210811415613c0257613c01613caf565b5b50919050565b6000613c1382613b56565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c4657613c45613c51565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613f9c81613b06565b8114613fa757600080fd5b50565b613fb381613b2a565b8114613fbe57600080fd5b50565b613fca81613b56565b8114613fd557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a683effcdbd0046a2a22e5c0585755d2767ec854ff5ec78a93aab32b0db3792f64736f6c63430008040033

Deployed Bytecode Sourcemap

13939:13754:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18448:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20747:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19743:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14319:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15774:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18725:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20406:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14876:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18229:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21221:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22212:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14436:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21657:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18634:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19111:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14824:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15889:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14653:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15187:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15242;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18833:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5952:148;;;;;;;;;;;;;:::i;:::-;;15586:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15646:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15395:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15055:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14769:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5733:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18539;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19614:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15455:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19337:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15283:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22027:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15016:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21474:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14974:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15822:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15098:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14710:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15141:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14192:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15936:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14932:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18960:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21102:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15336:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21364:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18108:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20267:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15988:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18448:83;18485:13;18518:5;18511:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18448:83;:::o;20747:341::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20891:15:::1;20871:17;:35;;;;20937:15;20917:17;:35;;;;20978:10;20963:12;:25;;;;21022:58;21067:12;;21022:40;21044:17;;21022;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;21001:18;:79;;;;20747:341:::0;;;:::o;19743:161::-;19818:4;19835:39;19844:12;:10;:12::i;:::-;19858:7;19867:6;19835:8;:39::i;:::-;19892:4;19885:11;;19743:161;;;;:::o;14319:94::-;;;;;;;;;;;;;:::o;15774:41::-;;;;;;;;;;;;;:::o;18725:100::-;18778:7;18805:12;;18798:19;;18725:100;:::o;20406:333::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20548:15:::1;20529:16;:34;;;;20593:15;20574:16;:34;;;;20633:10;20619:11;:24;;;;20676:55;20719:11;;20676:38;20697:16;;20676;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;20656:17;:75;;;;20406:333:::0;;;:::o;14876:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;18229:211::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18317:9:::1;18312:118;18331:9;;:16;;18328:1;:19;18312:118;;;18400:4;18369:14;:28;18384:9;;18394:1;18384:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18369:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;18349:3;;;;:::i;:::-;;;18312:118;;;;18229:211:::0;;:::o;21221:135::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21342:6:::1;21312:19;:27;21332:6;21312:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21221:135:::0;;:::o;22212:313::-;22310:4;22327:36;22337:6;22345:9;22356:6;22327:9;:36::i;:::-;;22374:121;22383:6;22391:12;:10;:12::i;:::-;22405:89;22443:6;22405:89;;;;;;;;;;;;;;;;;:11;:19;22417:6;22405:19;;;;;;;;;;;;;;;:33;22425:12;:10;:12::i;:::-;22405:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22374:8;:121::i;:::-;22513:4;22506:11;;22212:313;;;;;:::o;14436:81::-;;;:::o;21657:128::-;21710:7;21737:40;21754:22;21764:11;21754:9;:22::i;:::-;21737:12;;:16;;:40;;;;:::i;:::-;21730:47;;21657:128;:::o;18634:83::-;18675:5;18700:9;;;;;;;;;;;18693:16;;18634:83;:::o;19111:218::-;19199:4;19216:83;19225:12;:10;:12::i;:::-;19239:7;19248:50;19287:10;19248:11;:25;19260:12;:10;:12::i;:::-;19248:25;;;;;;;;;;;;;;;:34;19274:7;19248:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19216:8;:83::i;:::-;19317:4;19310:11;;19111:218;;;;:::o;14824:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15889:40::-;;;;;;;;;;;;;:::o;14653:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15187:34::-;;;;:::o;15242:::-;;;;:::o;18833:119::-;18899:7;18926:9;:18;18936:7;18926:18;;;;;;;;;;;;;;;;18919:25;;18833:119;;;:::o;5952:148::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6059:1:::1;6022:40;;6043:6;::::0;::::1;;;;;;;;6022:40;;;;;;;;;;;;6090:1;6073:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5952:148::o:0;15586:52::-;;;;:::o;15646:50::-;;;;:::o;15395:37::-;;;;:::o;15055:36::-;;;;:::o;14769:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5733:87::-;5779:7;5806:6;;;;;;;;;;;5799:13;;5733:87;:::o;18539:::-;18578:13;18611:7;18604:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18539:87;:::o;19614:120::-;19676:7;19703:23;;19696:30;;19614:120;:::o;15455:44::-;;;;:::o;19337:269::-;19430:4;19447:129;19456:12;:10;:12::i;:::-;19470:7;19479:96;19518:15;19479:96;;;;;;;;;;;;;;;;;:11;:25;19491:12;:10;:12::i;:::-;19479:25;;;;;;;;;;;;;;;:34;19505:7;19479:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19447:8;:129::i;:::-;19594:4;19587:11;;19337:269;;;;:::o;15283:29::-;;;;:::o;22027:177::-;22105:4;22122:42;22132:12;:10;:12::i;:::-;22146:9;22157:6;22122:9;:42::i;:::-;;22192:4;22185:11;;22027:177;;;;:::o;15016:30::-;;;;:::o;21474:171::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21575:8:::1;21551:21;;:32;;;;;;;;;;;;;;;;;;21599:38;21628:8;21599:38;;;;;;:::i;:::-;;;;;;;;21474:171:::0;:::o;14974:35::-;;;;:::o;15822:26::-;;;;;;;;;;;;;:::o;15098:36::-;;;;:::o;14710:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15141:31::-;;;;:::o;14192:99::-;;;;;;;;;;;;;:::o;15936:45::-;;;;;;;;;;;;;:::o;14932:35::-;;;;:::o;18960:143::-;19041:7;19068:11;:18;19080:5;19068:18;;;;;;;;;;;;;;;:27;19087:7;19068:27;;;;;;;;;;;;;;;;19061:34;;18960:143;;;;:::o;21102:111::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21194:11:::1;21179:12;:26;;;;21102:111:::0;:::o;15336:36::-;;;;:::o;21364:102::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21450:8:::1;21436:10;:22;;;;21364:102:::0;:::o;18108:113::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18208:5:::1;18182:14;:23;18197:7;18182:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;18108:113:::0;:::o;20267:127::-;5877:12;:10;:12::i;:::-;5866:23;;:7;:5;:7::i;:::-;:23;;;5858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20380:6:::1;20354:15;:23;20370:6;20354:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20267:127:::0;;:::o;15988:35::-;;;;;;;;;;;;;:::o;1169:181::-;1227:7;1247:9;1263:1;1259;:5;;;;:::i;:::-;1247:17;;1288:1;1283;:6;;1275:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1341:1;1334:8;;;1169:181;;;;:::o;101:115::-;154:15;197:10;182:26;;101:115;:::o;19912:347::-;20032:1;20015:19;;:5;:19;;;;20007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20113:1;20094:21;;:7;:21;;;;20086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20197:6;20167:11;:18;20179:5;20167:18;;;;;;;;;;;;;;;:27;20186:7;20167:27;;;;;;;;;;;;;;;:36;;;;20235:7;20219:32;;20228:5;20219:32;;;20244:6;20219:32;;;;;;:::i;:::-;;;;;;;;19912:347;;;:::o;22533:1905::-;22620:4;22648:14;:22;22663:6;22648:22;;;;;;;;;;;;;;;;;;;;;;;;;22647:23;:53;;;;;22675:14;:25;22690:9;22675:25;;;;;;;;;;;;;;;;;;;;;;;;;22674:26;22647:53;22639:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;22769:1;22751:20;;:6;:20;;;;22743:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22853:1;22832:23;;:9;:23;;;;22824:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22923:1;22914:6;:10;22906:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22996:16;;;;;;;;;;;22993:1438;;;23033:41;23048:6;23056:9;23067:6;23033:14;:41::i;:::-;23026:48;;;;22993:1438;23145:15;:23;23161:6;23145:23;;;;;;;;;;;;;;;;;;;;;;;;;23144:24;:55;;;;;23173:15;:26;23189:9;23173:26;;;;;;;;;;;;;;;;;;;;;;;;;23172:27;23144:55;23141:170;;;23238:12;;23228:6;:22;;23220:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23141:170;23330:28;23361:24;23379:4;23361:9;:24::i;:::-;23330:55;;23400:28;23455:23;;23431:20;:47;;23400:78;;23511:23;:44;;;;;23539:16;;;;;;;;;;;23538:17;23511:44;:69;;;;;23560:12;:20;23573:6;23560:20;;;;;;;;;;;;;;;;;;;;;;;;;23559:21;23511:69;:94;;;;;23584:21;;;;;;;;;;;23511:94;23507:305;;;23643:25;;;;;;;;;;;23640:97;;;23714:23;;23691:46;;23640:97;23756:36;23771:20;23756:14;:36::i;:::-;23507:305;23848:53;23870:6;23848:53;;;;;;;;;;;;;;;;;:9;:17;23858:6;23848:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23828:9;:17;23838:6;23828:17;;;;;;;;;;;;;;;:73;;;;23918:19;23941:17;:25;23959:6;23941:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23970:17;:28;23988:9;23970:28;;;;;;;;;;;;;;;;;;;;;;;;;23941:57;23940:148;;24054:34;24062:6;24070:9;24081:6;24054:7;:34::i;:::-;23940:148;;;24045:6;23940:148;23918:170;;24108:16;;;;;;;;;;;:51;;;;;24129:19;:30;24149:9;24129:30;;;;;;;;;;;;;;;;;;;;;;;;;24128:31;24108:51;24105:133;;;24227:10;;24186:37;24211:11;24186:20;24196:9;24186;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;24178:60;;;;;;24105:133;24278:37;24303:11;24278:9;:20;24288:9;24278:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24255:9;:20;24265:9;24255:20;;;;;;;;;;;;;;;:60;;;;24354:9;24337:40;;24346:6;24337:40;;;24365:11;24337:40;;;;;;:::i;:::-;;;;;;;;24399:4;24392:11;;;;;22533:1905;;;;;;:::o;1502:192::-;1588:7;1621:1;1616;:6;;1624:12;1608:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1648:9;1664:1;1660;:5;;;;:::i;:::-;1648:17;;1685:1;1678:8;;;1502:192;;;;;:::o;1358:136::-;1416:7;1443:43;1447:1;1450;1443:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1436:50;;1358:136;;;;:::o;24446:355::-;24539:4;24576:53;24598:6;24576:53;;;;;;;;;;;;;;;;;:9;:17;24586:6;24576:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24556:9;:17;24566:6;24556:17;;;;;;;;;;;;;;;:73;;;;24663:32;24688:6;24663:9;:20;24673:9;24663:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24640:9;:20;24650:9;24640:20;;;;;;;;;;;;;;;:55;;;;24736:9;24719:35;;24728:6;24719:35;;;24747:6;24719:35;;;;;;:::i;:::-;;;;;;;;24772:4;24765:11;;24446:355;;;;;:::o;24807:1048::-;16471:4;16452:16;;:23;;;;;;;;;;;;;;;;;;24889:19:::1;24911:65;24974:1;24911:58;24944:24;;24911:28;24923:15;;24911:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;24889:87;;24987:21;25011:24;25023:11;25011:7;:11;;:24;;;;:::i;:::-;24987:48;;25048:31;25065:13;25048:16;:31::i;:::-;25090:22;25115:21;25090:46;;25149:19;25171:52;25200:22;25220:1;25200:15;;:19;;:22;;;;:::i;:::-;25171:24;;:28;;:52;;;;:::i;:::-;25149:74;;25244:26;25273:59;25330:1;25273:52;25313:11;25273:35;25292:15;;25273:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;25244:88;;25343:21;25367:47;25402:11;25367:30;25386:10;;25367:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;25343:71;;25425:26;25454:57;25497:13;25454:38;25473:18;25454:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;25425:86;;25548:1;25527:18;:22;25524:104;;;25564:64;25585:22;;;;;;;;;;;25609:18;25564:20;:64::i;:::-;25524:104;25660:1;25644:13;:17;25641:89;;;25676:54;25697:17;;;;;;;;;;;25716:13;25676:20;:54::i;:::-;25641:89;25767:1;25746:18;:22;:41;;;;;25786:1;25772:11;:15;25746:41;25743:104;;;25802:45;25815:11;25828:18;25802:12;:45::i;:::-;25743:104;16486:1;;;;;;;16517:5:::0;16498:16;;:24;;;;;;;;;;;;;;;;;;24807:1048;:::o;27062:622::-;27148:7;27178:17;27198:1;27178:21;;27223:12;:20;27236:6;27223:20;;;;;;;;;;;;;;;;;;;;;;;;;27220:223;;;27272:38;27306:3;27272:29;27283:17;;27272:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27260:50;;27220:223;;;27340:12;:23;27353:9;27340:23;;;;;;;;;;;;;;;;;;;;;;;;;27337:106;;;27392:39;27427:3;27392:30;27403:18;;27392:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27380:51;;27337:106;27220:223;27478:1;27466:9;:13;27463:173;;;27523:39;27552:9;27523;:24;27541:4;27523:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27496:9;:24;27514:4;27496:24;;;;;;;;;;;;;;;:66;;;;27607:4;27582:42;;27591:6;27582:42;;;27614:9;27582:42;;;;;;:::i;:::-;;;;;;;;27463:173;27655:21;27666:9;27655:6;:10;;:21;;;;:::i;:::-;27648:28;;;27062:622;;;;;:::o;1702:250::-;1760:7;1789:1;1784;:6;1780:47;;;1814:1;1807:8;;;;1780:47;1839:9;1855:1;1851;:5;;;;:::i;:::-;1839:17;;1884:1;1879;1875;:5;;;;:::i;:::-;:10;1867:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1943:1;1936:8;;;1702:250;;;;;:::o;1960:132::-;2018:7;2045:39;2049:1;2052;2045:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2038:46;;1960:132;;;;:::o;25867:666::-;25993:21;26031:1;26017:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25993:40;;26062:4;26044;26049:1;26044:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26088:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26078:4;26083:1;26078:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26123:62;26140:4;26155:15;;;;;;;;;;;26173:11;26123:8;:62::i;:::-;26224:15;;;;;;;;;;;:66;;;26305:11;26331:1;26375:4;26402;26438:15;26224:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26490:35;26507:11;26520:4;26490:35;;;;;;;:::i;:::-;;;;;;;;25867:666;;:::o;21793:126::-;21885:9;:18;;:26;21904:6;21885:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21793:126;;:::o;26541:513::-;26689:62;26706:4;26721:15;;;;;;;;;;;26739:11;26689:8;:62::i;:::-;26794:15;;;;;;;;;;;:31;;;26833:9;26866:4;26886:11;26912:1;26955;26998:7;:5;:7::i;:::-;27020:15;26794:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26541:513;;:::o;2100:278::-;2186:7;2218:1;2214;:5;2221:12;2206:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2245:9;2261:1;2257;:5;;;;:::i;:::-;2245:17;;2369:1;2362:8;;;2100:278;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;318:367::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:2;;469:1;466;459:12;418:2;505:6;492:20;482:30;;535:18;527:6;524:30;521:2;;;567:1;564;557:12;521:2;604:4;596:6;592:17;580:29;;658:3;650:4;642:6;638:17;628:8;624:32;621:41;618:2;;;675:1;672;665:12;618:2;408:277;;;;;:::o;691:133::-;734:5;772:6;759:20;750:29;;788:30;812:5;788:30;:::i;:::-;740:84;;;;:::o;830:139::-;876:5;914:6;901:20;892:29;;930:33;957:5;930:33;:::i;:::-;882:87;;;;:::o;975:143::-;1032:5;1063:6;1057:13;1048:22;;1079:33;1106:5;1079:33;:::i;:::-;1038:80;;;;:::o;1124:262::-;1183:6;1232:2;1220:9;1211:7;1207:23;1203:32;1200:2;;;1248:1;1245;1238:12;1200:2;1291:1;1316:53;1361:7;1352:6;1341:9;1337:22;1316:53;:::i;:::-;1306:63;;1262:117;1190:196;;;;:::o;1392:284::-;1462:6;1511:2;1499:9;1490:7;1486:23;1482:32;1479:2;;;1527:1;1524;1517:12;1479:2;1570:1;1595:64;1651:7;1642:6;1631:9;1627:22;1595:64;:::i;:::-;1585:74;;1541:128;1469:207;;;;:::o;1682:407::-;1750:6;1758;1807:2;1795:9;1786:7;1782:23;1778:32;1775:2;;;1823:1;1820;1813:12;1775:2;1866:1;1891:53;1936:7;1927:6;1916:9;1912:22;1891:53;:::i;:::-;1881:63;;1837:117;1993:2;2019:53;2064:7;2055:6;2044:9;2040:22;2019:53;:::i;:::-;2009:63;;1964:118;1765:324;;;;;:::o;2095:552::-;2172:6;2180;2188;2237:2;2225:9;2216:7;2212:23;2208:32;2205:2;;;2253:1;2250;2243:12;2205:2;2296:1;2321:53;2366:7;2357:6;2346:9;2342:22;2321:53;:::i;:::-;2311:63;;2267:117;2423:2;2449:53;2494:7;2485:6;2474:9;2470:22;2449:53;:::i;:::-;2439:63;;2394:118;2551:2;2577:53;2622:7;2613:6;2602:9;2598:22;2577:53;:::i;:::-;2567:63;;2522:118;2195:452;;;;;:::o;2653:401::-;2718:6;2726;2775:2;2763:9;2754:7;2750:23;2746:32;2743:2;;;2791:1;2788;2781:12;2743:2;2834:1;2859:53;2904:7;2895:6;2884:9;2880:22;2859:53;:::i;:::-;2849:63;;2805:117;2961:2;2987:50;3029:7;3020:6;3009:9;3005:22;2987:50;:::i;:::-;2977:60;;2932:115;2733:321;;;;;:::o;3060:407::-;3128:6;3136;3185:2;3173:9;3164:7;3160:23;3156:32;3153:2;;;3201:1;3198;3191:12;3153:2;3244:1;3269:53;3314:7;3305:6;3294:9;3290:22;3269:53;:::i;:::-;3259:63;;3215:117;3371:2;3397:53;3442:7;3433:6;3422:9;3418:22;3397:53;:::i;:::-;3387:63;;3342:118;3143:324;;;;;:::o;3473:425::-;3559:6;3567;3616:2;3604:9;3595:7;3591:23;3587:32;3584:2;;;3632:1;3629;3622:12;3584:2;3703:1;3692:9;3688:17;3675:31;3733:18;3725:6;3722:30;3719:2;;;3765:1;3762;3755:12;3719:2;3801:80;3873:7;3864:6;3853:9;3849:22;3801:80;:::i;:::-;3783:98;;;;3646:245;3574:324;;;;;:::o;3904:256::-;3960:6;4009:2;3997:9;3988:7;3984:23;3980:32;3977:2;;;4025:1;4022;4015:12;3977:2;4068:1;4093:50;4135:7;4126:6;4115:9;4111:22;4093:50;:::i;:::-;4083:60;;4039:114;3967:193;;;;:::o;4166:262::-;4225:6;4274:2;4262:9;4253:7;4249:23;4245:32;4242:2;;;4290:1;4287;4280:12;4242:2;4333:1;4358:53;4403:7;4394:6;4383:9;4379:22;4358:53;:::i;:::-;4348:63;;4304:117;4232:196;;;;:::o;4434:552::-;4511:6;4519;4527;4576:2;4564:9;4555:7;4551:23;4547:32;4544:2;;;4592:1;4589;4582:12;4544:2;4635:1;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4606:117;4762:2;4788:53;4833:7;4824:6;4813:9;4809:22;4788:53;:::i;:::-;4778:63;;4733:118;4890:2;4916:53;4961:7;4952:6;4941:9;4937:22;4916:53;:::i;:::-;4906:63;;4861:118;4534:452;;;;;:::o;4992:596::-;5080:6;5088;5096;5145:2;5133:9;5124:7;5120:23;5116:32;5113:2;;;5161:1;5158;5151:12;5113:2;5204:1;5229:64;5285:7;5276:6;5265:9;5261:22;5229:64;:::i;:::-;5219:74;;5175:128;5342:2;5368:64;5424:7;5415:6;5404:9;5400:22;5368:64;:::i;:::-;5358:74;;5313:129;5481:2;5507:64;5563:7;5554:6;5543:9;5539:22;5507:64;:::i;:::-;5497:74;;5452:129;5103:485;;;;;:::o;5594:179::-;5663:10;5684:46;5726:3;5718:6;5684:46;:::i;:::-;5762:4;5757:3;5753:14;5739:28;;5674:99;;;;:::o;5779:142::-;5882:32;5908:5;5882:32;:::i;:::-;5877:3;5870:45;5860:61;;:::o;5927:108::-;6004:24;6022:5;6004:24;:::i;:::-;5999:3;5992:37;5982:53;;:::o;6041:118::-;6128:24;6146:5;6128:24;:::i;:::-;6123:3;6116:37;6106:53;;:::o;6195:732::-;6314:3;6343:54;6391:5;6343:54;:::i;:::-;6413:86;6492:6;6487:3;6413:86;:::i;:::-;6406:93;;6523:56;6573:5;6523:56;:::i;:::-;6602:7;6633:1;6618:284;6643:6;6640:1;6637:13;6618:284;;;6719:6;6713:13;6746:63;6805:3;6790:13;6746:63;:::i;:::-;6739:70;;6832:60;6885:6;6832:60;:::i;:::-;6822:70;;6678:224;6665:1;6662;6658:9;6653:14;;6618:284;;;6622:14;6918:3;6911:10;;6319:608;;;;;;;:::o;6933:109::-;7014:21;7029:5;7014:21;:::i;:::-;7009:3;7002:34;6992:50;;:::o;7048:185::-;7162:64;7220:5;7162:64;:::i;:::-;7157:3;7150:77;7140:93;;:::o;7239:147::-;7334:45;7373:5;7334:45;:::i;:::-;7329:3;7322:58;7312:74;;:::o;7392:364::-;7480:3;7508:39;7541:5;7508:39;:::i;:::-;7563:71;7627:6;7622:3;7563:71;:::i;:::-;7556:78;;7643:52;7688:6;7683:3;7676:4;7669:5;7665:16;7643:52;:::i;:::-;7720:29;7742:6;7720:29;:::i;:::-;7715:3;7711:39;7704:46;;7484:272;;;;;:::o;7762:366::-;7904:3;7925:67;7989:2;7984:3;7925:67;:::i;:::-;7918:74;;8001:93;8090:3;8001:93;:::i;:::-;8119:2;8114:3;8110:12;8103:19;;7908:220;;;:::o;8134:366::-;8276:3;8297:67;8361:2;8356:3;8297:67;:::i;:::-;8290:74;;8373:93;8462:3;8373:93;:::i;:::-;8491:2;8486:3;8482:12;8475:19;;8280:220;;;:::o;8506:366::-;8648:3;8669:67;8733:2;8728:3;8669:67;:::i;:::-;8662:74;;8745:93;8834:3;8745:93;:::i;:::-;8863:2;8858:3;8854:12;8847:19;;8652:220;;;:::o;8878:366::-;9020:3;9041:67;9105:2;9100:3;9041:67;:::i;:::-;9034:74;;9117:93;9206:3;9117:93;:::i;:::-;9235:2;9230:3;9226:12;9219:19;;9024:220;;;:::o;9250:366::-;9392:3;9413:67;9477:2;9472:3;9413:67;:::i;:::-;9406:74;;9489:93;9578:3;9489:93;:::i;:::-;9607:2;9602:3;9598:12;9591:19;;9396:220;;;:::o;9622:366::-;9764:3;9785:67;9849:2;9844:3;9785:67;:::i;:::-;9778:74;;9861:93;9950:3;9861:93;:::i;:::-;9979:2;9974:3;9970:12;9963:19;;9768:220;;;:::o;9994:366::-;10136:3;10157:67;10221:2;10216:3;10157:67;:::i;:::-;10150:74;;10233:93;10322:3;10233:93;:::i;:::-;10351:2;10346:3;10342:12;10335:19;;10140:220;;;:::o;10366:366::-;10508:3;10529:67;10593:2;10588:3;10529:67;:::i;:::-;10522:74;;10605:93;10694:3;10605:93;:::i;:::-;10723:2;10718:3;10714:12;10707:19;;10512:220;;;:::o;10738:366::-;10880:3;10901:67;10965:2;10960:3;10901:67;:::i;:::-;10894:74;;10977:93;11066:3;10977:93;:::i;:::-;11095:2;11090:3;11086:12;11079:19;;10884:220;;;:::o;11110:366::-;11252:3;11273:67;11337:2;11332:3;11273:67;:::i;:::-;11266:74;;11349:93;11438:3;11349:93;:::i;:::-;11467:2;11462:3;11458:12;11451:19;;11256:220;;;:::o;11482:118::-;11569:24;11587:5;11569:24;:::i;:::-;11564:3;11557:37;11547:53;;:::o;11606:112::-;11689:22;11705:5;11689:22;:::i;:::-;11684:3;11677:35;11667:51;;:::o;11724:222::-;11817:4;11855:2;11844:9;11840:18;11832:26;;11868:71;11936:1;11925:9;11921:17;11912:6;11868:71;:::i;:::-;11822:124;;;;:::o;11952:254::-;12061:4;12099:2;12088:9;12084:18;12076:26;;12112:87;12196:1;12185:9;12181:17;12172:6;12112:87;:::i;:::-;12066:140;;;;:::o;12212:807::-;12461:4;12499:3;12488:9;12484:19;12476:27;;12513:71;12581:1;12570:9;12566:17;12557:6;12513:71;:::i;:::-;12594:72;12662:2;12651:9;12647:18;12638:6;12594:72;:::i;:::-;12676:80;12752:2;12741:9;12737:18;12728:6;12676:80;:::i;:::-;12766;12842:2;12831:9;12827:18;12818:6;12766:80;:::i;:::-;12856:73;12924:3;12913:9;12909:19;12900:6;12856:73;:::i;:::-;12939;13007:3;12996:9;12992:19;12983:6;12939:73;:::i;:::-;12466:553;;;;;;;;;:::o;13025:210::-;13112:4;13150:2;13139:9;13135:18;13127:26;;13163:65;13225:1;13214:9;13210:17;13201:6;13163:65;:::i;:::-;13117:118;;;;:::o;13241:276::-;13361:4;13399:2;13388:9;13384:18;13376:26;;13412:98;13507:1;13496:9;13492:17;13483:6;13412:98;:::i;:::-;13366:151;;;;:::o;13523:313::-;13636:4;13674:2;13663:9;13659:18;13651:26;;13723:9;13717:4;13713:20;13709:1;13698:9;13694:17;13687:47;13751:78;13824:4;13815:6;13751:78;:::i;:::-;13743:86;;13641:195;;;;:::o;13842:419::-;14008:4;14046:2;14035:9;14031:18;14023:26;;14095:9;14089:4;14085:20;14081:1;14070:9;14066:17;14059:47;14123:131;14249:4;14123:131;:::i;:::-;14115:139;;14013:248;;;:::o;14267:419::-;14433:4;14471:2;14460:9;14456:18;14448:26;;14520:9;14514:4;14510:20;14506:1;14495:9;14491:17;14484:47;14548:131;14674:4;14548:131;:::i;:::-;14540:139;;14438:248;;;:::o;14692:419::-;14858:4;14896:2;14885:9;14881:18;14873:26;;14945:9;14939:4;14935:20;14931:1;14920:9;14916:17;14909:47;14973:131;15099:4;14973:131;:::i;:::-;14965:139;;14863:248;;;:::o;15117:419::-;15283:4;15321:2;15310:9;15306:18;15298:26;;15370:9;15364:4;15360:20;15356:1;15345:9;15341:17;15334:47;15398:131;15524:4;15398:131;:::i;:::-;15390:139;;15288:248;;;:::o;15542:419::-;15708:4;15746:2;15735:9;15731:18;15723:26;;15795:9;15789:4;15785:20;15781:1;15770:9;15766:17;15759:47;15823:131;15949:4;15823:131;:::i;:::-;15815:139;;15713:248;;;:::o;15967:419::-;16133:4;16171:2;16160:9;16156:18;16148:26;;16220:9;16214:4;16210:20;16206:1;16195:9;16191:17;16184:47;16248:131;16374:4;16248:131;:::i;:::-;16240:139;;16138:248;;;:::o;16392:419::-;16558:4;16596:2;16585:9;16581:18;16573:26;;16645:9;16639:4;16635:20;16631:1;16620:9;16616:17;16609:47;16673:131;16799:4;16673:131;:::i;:::-;16665:139;;16563:248;;;:::o;16817:419::-;16983:4;17021:2;17010:9;17006:18;16998:26;;17070:9;17064:4;17060:20;17056:1;17045:9;17041:17;17034:47;17098:131;17224:4;17098:131;:::i;:::-;17090:139;;16988:248;;;:::o;17242:419::-;17408:4;17446:2;17435:9;17431:18;17423:26;;17495:9;17489:4;17485:20;17481:1;17470:9;17466:17;17459:47;17523:131;17649:4;17523:131;:::i;:::-;17515:139;;17413:248;;;:::o;17667:419::-;17833:4;17871:2;17860:9;17856:18;17848:26;;17920:9;17914:4;17910:20;17906:1;17895:9;17891:17;17884:47;17948:131;18074:4;17948:131;:::i;:::-;17940:139;;17838:248;;;:::o;18092:222::-;18185:4;18223:2;18212:9;18208:18;18200:26;;18236:71;18304:1;18293:9;18289:17;18280:6;18236:71;:::i;:::-;18190:124;;;;:::o;18320:483::-;18491:4;18529:2;18518:9;18514:18;18506:26;;18542:71;18610:1;18599:9;18595:17;18586:6;18542:71;:::i;:::-;18660:9;18654:4;18650:20;18645:2;18634:9;18630:18;18623:48;18688:108;18791:4;18782:6;18688:108;:::i;:::-;18680:116;;18496:307;;;;;:::o;18809:831::-;19072:4;19110:3;19099:9;19095:19;19087:27;;19124:71;19192:1;19181:9;19177:17;19168:6;19124:71;:::i;:::-;19205:80;19281:2;19270:9;19266:18;19257:6;19205:80;:::i;:::-;19332:9;19326:4;19322:20;19317:2;19306:9;19302:18;19295:48;19360:108;19463:4;19454:6;19360:108;:::i;:::-;19352:116;;19478:72;19546:2;19535:9;19531:18;19522:6;19478:72;:::i;:::-;19560:73;19628:3;19617:9;19613:19;19604:6;19560:73;:::i;:::-;19077:563;;;;;;;;:::o;19646:214::-;19735:4;19773:2;19762:9;19758:18;19750:26;;19786:67;19850:1;19839:9;19835:17;19826:6;19786:67;:::i;:::-;19740:120;;;;:::o;19866:132::-;19933:4;19956:3;19948:11;;19986:4;19981:3;19977:14;19969:22;;19938:60;;;:::o;20004:114::-;20071:6;20105:5;20099:12;20089:22;;20078:40;;;:::o;20124:99::-;20176:6;20210:5;20204:12;20194:22;;20183:40;;;:::o;20229:113::-;20299:4;20331;20326:3;20322:14;20314:22;;20304:38;;;:::o;20348:184::-;20447:11;20481:6;20476:3;20469:19;20521:4;20516:3;20512:14;20497:29;;20459:73;;;;:::o;20538:169::-;20622:11;20656:6;20651:3;20644:19;20696:4;20691:3;20687:14;20672:29;;20634:73;;;;:::o;20713:305::-;20753:3;20772:20;20790:1;20772:20;:::i;:::-;20767:25;;20806:20;20824:1;20806:20;:::i;:::-;20801:25;;20960:1;20892:66;20888:74;20885:1;20882:81;20879:2;;;20966:18;;:::i;:::-;20879:2;21010:1;21007;21003:9;20996:16;;20757:261;;;;:::o;21024:185::-;21064:1;21081:20;21099:1;21081:20;:::i;:::-;21076:25;;21115:20;21133:1;21115:20;:::i;:::-;21110:25;;21154:1;21144:2;;21159:18;;:::i;:::-;21144:2;21201:1;21198;21194:9;21189:14;;21066:143;;;;:::o;21215:348::-;21255:7;21278:20;21296:1;21278:20;:::i;:::-;21273:25;;21312:20;21330:1;21312:20;:::i;:::-;21307:25;;21500:1;21432:66;21428:74;21425:1;21422:81;21417:1;21410:9;21403:17;21399:105;21396:2;;;21507:18;;:::i;:::-;21396:2;21555:1;21552;21548:9;21537:20;;21263:300;;;;:::o;21569:191::-;21609:4;21629:20;21647:1;21629:20;:::i;:::-;21624:25;;21663:20;21681:1;21663:20;:::i;:::-;21658:25;;21702:1;21699;21696:8;21693:2;;;21707:18;;:::i;:::-;21693:2;21752:1;21749;21745:9;21737:17;;21614:146;;;;:::o;21766:96::-;21803:7;21832:24;21850:5;21832:24;:::i;:::-;21821:35;;21811:51;;;:::o;21868:104::-;21913:7;21942:24;21960:5;21942:24;:::i;:::-;21931:35;;21921:51;;;:::o;21978:90::-;22012:7;22055:5;22048:13;22041:21;22030:32;;22020:48;;;:::o;22074:126::-;22111:7;22151:42;22144:5;22140:54;22129:65;;22119:81;;;:::o;22206:77::-;22243:7;22272:5;22261:16;;22251:32;;;:::o;22289:86::-;22324:7;22364:4;22357:5;22353:16;22342:27;;22332:43;;;:::o;22381:180::-;22458:9;22491:64;22549:5;22491:64;:::i;:::-;22478:77;;22468:93;;;:::o;22567:140::-;22644:9;22677:24;22695:5;22677:24;:::i;:::-;22664:37;;22654:53;;;:::o;22713:121::-;22771:9;22804:24;22822:5;22804:24;:::i;:::-;22791:37;;22781:53;;;:::o;22840:307::-;22908:1;22918:113;22932:6;22929:1;22926:13;22918:113;;;23017:1;23012:3;23008:11;23002:18;22998:1;22993:3;22989:11;22982:39;22954:2;22951:1;22947:10;22942:15;;22918:113;;;23049:6;23046:1;23043:13;23040:2;;;23129:1;23120:6;23115:3;23111:16;23104:27;23040:2;22889:258;;;;:::o;23153:320::-;23197:6;23234:1;23228:4;23224:12;23214:22;;23281:1;23275:4;23271:12;23302:18;23292:2;;23358:4;23350:6;23346:17;23336:27;;23292:2;23420;23412:6;23409:14;23389:18;23386:38;23383:2;;;23439:18;;:::i;:::-;23383:2;23204:269;;;;:::o;23479:233::-;23518:3;23541:24;23559:5;23541:24;:::i;:::-;23532:33;;23587:66;23580:5;23577:77;23574:2;;;23657:18;;:::i;:::-;23574:2;23704:1;23697:5;23693:13;23686:20;;23522:190;;;:::o;23718:180::-;23766:77;23763:1;23756:88;23863:4;23860:1;23853:15;23887:4;23884:1;23877:15;23904:180;23952:77;23949:1;23942:88;24049:4;24046:1;24039:15;24073:4;24070:1;24063:15;24090:180;24138:77;24135:1;24128:88;24235:4;24232:1;24225:15;24259:4;24256:1;24249:15;24276:102;24317:6;24368:2;24364:7;24359:2;24352:5;24348:14;24344:28;24334:38;;24324:54;;;:::o;24384:222::-;24524:34;24520:1;24512:6;24508:14;24501:58;24593:5;24588:2;24580:6;24576:15;24569:30;24490:116;:::o;24612:221::-;24752:34;24748:1;24740:6;24736:14;24729:58;24821:4;24816:2;24808:6;24804:15;24797:29;24718:115;:::o;24839:177::-;24979:29;24975:1;24967:6;24963:14;24956:53;24945:71;:::o;25022:177::-;25162:29;25158:1;25150:6;25146:14;25139:53;25128:71;:::o;25205:227::-;25345:34;25341:1;25333:6;25329:14;25322:58;25414:10;25409:2;25401:6;25397:15;25390:35;25311:121;:::o;25438:220::-;25578:34;25574:1;25566:6;25562:14;25555:58;25647:3;25642:2;25634:6;25630:15;25623:28;25544:114;:::o;25664:182::-;25804:34;25800:1;25792:6;25788:14;25781:58;25770:76;:::o;25852:228::-;25992:34;25988:1;25980:6;25976:14;25969:58;26061:11;26056:2;26048:6;26044:15;26037:36;25958:122;:::o;26086:224::-;26226:34;26222:1;26214:6;26210:14;26203:58;26295:7;26290:2;26282:6;26278:15;26271:32;26192:118;:::o;26316:223::-;26456:34;26452:1;26444:6;26440:14;26433:58;26525:6;26520:2;26512:6;26508:15;26501:31;26422:117;:::o;26545:122::-;26618:24;26636:5;26618:24;:::i;:::-;26611:5;26608:35;26598:2;;26657:1;26654;26647:12;26598:2;26588:79;:::o;26673:116::-;26743:21;26758:5;26743:21;:::i;:::-;26736:5;26733:32;26723:2;;26779:1;26776;26769:12;26723:2;26713:76;:::o;26795:122::-;26868:24;26886:5;26868:24;:::i;:::-;26861:5;26858:35;26848:2;;26907:1;26904;26897:12;26848:2;26838:79;:::o

Swarm Source

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