ETH Price: $2,418.83 (+2.97%)
Gas: 1.19 Gwei

Token

Venify (VFY)
 

Overview

Max Total Supply

1,000,000 VFY

Holders

111

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: VFY
Balance
495,033.760697881512581446 VFY

Value
$0.00
0x811c325e6e7d08199dc48fcc2662192e43e203db
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:
Venify

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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 Venify is Context, IERC20, Ownable {
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    string private _name     = "Venify";
    string private _symbol   = "VFY";  
    uint8  private _decimals = 18;
   
    uint256 private constant MAX = type(uint256).max;
    uint256 private _tTotal = 1_000_000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    uint256 public marketingFee = 3;
    uint256 private _previousMarketingFee = marketingFee;

    uint256 public taxFee = 2;
    uint256 private _previousTaxFee = taxFee;
    
    uint256 public buyBackFee = 1;
    uint256 private _previousBuyBackFee = buyBackFee;

    uint256 public burnFee = 1;
    uint256 private _previousBurnFee = burnFee;

    uint256 public totalFees = marketingFee + taxFee + buyBackFee + burnFee;

    address public marketingWallet = 0xfe43e027EDcD5838A9811A3B8449fCe17C8EbD7B;
    address public buyBackWallet = 0xfe43e027EDcD5838A9811A3B8449fCe17C8EbD7B;

    bool public walletToWalletTransferWithoutFee = true;
    
    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapEnabled = true;
    uint256 public swapTokensAtAmount = _tTotal / 5000;
    
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event BuyBackWalletChanged(address buyBackWallet);
    event SwapEnabledUpdated(bool enabled);
    
    constructor() 
    { 
        transferOwnership(0xfe43e027EDcD5838A9811A3B8449fCe17C8EbD7B);
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

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

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[marketingWallet] = true;
        _isExcludedFromFees[address(this)] = true;

        _rOwned[owner()] = _rTotal;
        emit Transfer(address(0), owner(), _tTotal);
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, 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()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalReflectionDistributed() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    receive() external payable {}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tBuyBack, uint256 tMarketing) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tBuyBack, tMarketing, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBuyBack, tMarketing);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tBuyBack = calculateBuyBackFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tTransferAmount = tAmount - tFee - tBuyBack - tMarketing;
        return (tTransferAmount, tFee, tBuyBack, tMarketing);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tBuyBack, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rBuyBack = tBuyBack * currentRate;
        uint256 rMarketing = tMarketing * currentRate;
        uint256 rTransferAmount = rAmount - rFee - rBuyBack - rMarketing;
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeBuyback(uint256 tBuyback) private {
        if (tBuyback > 0) {
            uint256 currentRate =  _getRate();
            uint256 rBuyback = tBuyback * currentRate;
            _rOwned[address(this)] = _rOwned[address(this)] + rBuyback;
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + tBuyback;
        }
    }

    function _takeMarketing(uint256 tMarketing) private {
        if (tMarketing > 0) {
            uint256 currentRate =  _getRate();
            uint256 rMarketing = tMarketing * currentRate;
            _rOwned[address(this)] = _rOwned[address(this)] + rMarketing;
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + tMarketing;
        }
    }

    function _takeBurn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) {
        if(burnFee==0) {  return(tTransferAmount, rTransferAmount); }
            uint256 tBurn = (tAmount / 100) * burnFee;
            uint256 rBurn = tBurn * _getRate();
            rTransferAmount = rTransferAmount - rBurn;
            tTransferAmount = tTransferAmount - tBurn;
            _rOwned[DEAD] = _rOwned[DEAD] + rBurn;
            emit Transfer(sender, DEAD, tBurn);
            return(tTransferAmount, rTransferAmount);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * taxFee / 100;
    }

    function calculateBuyBackFee(uint256 _amount) private view returns (uint256) {
        return _amount * buyBackFee / 100;
    }
    
    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount * marketingFee / 100;
    }

    function calculateBurnFee (uint256 _amount) private view returns (uint256) {
        return _amount * burnFee / 100;
    }
  

    function removeAllFee() private {
        if(taxFee == 0 && buyBackFee == 0 && marketingFee == 0 && burnFee == 0) return;
        
        _previousTaxFee = taxFee;
        _previousBuyBackFee = buyBackFee;
        _previousMarketingFee = marketingFee;
        _previousBurnFee = burnFee;
        
        taxFee = 0;
        buyBackFee = 0;
        marketingFee = 0;
        burnFee = 0;
    }
    
    function restoreAllFee() private {
        taxFee = _previousTaxFee;
        buyBackFee = _previousBuyBackFee;
        marketingFee = _previousMarketingFee;
        burnFee = _previousBurnFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");


        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapEnabled
        ) {
            inSwapAndLiquify = true;
            
            uint256 taxForSwap = marketingFee + buyBackFee;
            if(taxForSwap > 0) {
                uint256 initialBalance = address(this).balance;
                swapTokensForETH(contractTokenBalance);
                uint256 newBalance = address(this).balance - initialBalance;
                if(buyBackFee > 0) {
                     sendETH(payable(buyBackWallet), (newBalance * buyBackFee ) / taxForSwap);
                }
                
                if(marketingFee > 0) {
                    sendETH(payable(marketingWallet), (newBalance * marketingFee ) / taxForSwap);
                } 
            }
            inSwapAndLiquify = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount);
    }

    //=======Swap=======//
    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner() {
        require(newAmount > totalSupply() / 100000, "SwapTokensAtAmount must be greater than 0.001% of total supply");
        swapTokensAtAmount = newAmount;
    }
    
    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
        emit SwapEnabledUpdated(_enabled);
    }

    //=======TaxAndTransfer=======//
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        bool restoreFees = false;
        if (_isExcludedFromFees[sender] || 
            _isExcludedFromFees[recipient] || 
            (walletToWalletTransferWithoutFee && 
            sender != uniswapV2Pair && recipient != uniswapV2Pair)
        ) {
            removeAllFee();
            restoreFees = true;
        }
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if (restoreFees) {
            restoreAllFee();
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBuyBack, uint256 tMarketing) = _getValues(tAmount);
        (tTransferAmount, rTransferAmount) = _takeBurn(sender, tTransferAmount, rTransferAmount, tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);
        _takeBuyback(tBuyBack);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBuyBack, uint256 tMarketing) = _getValues(tAmount);
        (tTransferAmount, rTransferAmount) = _takeBurn(sender, tTransferAmount, rTransferAmount, tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);           
        _takeBuyback(tBuyBack);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBuyBack, uint256 tMarketing) = _getValues(tAmount);
        (tTransferAmount, rTransferAmount) = _takeBurn(sender, tTransferAmount, rTransferAmount, tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; 
        _takeMarketing(tMarketing);  
        _takeBuyback(tBuyBack);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBuyBack, uint256 tMarketing) = _getValues(tAmount);
        (tTransferAmount, rTransferAmount) = _takeBurn(sender, tTransferAmount, rTransferAmount, tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);        
        _takeBuyback(tBuyBack);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    //=======FeeManagement=======//
    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != marketingWallet, "Marketing wallet is already that address");
        require(!isContract(_marketingWallet), "Marketing wallet cannot be a contract");
        marketingWallet = _marketingWallet;
        emit MarketingWalletChanged(marketingWallet);
    }

    function changeBuyBackWallet(address _buyBackWallet) external onlyOwner {
        require(_buyBackWallet != buyBackWallet, "Buyback wallet is already that address");
        require(!isContract(_buyBackWallet), "Buyback wallet cannot be a contract");
        buyBackWallet = _buyBackWallet;
        emit BuyBackWalletChanged(buyBackWallet);
    }

    function setTaxFeePercent(uint256 _taxFee) external onlyOwner() {
        taxFee = _taxFee;
        totalFees = taxFee + marketingFee + buyBackFee + burnFee;
        require(totalFees <= 25, "Total fees must be less than 25%");
    }

    function setMarketingFeePercent(uint256 _marketing) external onlyOwner {
        marketingFee = _marketing;
        totalFees = taxFee + marketingFee + buyBackFee + burnFee;
        require(totalFees <= 25, "Total fees must be less than 25%");
    }
    
    function setBuyBackFeePercent(uint256 _buyBackFee) external onlyOwner() {
        buyBackFee = _buyBackFee;
        totalFees = taxFee + marketingFee + buyBackFee + burnFee;
        require(totalFees <= 25, "Total fees must be less than 25%");
    }

    function setBurnFeePercent(uint256 _burnFee) external onlyOwner() {
        burnFee = _burnFee;
        totalFees = taxFee + marketingFee + buyBackFee + burnFee;
        require(totalFees <= 25, "Total fees must be less than 25%");
    }

    function enableWalletToWalletTransferWithoutFee(bool enable) external onlyOwner {
        require(walletToWalletTransferWithoutFee != enable, "Wallet to wallet transfer without fee is already set to that value");
        walletToWalletTransferWithoutFee = enable;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyBackWallet","type":"address"}],"name":"BuyBackWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":[{"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":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_buyBackWallet","type":"address"}],"name":"changeBuyBackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableWalletToWalletTransferWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyBackFee","type":"uint256"}],"name":"setBuyBackFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletToWalletTransferWithoutFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600660809081526556656e69667960d01b60a05260079062000027908262000776565b5060408051808201909152600381526256465960e81b602082015260089062000051908262000776565b506009805460ff191660129081179091556200006f90600a62000957565b6200007e90620f42406200096f565b600a81905562000091906000196200099f565b6200009f90600019620009b6565b600b556003600d55600d54600e556002600f55600f5460105560016011556011546012556001601355601354601455601354601154600f54600d54620000e69190620009cc565b620000f29190620009cc565b620000fe9190620009cc565b601555601680546001600160a01b031990811673fe43e027edcd5838a9811a3b8449fce17c8ebd7b17909155601780547401fe43e027edcd5838a9811a3b8449fce17c8ebd7b6001600160a81b03199091161790556018805490911661dead179055601a805460ff60a81b1916600160a81b179055600a54620001859061138890620009e2565b601b553480156200019557600080fd5b50600080546001600160a01b031916339081178255604051909182916000805160206200372a833981519152908290a350620001e573fe43e027edcd5838a9811a3b8449fce17c8ebd7b62000498565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002639190620009f9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d79190620009f9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034b9190620009f9565b601a80546001600160a01b039283166001600160a01b03199182161790915560198054928416929091168217905562000389903090600019620005a9565b600160046000620003a26000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556016549091168152600490925280822080548416600190811790915530835290822080549093168117909255600b549190620004146000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620004416000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200048991815260200190565b60405180910390a35062000a24565b6000546001600160a01b03163314620004f85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381166200055f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620004ef565b600080546040516001600160a01b03808516939216916000805160206200372a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166200060d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004ef565b6001600160a01b038216620006705760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004ef565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006fc57607f821691505b6020821081036200071d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200077157600081815260208120601f850160051c810160208610156200074c5750805b601f850160051c820191505b818110156200076d5782815560010162000758565b5050505b505050565b81516001600160401b03811115620007925762000792620006d1565b620007aa81620007a38454620006e7565b8462000723565b602080601f831160018114620007e25760008415620007c95750858301515b600019600386901b1c1916600185901b1785556200076d565b600085815260208120601f198616915b828110156200081357888601518255948401946001909101908401620007f2565b5085821015620008325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008995781600019048211156200087d576200087d62000842565b808516156200088b57918102915b93841c93908002906200085d565b509250929050565b600082620008b25750600162000951565b81620008c15750600062000951565b8160018114620008da5760028114620008e55762000905565b600191505062000951565b60ff841115620008f957620008f962000842565b50506001821b62000951565b5060208310610133831016604e8410600b84101617156200092a575081810a62000951565b62000936838362000858565b80600019048211156200094d576200094d62000842565b0290505b92915050565b60006200096860ff841683620008a1565b9392505050565b808202811582820484141762000951576200095162000842565b634e487b7160e01b600052601260045260246000fd5b600082620009b157620009b162000989565b500690565b8181038181111562000951576200095162000842565b8082018082111562000951576200095162000842565b600082620009f457620009f462000989565b500490565b60006020828403121562000a0c57600080fd5b81516001600160a01b03811681146200096857600080fd5b612cf68062000a346000396000f3fe6080604052600436106102765760003560e01c80636b67c4df1161014f578063afa4f3b2116100c1578063e01af92c1161007a578063e01af92c146107ab578063e04192ce146107cb578063e2f45605146107eb578063f2fde38b14610801578063f9d0831a14610821578063fce589d81461084157600080fd5b8063afa4f3b2146106d0578063b577554a146106f0578063bb85c6d114610705578063c024666814610725578063cea2695814610745578063dd62ed3e1461076557600080fd5b806388f820201161011357806388f820201461060e5780638da5cb5b1461064757806395d89b4114610665578063a071dcf41461067a578063a457c2d714610690578063a9059cbb146106b057600080fd5b80636b67c4df146105825780636ddd17131461059857806370a08231146105b9578063715018a6146105d957806375f0a874146105ee57600080fd5b80633685d419116101e857806349bd5a5e116101ac57806349bd5a5e146104b35780634be8f8b1146104d357806352390c02146104e95780635342acb4146105095780635654d0b3146105425780636475833e1461056257600080fd5b80633685d4191461041357806339509351146104335780633bd5d173146104535780634549b03914610473578063457c194c1461049357600080fd5b80631694505e1161023a5780631694505e1461034457806318160ddd1461037c5780631cd348c01461039157806323b872dd146103b15780632d838119146103d1578063313ce567146103f157600080fd5b8063061c82d01461028257806306fdde03146102a4578063095ea7b3146102cf57806313114a9d146102ff5780631529fbbf1461032357600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506102a261029d366004612916565b610857565b005b3480156102b057600080fd5b506102b961090e565b6040516102c6919061292f565b60405180910390f35b3480156102db57600080fd5b506102ef6102ea366004612992565b6109a0565b60405190151581526020016102c6565b34801561030b57600080fd5b5061031560155481565b6040519081526020016102c6565b34801561032f57600080fd5b506017546102ef90600160a01b900460ff1681565b34801561035057600080fd5b50601954610364906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b34801561038857600080fd5b50600a54610315565b34801561039d57600080fd5b50601754610364906001600160a01b031681565b3480156103bd57600080fd5b506102ef6103cc3660046129be565b6109b7565b3480156103dd57600080fd5b506103156103ec366004612916565b610a09565b3480156103fd57600080fd5b5060095460405160ff90911681526020016102c6565b34801561041f57600080fd5b506102a261042e3660046129ff565b610a8d565b34801561043f57600080fd5b506102ef61044e366004612992565b610c43565b34801561045f57600080fd5b506102a261046e366004612916565b610c7a565b34801561047f57600080fd5b5061031561048e366004612a2a565b610d68565b34801561049f57600080fd5b506102a26104ae366004612916565b610df7565b3480156104bf57600080fd5b50601a54610364906001600160a01b031681565b3480156104df57600080fd5b5061031560115481565b3480156104f557600080fd5b506102a26105043660046129ff565b610e3a565b34801561051557600080fd5b506102ef6105243660046129ff565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561054e57600080fd5b506102a261055d366004612a5a565b610f8d565b34801561056e57600080fd5b506102a261057d366004612916565b611068565b34801561058e57600080fd5b50610315600d5481565b3480156105a457600080fd5b50601a546102ef90600160a81b900460ff1681565b3480156105c557600080fd5b506103156105d43660046129ff565b6110ab565b3480156105e557600080fd5b506102a261110a565b3480156105fa57600080fd5b50601654610364906001600160a01b031681565b34801561061a57600080fd5b506102ef6106293660046129ff565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561065357600080fd5b506000546001600160a01b0316610364565b34801561067157600080fd5b506102b961117e565b34801561068657600080fd5b50610315600f5481565b34801561069c57600080fd5b506102ef6106ab366004612992565b61118d565b3480156106bc57600080fd5b506102ef6106cb366004612992565b6111c4565b3480156106dc57600080fd5b506102a26106eb366004612916565b6111d1565b3480156106fc57600080fd5b50600c54610315565b34801561071157600080fd5b506102a26107203660046129ff565b61128b565b34801561073157600080fd5b506102a2610740366004612a77565b6113df565b34801561075157600080fd5b506102a2610760366004612916565b6114eb565b34801561077157600080fd5b50610315610780366004612aa5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156107b757600080fd5b506102a26107c6366004612a5a565b61152f565b3480156107d757600080fd5b506102a26107e63660046129ff565b6115a6565b3480156107f757600080fd5b50610315601b5481565b34801561080d57600080fd5b506102a261081c3660046129ff565b6116ef565b34801561082d57600080fd5b506102a261083c3660046129ff565b6117d9565b34801561084d57600080fd5b5061031560135481565b6000546001600160a01b0316331461088a5760405162461bcd60e51b815260040161088190612ad3565b60405180910390fd5b600f819055601354601154600d546108a29084612b1e565b6108ac9190612b1e565b6108b69190612b1e565b60158190556019101561090b5760405162461bcd60e51b815260206004820181905260248201527f546f74616c2066656573206d757374206265206c657373207468616e203235256044820152606401610881565b50565b60606007805461091d90612b31565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612b31565b80156109965780601f1061096b57610100808354040283529160200191610996565b820191906000526020600020905b81548152906001019060200180831161097957829003601f168201915b5050505050905090565b60006109ad33848461197c565b5060015b92915050565b60006109c4848484611aa0565b6001600160a01b0384166000908152600360209081526040808320338085529252909120546109ff9186916109fa908690612b6b565b61197c565b5060019392505050565b6000600b54821115610a705760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610881565b6000610a7a611c8e565b9050610a868184612b7e565b9392505050565b6000546001600160a01b03163314610ab75760405162461bcd60e51b815260040161088190612ad3565b6001600160a01b03811660009081526005602052604090205460ff16610b1f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610881565b60005b600654811015610c3f57816001600160a01b031660068281548110610b4957610b49612ba0565b6000918252602090912001546001600160a01b031603610c2d5760068054610b7390600190612b6b565b81548110610b8357610b83612ba0565b600091825260209091200154600680546001600160a01b039092169183908110610baf57610baf612ba0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610c0757610c07612bb6565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c3781612bcc565b915050610b22565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916109ad9185906109fa908690612b1e565b3360008181526005602052604090205460ff1615610cef5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610881565b6000610cfa83611cb1565b505050506001600160a01b038516600090815260016020526040902054929350610d28928492509050612b6b565b6001600160a01b038316600090815260016020526040902055600b54610d4f908290612b6b565b600b55600c54610d60908490612b1e565b600c55505050565b6000600a54831115610dbc5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610881565b81610ddc576000610dcc84611cb1565b509496506109b195505050505050565b6000610de784611cb1565b509396506109b195505050505050565b6000546001600160a01b03163314610e215760405162461bcd60e51b815260040161088190612ad3565b600d819055601354601154600f546108a2908490612b1e565b6000546001600160a01b03163314610e645760405162461bcd60e51b815260040161088190612ad3565b6001600160a01b03811660009081526005602052604090205460ff1615610ecd5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610881565b6001600160a01b03811660009081526001602052604090205415610f27576001600160a01b038116600090815260016020526040902054610f0d90610a09565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610fb75760405162461bcd60e51b815260040161088190612ad3565b801515601760149054906101000a900460ff1615150361104a5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610881565b60178054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146110925760405162461bcd60e51b815260040161088190612ad3565b6011819055601354600d54600f5483916108a291612b1e565b6001600160a01b03811660009081526005602052604081205460ff16156110e857506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546109b190610a09565b6000546001600160a01b031633146111345760405162461bcd60e51b815260040161088190612ad3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60606008805461091d90612b31565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916109ad9185906109fa908690612b6b565b60006109ad338484611aa0565b6000546001600160a01b031633146111fb5760405162461bcd60e51b815260040161088190612ad3565b620186a0611208600a5490565b6112129190612b7e565b81116112865760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610881565b601b55565b6000546001600160a01b031633146112b55760405162461bcd60e51b815260040161088190612ad3565b6016546001600160a01b03908116908216036113245760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610881565b6001600160a01b0381163b1561138a5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610881565b601680546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b906020015b60405180910390a150565b6000546001600160a01b031633146114095760405162461bcd60e51b815260040161088190612ad3565b6001600160a01b03821660009081526004602052604090205481151560ff90911615150361148c5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610881565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146115155760405162461bcd60e51b815260040161088190612ad3565b6013819055601154600d54600f548392916108a291612b1e565b6000546001600160a01b031633146115595760405162461bcd60e51b815260040161088190612ad3565b601a8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a12906113d490831515815260200190565b6000546001600160a01b031633146115d05760405162461bcd60e51b815260040161088190612ad3565b6017546001600160a01b039081169082160361163d5760405162461bcd60e51b815260206004820152602660248201527f4275796261636b2077616c6c657420697320616c72656164792074686174206160448201526564647265737360d01b6064820152608401610881565b6001600160a01b0381163b156116a15760405162461bcd60e51b815260206004820152602360248201527f4275796261636b2077616c6c65742063616e6e6f74206265206120636f6e74726044820152621858dd60ea1b6064820152608401610881565b601780546001600160a01b0319166001600160a01b0383169081179091556040519081527fa3fa5cac702ca41050a2228f592798b83d5a25c45143167d3eb5bf9e7dff73b7906020016113d4565b6000546001600160a01b031633146117195760405162461bcd60e51b815260040161088190612ad3565b6001600160a01b03811661177e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610881565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118035760405162461bcd60e51b815260040161088190612ad3565b306001600160a01b0382160361185b5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610881565b6001600160a01b0381166118955760405133904780156108fc02916000818181858888f19350505050158015610c3f573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156118de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119029190612be5565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119769190612bfe565b50505050565b6001600160a01b0383166119de5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610881565b6001600160a01b038216611a3f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610881565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b045760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610881565b60008111611b665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610881565b6000611b71306110ab565b601b5490915081108015908190611b925750601a54600160a01b900460ff16155b8015611bab5750601a546001600160a01b038581169116145b8015611bc05750601a54600160a81b900460ff165b15611c7c57601a805460ff60a01b1916600160a01b179055601154600d54600091611bea91612b1e565b90508015611c6d5747611bfc84611d0c565b6000611c088247612b6b565b60115490915015611c4257601754601154611c42916001600160a01b0316908590611c339085612c1b565b611c3d9190612b7e565b611e66565b600d5415611c6a57601654600d54611c6a916001600160a01b0316908590611c339085612c1b565b50505b50601a805460ff60a01b191690555b611c87858585611f84565b5050505050565b6000806000611c9b612192565b9092509050611caa8183612b7e565b9250505090565b6000806000806000806000806000806000611ccb8c612315565b93509350935093506000806000611cec8f878787611ce7611c8e565b612374565b919f509d509b509599509397509195509350505050919395979092949650565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d4157611d41612ba0565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbe9190612c32565b81600181518110611dd157611dd1612ba0565b6001600160a01b039283166020918202929092010152601954611df7913091168461197c565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e30908590600090869030904290600401612c4f565b600060405180830381600087803b158015611e4a57600080fd5b505af1158015611e5e573d6000803e3d6000fd5b505050505050565b80471015611eb65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610881565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b5050905080611f7f5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610881565b505050565b6001600160a01b03831660009081526004602052604081205460ff1680611fc357506001600160a01b03831660009081526004602052604090205460ff165b8061200a5750601754600160a01b900460ff168015611ff05750601a546001600160a01b03858116911614155b801561200a5750601a546001600160a01b03848116911614155b1561201b576120176123e6565b5060015b6001600160a01b03841660009081526005602052604090205460ff16801561205c57506001600160a01b03831660009081526005602052604090205460ff16155b156120715761206c848484612441565b61216f565b6001600160a01b03841660009081526005602052604090205460ff161580156120b257506001600160a01b03831660009081526005602052604090205460ff165b156120c25761206c848484612587565b6001600160a01b03841660009081526005602052604090205460ff1615801561210457506001600160a01b03831660009081526005602052604090205460ff16155b156121145761206c848484612646565b6001600160a01b03841660009081526005602052604090205460ff16801561215457506001600160a01b03831660009081526005602052604090205460ff165b156121645761206c84848461269e565b61216f848484612646565b801561197657611976601054600f55601254601155600e54600d55601454601355565b600b54600a546000918291825b6006548110156122e4578260016000600684815481106121c1576121c1612ba0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061222c575081600260006006848154811061220557612205612ba0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561224257600b54600a54945094505050509091565b600160006006838154811061225957612259612ba0565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122889084612b6b565b925060026000600683815481106122a1576122a1612ba0565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122d09083612b6b565b9150806122dc81612bcc565b91505061219f565b50600a54600b546122f59190612b7e565b82101561230c57600b54600a549350935050509091565b90939092509050565b600080600080600061232686612726565b9050600061233387612742565b9050600061234088612754565b905060008183612350868c612b6b565b61235a9190612b6b565b6123649190612b6b565b9993985091965094509092505050565b6000808080612383858a612c1b565b90506000612391868a612c1b565b9050600061239f878a612c1b565b905060006123ad888a612c1b565b9050600081836123bd8688612b6b565b6123c79190612b6b565b6123d19190612b6b565b949d949c50929a509298505050505050505050565b600f541580156123f65750601154155b80156124025750600d54155b801561240e5750601354155b1561241557565b600f805460105560118054601255600d8054600e55601380546014556000938490559183905582905555565b600080600080600080600061245588611cb1565b965096509650965096509650965061246f8a85888b612766565b6001600160a01b038c16600090815260026020526040902054909750909450612499908990612b6b565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546124c9908890612b6b565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546124f9908790612b1e565b6001600160a01b038a1660009081526001602052604090205561251b81612860565b61252482612860565b61252e85846128f0565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161257391815260200190565b60405180910390a350505050505050505050565b600080600080600080600061259b88611cb1565b96509650965096509650965096506125b58a85888b612766565b6001600160a01b038c166000908152600160205260409020549097509094506125df908890612b6b565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612616908590612b1e565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546124f9908790612b1e565b600080600080600080600061265a88611cb1565b96509650965096509650965096506126748a85888b612766565b6001600160a01b038c166000908152600160205260409020549097509094506124c9908890612b6b565b60008060008060008060006126b288611cb1565b96509650965096509650965096506126cc8a85888b612766565b6001600160a01b038c166000908152600260205260409020549097509094506126f6908990612b6b565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546125df908890612b6b565b60006064600f54836127389190612c1b565b6109b19190612b7e565b60006064601154836127389190612c1b565b60006064600d54836127389190612c1b565b60008060135460000361277d575083905082612857565b60135460009061278e606486612b7e565b6127989190612c1b565b905060006127a4611c8e565b6127ae9083612c1b565b90506127ba8187612b6b565b95506127c68288612b6b565b6018546001600160a01b03166000908152600160205260409020549097506127ef908290612b1e565b601880546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a386869350935050505b94509492505050565b801561090b576000612870611c8e565b9050600061287e8284612c1b565b3060009081526001602052604090205490915061289c908290612b1e565b3060009081526001602090815260408083209390935560059052205460ff1615611f7f57306000908152600260205260409020546128db908490612b1e565b30600090815260026020526040902055505050565b81600b546128fe9190612b6b565b600b55600c5461290f908290612b1e565b600c555050565b60006020828403121561292857600080fd5b5035919050565b600060208083528351808285015260005b8181101561295c57858101830151858201604001528201612940565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461090b57600080fd5b600080604083850312156129a557600080fd5b82356129b08161297d565b946020939093013593505050565b6000806000606084860312156129d357600080fd5b83356129de8161297d565b925060208401356129ee8161297d565b929592945050506040919091013590565b600060208284031215612a1157600080fd5b8135610a868161297d565b801515811461090b57600080fd5b60008060408385031215612a3d57600080fd5b823591506020830135612a4f81612a1c565b809150509250929050565b600060208284031215612a6c57600080fd5b8135610a8681612a1c565b60008060408385031215612a8a57600080fd5b8235612a958161297d565b91506020830135612a4f81612a1c565b60008060408385031215612ab857600080fd5b8235612ac38161297d565b91506020830135612a4f8161297d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109b1576109b1612b08565b600181811c90821680612b4557607f821691505b602082108103612b6557634e487b7160e01b600052602260045260246000fd5b50919050565b818103818111156109b1576109b1612b08565b600082612b9b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201612bde57612bde612b08565b5060010190565b600060208284031215612bf757600080fd5b5051919050565b600060208284031215612c1057600080fd5b8151610a8681612a1c565b80820281158282048414176109b1576109b1612b08565b600060208284031215612c4457600080fd5b8151610a868161297d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c9f5784516001600160a01b031683529383019391830191600101612c7a565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220b1a356ce2aba655860d6112e41a811a832cb32071132bbb2fe230acb1abf38b764736f6c634300081100338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106102765760003560e01c80636b67c4df1161014f578063afa4f3b2116100c1578063e01af92c1161007a578063e01af92c146107ab578063e04192ce146107cb578063e2f45605146107eb578063f2fde38b14610801578063f9d0831a14610821578063fce589d81461084157600080fd5b8063afa4f3b2146106d0578063b577554a146106f0578063bb85c6d114610705578063c024666814610725578063cea2695814610745578063dd62ed3e1461076557600080fd5b806388f820201161011357806388f820201461060e5780638da5cb5b1461064757806395d89b4114610665578063a071dcf41461067a578063a457c2d714610690578063a9059cbb146106b057600080fd5b80636b67c4df146105825780636ddd17131461059857806370a08231146105b9578063715018a6146105d957806375f0a874146105ee57600080fd5b80633685d419116101e857806349bd5a5e116101ac57806349bd5a5e146104b35780634be8f8b1146104d357806352390c02146104e95780635342acb4146105095780635654d0b3146105425780636475833e1461056257600080fd5b80633685d4191461041357806339509351146104335780633bd5d173146104535780634549b03914610473578063457c194c1461049357600080fd5b80631694505e1161023a5780631694505e1461034457806318160ddd1461037c5780631cd348c01461039157806323b872dd146103b15780632d838119146103d1578063313ce567146103f157600080fd5b8063061c82d01461028257806306fdde03146102a4578063095ea7b3146102cf57806313114a9d146102ff5780631529fbbf1461032357600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506102a261029d366004612916565b610857565b005b3480156102b057600080fd5b506102b961090e565b6040516102c6919061292f565b60405180910390f35b3480156102db57600080fd5b506102ef6102ea366004612992565b6109a0565b60405190151581526020016102c6565b34801561030b57600080fd5b5061031560155481565b6040519081526020016102c6565b34801561032f57600080fd5b506017546102ef90600160a01b900460ff1681565b34801561035057600080fd5b50601954610364906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b34801561038857600080fd5b50600a54610315565b34801561039d57600080fd5b50601754610364906001600160a01b031681565b3480156103bd57600080fd5b506102ef6103cc3660046129be565b6109b7565b3480156103dd57600080fd5b506103156103ec366004612916565b610a09565b3480156103fd57600080fd5b5060095460405160ff90911681526020016102c6565b34801561041f57600080fd5b506102a261042e3660046129ff565b610a8d565b34801561043f57600080fd5b506102ef61044e366004612992565b610c43565b34801561045f57600080fd5b506102a261046e366004612916565b610c7a565b34801561047f57600080fd5b5061031561048e366004612a2a565b610d68565b34801561049f57600080fd5b506102a26104ae366004612916565b610df7565b3480156104bf57600080fd5b50601a54610364906001600160a01b031681565b3480156104df57600080fd5b5061031560115481565b3480156104f557600080fd5b506102a26105043660046129ff565b610e3a565b34801561051557600080fd5b506102ef6105243660046129ff565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561054e57600080fd5b506102a261055d366004612a5a565b610f8d565b34801561056e57600080fd5b506102a261057d366004612916565b611068565b34801561058e57600080fd5b50610315600d5481565b3480156105a457600080fd5b50601a546102ef90600160a81b900460ff1681565b3480156105c557600080fd5b506103156105d43660046129ff565b6110ab565b3480156105e557600080fd5b506102a261110a565b3480156105fa57600080fd5b50601654610364906001600160a01b031681565b34801561061a57600080fd5b506102ef6106293660046129ff565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561065357600080fd5b506000546001600160a01b0316610364565b34801561067157600080fd5b506102b961117e565b34801561068657600080fd5b50610315600f5481565b34801561069c57600080fd5b506102ef6106ab366004612992565b61118d565b3480156106bc57600080fd5b506102ef6106cb366004612992565b6111c4565b3480156106dc57600080fd5b506102a26106eb366004612916565b6111d1565b3480156106fc57600080fd5b50600c54610315565b34801561071157600080fd5b506102a26107203660046129ff565b61128b565b34801561073157600080fd5b506102a2610740366004612a77565b6113df565b34801561075157600080fd5b506102a2610760366004612916565b6114eb565b34801561077157600080fd5b50610315610780366004612aa5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156107b757600080fd5b506102a26107c6366004612a5a565b61152f565b3480156107d757600080fd5b506102a26107e63660046129ff565b6115a6565b3480156107f757600080fd5b50610315601b5481565b34801561080d57600080fd5b506102a261081c3660046129ff565b6116ef565b34801561082d57600080fd5b506102a261083c3660046129ff565b6117d9565b34801561084d57600080fd5b5061031560135481565b6000546001600160a01b0316331461088a5760405162461bcd60e51b815260040161088190612ad3565b60405180910390fd5b600f819055601354601154600d546108a29084612b1e565b6108ac9190612b1e565b6108b69190612b1e565b60158190556019101561090b5760405162461bcd60e51b815260206004820181905260248201527f546f74616c2066656573206d757374206265206c657373207468616e203235256044820152606401610881565b50565b60606007805461091d90612b31565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612b31565b80156109965780601f1061096b57610100808354040283529160200191610996565b820191906000526020600020905b81548152906001019060200180831161097957829003601f168201915b5050505050905090565b60006109ad33848461197c565b5060015b92915050565b60006109c4848484611aa0565b6001600160a01b0384166000908152600360209081526040808320338085529252909120546109ff9186916109fa908690612b6b565b61197c565b5060019392505050565b6000600b54821115610a705760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610881565b6000610a7a611c8e565b9050610a868184612b7e565b9392505050565b6000546001600160a01b03163314610ab75760405162461bcd60e51b815260040161088190612ad3565b6001600160a01b03811660009081526005602052604090205460ff16610b1f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610881565b60005b600654811015610c3f57816001600160a01b031660068281548110610b4957610b49612ba0565b6000918252602090912001546001600160a01b031603610c2d5760068054610b7390600190612b6b565b81548110610b8357610b83612ba0565b600091825260209091200154600680546001600160a01b039092169183908110610baf57610baf612ba0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610c0757610c07612bb6565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c3781612bcc565b915050610b22565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916109ad9185906109fa908690612b1e565b3360008181526005602052604090205460ff1615610cef5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610881565b6000610cfa83611cb1565b505050506001600160a01b038516600090815260016020526040902054929350610d28928492509050612b6b565b6001600160a01b038316600090815260016020526040902055600b54610d4f908290612b6b565b600b55600c54610d60908490612b1e565b600c55505050565b6000600a54831115610dbc5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610881565b81610ddc576000610dcc84611cb1565b509496506109b195505050505050565b6000610de784611cb1565b509396506109b195505050505050565b6000546001600160a01b03163314610e215760405162461bcd60e51b815260040161088190612ad3565b600d819055601354601154600f546108a2908490612b1e565b6000546001600160a01b03163314610e645760405162461bcd60e51b815260040161088190612ad3565b6001600160a01b03811660009081526005602052604090205460ff1615610ecd5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610881565b6001600160a01b03811660009081526001602052604090205415610f27576001600160a01b038116600090815260016020526040902054610f0d90610a09565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610fb75760405162461bcd60e51b815260040161088190612ad3565b801515601760149054906101000a900460ff1615150361104a5760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610881565b60178054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146110925760405162461bcd60e51b815260040161088190612ad3565b6011819055601354600d54600f5483916108a291612b1e565b6001600160a01b03811660009081526005602052604081205460ff16156110e857506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546109b190610a09565b6000546001600160a01b031633146111345760405162461bcd60e51b815260040161088190612ad3565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60606008805461091d90612b31565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916109ad9185906109fa908690612b6b565b60006109ad338484611aa0565b6000546001600160a01b031633146111fb5760405162461bcd60e51b815260040161088190612ad3565b620186a0611208600a5490565b6112129190612b7e565b81116112865760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610881565b601b55565b6000546001600160a01b031633146112b55760405162461bcd60e51b815260040161088190612ad3565b6016546001600160a01b03908116908216036113245760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610881565b6001600160a01b0381163b1561138a5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610881565b601680546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b906020015b60405180910390a150565b6000546001600160a01b031633146114095760405162461bcd60e51b815260040161088190612ad3565b6001600160a01b03821660009081526004602052604090205481151560ff90911615150361148c5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610881565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146115155760405162461bcd60e51b815260040161088190612ad3565b6013819055601154600d54600f548392916108a291612b1e565b6000546001600160a01b031633146115595760405162461bcd60e51b815260040161088190612ad3565b601a8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a12906113d490831515815260200190565b6000546001600160a01b031633146115d05760405162461bcd60e51b815260040161088190612ad3565b6017546001600160a01b039081169082160361163d5760405162461bcd60e51b815260206004820152602660248201527f4275796261636b2077616c6c657420697320616c72656164792074686174206160448201526564647265737360d01b6064820152608401610881565b6001600160a01b0381163b156116a15760405162461bcd60e51b815260206004820152602360248201527f4275796261636b2077616c6c65742063616e6e6f74206265206120636f6e74726044820152621858dd60ea1b6064820152608401610881565b601780546001600160a01b0319166001600160a01b0383169081179091556040519081527fa3fa5cac702ca41050a2228f592798b83d5a25c45143167d3eb5bf9e7dff73b7906020016113d4565b6000546001600160a01b031633146117195760405162461bcd60e51b815260040161088190612ad3565b6001600160a01b03811661177e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610881565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118035760405162461bcd60e51b815260040161088190612ad3565b306001600160a01b0382160361185b5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610881565b6001600160a01b0381166118955760405133904780156108fc02916000818181858888f19350505050158015610c3f573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156118de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119029190612be5565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119769190612bfe565b50505050565b6001600160a01b0383166119de5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610881565b6001600160a01b038216611a3f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610881565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b045760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610881565b60008111611b665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610881565b6000611b71306110ab565b601b5490915081108015908190611b925750601a54600160a01b900460ff16155b8015611bab5750601a546001600160a01b038581169116145b8015611bc05750601a54600160a81b900460ff165b15611c7c57601a805460ff60a01b1916600160a01b179055601154600d54600091611bea91612b1e565b90508015611c6d5747611bfc84611d0c565b6000611c088247612b6b565b60115490915015611c4257601754601154611c42916001600160a01b0316908590611c339085612c1b565b611c3d9190612b7e565b611e66565b600d5415611c6a57601654600d54611c6a916001600160a01b0316908590611c339085612c1b565b50505b50601a805460ff60a01b191690555b611c87858585611f84565b5050505050565b6000806000611c9b612192565b9092509050611caa8183612b7e565b9250505090565b6000806000806000806000806000806000611ccb8c612315565b93509350935093506000806000611cec8f878787611ce7611c8e565b612374565b919f509d509b509599509397509195509350505050919395979092949650565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d4157611d41612ba0565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbe9190612c32565b81600181518110611dd157611dd1612ba0565b6001600160a01b039283166020918202929092010152601954611df7913091168461197c565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e30908590600090869030904290600401612c4f565b600060405180830381600087803b158015611e4a57600080fd5b505af1158015611e5e573d6000803e3d6000fd5b505050505050565b80471015611eb65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610881565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b5050905080611f7f5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610881565b505050565b6001600160a01b03831660009081526004602052604081205460ff1680611fc357506001600160a01b03831660009081526004602052604090205460ff165b8061200a5750601754600160a01b900460ff168015611ff05750601a546001600160a01b03858116911614155b801561200a5750601a546001600160a01b03848116911614155b1561201b576120176123e6565b5060015b6001600160a01b03841660009081526005602052604090205460ff16801561205c57506001600160a01b03831660009081526005602052604090205460ff16155b156120715761206c848484612441565b61216f565b6001600160a01b03841660009081526005602052604090205460ff161580156120b257506001600160a01b03831660009081526005602052604090205460ff165b156120c25761206c848484612587565b6001600160a01b03841660009081526005602052604090205460ff1615801561210457506001600160a01b03831660009081526005602052604090205460ff16155b156121145761206c848484612646565b6001600160a01b03841660009081526005602052604090205460ff16801561215457506001600160a01b03831660009081526005602052604090205460ff165b156121645761206c84848461269e565b61216f848484612646565b801561197657611976601054600f55601254601155600e54600d55601454601355565b600b54600a546000918291825b6006548110156122e4578260016000600684815481106121c1576121c1612ba0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061222c575081600260006006848154811061220557612205612ba0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561224257600b54600a54945094505050509091565b600160006006838154811061225957612259612ba0565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122889084612b6b565b925060026000600683815481106122a1576122a1612ba0565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122d09083612b6b565b9150806122dc81612bcc565b91505061219f565b50600a54600b546122f59190612b7e565b82101561230c57600b54600a549350935050509091565b90939092509050565b600080600080600061232686612726565b9050600061233387612742565b9050600061234088612754565b905060008183612350868c612b6b565b61235a9190612b6b565b6123649190612b6b565b9993985091965094509092505050565b6000808080612383858a612c1b565b90506000612391868a612c1b565b9050600061239f878a612c1b565b905060006123ad888a612c1b565b9050600081836123bd8688612b6b565b6123c79190612b6b565b6123d19190612b6b565b949d949c50929a509298505050505050505050565b600f541580156123f65750601154155b80156124025750600d54155b801561240e5750601354155b1561241557565b600f805460105560118054601255600d8054600e55601380546014556000938490559183905582905555565b600080600080600080600061245588611cb1565b965096509650965096509650965061246f8a85888b612766565b6001600160a01b038c16600090815260026020526040902054909750909450612499908990612b6b565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546124c9908890612b6b565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546124f9908790612b1e565b6001600160a01b038a1660009081526001602052604090205561251b81612860565b61252482612860565b61252e85846128f0565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161257391815260200190565b60405180910390a350505050505050505050565b600080600080600080600061259b88611cb1565b96509650965096509650965096506125b58a85888b612766565b6001600160a01b038c166000908152600160205260409020549097509094506125df908890612b6b565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612616908590612b1e565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546124f9908790612b1e565b600080600080600080600061265a88611cb1565b96509650965096509650965096506126748a85888b612766565b6001600160a01b038c166000908152600160205260409020549097509094506124c9908890612b6b565b60008060008060008060006126b288611cb1565b96509650965096509650965096506126cc8a85888b612766565b6001600160a01b038c166000908152600260205260409020549097509094506126f6908990612b6b565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546125df908890612b6b565b60006064600f54836127389190612c1b565b6109b19190612b7e565b60006064601154836127389190612c1b565b60006064600d54836127389190612c1b565b60008060135460000361277d575083905082612857565b60135460009061278e606486612b7e565b6127989190612c1b565b905060006127a4611c8e565b6127ae9083612c1b565b90506127ba8187612b6b565b95506127c68288612b6b565b6018546001600160a01b03166000908152600160205260409020549097506127ef908290612b1e565b601880546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a386869350935050505b94509492505050565b801561090b576000612870611c8e565b9050600061287e8284612c1b565b3060009081526001602052604090205490915061289c908290612b1e565b3060009081526001602090815260408083209390935560059052205460ff1615611f7f57306000908152600260205260409020546128db908490612b1e565b30600090815260026020526040902055505050565b81600b546128fe9190612b6b565b600b55600c5461290f908290612b1e565b600c555050565b60006020828403121561292857600080fd5b5035919050565b600060208083528351808285015260005b8181101561295c57858101830151858201604001528201612940565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461090b57600080fd5b600080604083850312156129a557600080fd5b82356129b08161297d565b946020939093013593505050565b6000806000606084860312156129d357600080fd5b83356129de8161297d565b925060208401356129ee8161297d565b929592945050506040919091013590565b600060208284031215612a1157600080fd5b8135610a868161297d565b801515811461090b57600080fd5b60008060408385031215612a3d57600080fd5b823591506020830135612a4f81612a1c565b809150509250929050565b600060208284031215612a6c57600080fd5b8135610a8681612a1c565b60008060408385031215612a8a57600080fd5b8235612a958161297d565b91506020830135612a4f81612a1c565b60008060408385031215612ab857600080fd5b8235612ac38161297d565b91506020830135612a4f8161297d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109b1576109b1612b08565b600181811c90821680612b4557607f821691505b602082108103612b6557634e487b7160e01b600052602260045260246000fd5b50919050565b818103818111156109b1576109b1612b08565b600082612b9b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201612bde57612bde612b08565b5060010190565b600060208284031215612bf757600080fd5b5051919050565b600060208284031215612c1057600080fd5b8151610a8681612a1c565b80820281158282048414176109b1576109b1612b08565b600060208284031215612c4457600080fd5b8151610a868161297d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c9f5784516001600160a01b031683529383019391830191600101612c7a565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220b1a356ce2aba655860d6112e41a811a832cb32071132bbb2fe230acb1abf38b764736f6c63430008110033

Deployed Bytecode Sourcemap

12936:21836:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33477:237;;;;;;;;;;-1:-1:-1;33477:237:0;;;;;:::i;:::-;;:::i;:::-;;15600:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16512:161;;;;;;;;;;-1:-1:-1;16512:161:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;16512:161:0;1208:187:1;14042:71:0;;;;;;;;;;;;;;;;;;;1546:25:1;;;1534:2;1519:18;14042:71:0;1400:177:1;14286:51:0;;;;;;;;;;-1:-1:-1;14286:51:0;;;;-1:-1:-1;;;14286:51:0;;;;;;14424:42;;;;;;;;;;-1:-1:-1;14424:42:0;;;;-1:-1:-1;;;;;14424:42:0;;;;;;-1:-1:-1;;;;;1773:32:1;;;1755:51;;1743:2;1728:18;14424:42:0;1582:230:1;15877:95:0;;;;;;;;;;-1:-1:-1;15957:7:0;;15877:95;;14204:73;;;;;;;;;;-1:-1:-1;14204:73:0;;;;-1:-1:-1;;;;;14204:73:0;;;16681:266;;;;;;;;;;-1:-1:-1;16681:266:0;;;;;:::i;:::-;;:::i;18474:250::-;;;;;;;;;;-1:-1:-1;18474:250:0;;;;;:::i;:::-;;:::i;15786:83::-;;;;;;;;;;-1:-1:-1;15852:9:0;;15786:83;;15852:9;;;;2628:36:1;;2616:2;2601:18;15786:83:0;2486:184:1;19073:479:0;;;;;;;;;;-1:-1:-1;19073:479:0;;;;;:::i;:::-;;:::i;16955:215::-;;;;;;;;;;-1:-1:-1;16955:215:0;;;;;:::i;:::-;;:::i;17651:369::-;;;;;;;;;;-1:-1:-1;17651:369:0;;;;;:::i;:::-;;:::i;18028:438::-;;;;;;;;;;-1:-1:-1;18028:438:0;;;;;:::i;:::-;;:::i;33722:253::-;;;;;;;;;;-1:-1:-1;33722:253:0;;;;;:::i;:::-;;:::i;14473:29::-;;;;;;;;;;-1:-1:-1;14473:29:0;;;;-1:-1:-1;;;;;14473:29:0;;;13865;;;;;;;;;;;;;;;;18732:333;;;;;;;;;;-1:-1:-1;18732:333:0;;;;;:::i;:::-;;:::i;25369:124::-;;;;;;;;;;-1:-1:-1;25369:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;25457:28:0;25433:4;25457:28;;;:19;:28;;;;;;;;;25369:124;34497:272;;;;;;;;;;-1:-1:-1;34497:272:0;;;;;:::i;:::-;;:::i;33987:253::-;;;;;;;;;;-1:-1:-1;33987:253:0;;;;;:::i;:::-;;:::i;13681:31::-;;;;;;;;;;;;;;;;14547:30;;;;;;;;;;-1:-1:-1;14547:30:0;;;;-1:-1:-1;;;14547:30:0;;;;;;15980:198;;;;;;;;;;-1:-1:-1;15980:198:0;;;;;:::i;:::-;;:::i;1001:148::-;;;;;;;;;;;;;:::i;14122:75::-;;;;;;;;;;-1:-1:-1;14122:75:0;;;;-1:-1:-1;;;;;14122:75:0;;;17411:120;;;;;;;;;;-1:-1:-1;17411:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17503:20:0;17479:4;17503:20;;;:11;:20;;;;;;;;;17411:120;787:79;;;;;;;;;;-1:-1:-1;825:7:0;852:6;-1:-1:-1;;;;;852:6:0;787:79;;15691:87;;;;;;;;;;;;;:::i;13780:25::-;;;;;;;;;;;;;;;;17178:225;;;;;;;;;;-1:-1:-1;17178:225:0;;;;;:::i;:::-;;:::i;16186:167::-;;;;;;;;;;-1:-1:-1;16186:167:0;;;;;:::i;:::-;;:::i;27919:240::-;;;;;;;;;;-1:-1:-1;27919:240:0;;;;;:::i;:::-;;:::i;17539:104::-;;;;;;;;;;-1:-1:-1;17625:10:0;;17539:104;;32737:373;;;;;;;;;;-1:-1:-1;32737:373:0;;;;;:::i;:::-;;:::i;32433:292::-;;;;;;;;;;-1:-1:-1;32433:292:0;;;;;:::i;:::-;;:::i;34248:241::-;;;;;;;;;;-1:-1:-1;34248:241:0;;;;;:::i;:::-;;:::i;16361:143::-;;;;;;;;;;-1:-1:-1;16361:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16469:18:0;;;16442:7;16469:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16361:143;28171;;;;;;;;;;-1:-1:-1;28171:143:0;;;;;:::i;:::-;;:::i;33118:351::-;;;;;;;;;;-1:-1:-1;33118:351:0;;;;;:::i;:::-;;:::i;14584:50::-;;;;;;;;;;;;;;;;1157:244;;;;;;;;;;-1:-1:-1;1157:244:0;;;;;:::i;:::-;;:::i;19597:441::-;;;;;;;;;;-1:-1:-1;19597:441:0;;;;;:::i;:::-;;:::i;13958:26::-;;;;;;;;;;;;;;;;33477:237;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;;;;;;;;;33552:6:::1;:16:::0;;;33628:7:::1;::::0;33615:10:::1;::::0;33600:12:::1;::::0;33591:21:::1;::::0;33561:7;33591:21:::1;:::i;:::-;:34;;;;:::i;:::-;:44;;;;:::i;:::-;33579:9;:56:::0;;;33667:2:::1;-1:-1:-1::0;33654:15:0::1;33646:60;;;::::0;-1:-1:-1;;;33646:60:0;;5215:2:1;33646:60:0::1;::::0;::::1;5197:21:1::0;;;5234:18;;;5227:30;5293:34;5273:18;;;5266:62;5345:18;;33646:60:0::1;5013:356:1::0;33646:60:0::1;33477:237:::0;:::o;15600:83::-;15637:13;15670:5;15663:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15600:83;:::o;16512:161::-;16587:4;16604:39;191:10;16627:7;16636:6;16604:8;:39::i;:::-;-1:-1:-1;16661:4:0;16512:161;;;;;:::o;16681:266::-;16779:4;16796:36;16806:6;16814:9;16825:6;16796:9;:36::i;:::-;-1:-1:-1;;;;;16874:19:0;;;;;;:11;:19;;;;;;;;191:10;16874:33;;;;;;;;;16843:74;;16852:6;;16874:42;;16910:6;;16874:42;:::i;:::-;16843:8;:74::i;:::-;-1:-1:-1;16935:4:0;16681:266;;;;;:::o;18474:250::-;18540:7;18579;;18568;:18;;18560:73;;;;-1:-1:-1;;;18560:73:0;;6094:2:1;18560:73:0;;;6076:21:1;6133:2;6113:18;;;6106:30;6172:34;6152:18;;;6145:62;-1:-1:-1;;;6223:18:1;;;6216:40;6273:19;;18560:73:0;5892:406:1;18560:73:0;18644:19;18667:10;:8;:10::i;:::-;18644:33;-1:-1:-1;18695:21:0;18644:33;18695:7;:21;:::i;:::-;18688:28;18474:250;-1:-1:-1;;;18474:250:0:o;19073:479::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19155:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19147:60;;;::::0;-1:-1:-1;;;19147:60:0;;6727:2:1;19147:60:0::1;::::0;::::1;6709:21:1::0;6766:2;6746:18;;;6739:30;6805:29;6785:18;;;6778:57;6852:18;;19147:60:0::1;6525:351:1::0;19147:60:0::1;19223:9;19218:327;19242:9;:16:::0;19238:20;::::1;19218:327;;;19300:7;-1:-1:-1::0;;;;;19284:23:0::1;:9;19294:1;19284:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19284:12:0::1;:23:::0;19280:254:::1;;19343:9;19353:16:::0;;:20:::1;::::0;19372:1:::1;::::0;19353:20:::1;:::i;:::-;19343:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19328:9:::1;:12:::0;;-1:-1:-1;;;;;19343:31:0;;::::1;::::0;19338:1;;19328:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;19328:46:0::1;-1:-1:-1::0;;;;;19328:46:0;;::::1;;::::0;;19393:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19432:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19432:28:0::1;::::0;;19479:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19479:15:0;;;;;-1:-1:-1;;;;;;19479:15:0::1;::::0;;;;;19218:327:::1;19073:479:::0;:::o;19280:254::-:1;19260:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19218:327;;;;19073:479:::0;:::o;16955:215::-;191:10;17043:4;17092:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17092:34:0;;;;;;;;;;17043:4;;17060:80;;17083:7;;17092:47;;17129:10;;17092:47;:::i;17651:369::-;191:10;17703:14;17752:19;;;:11;:19;;;;;;;;17751:20;17743:77;;;;-1:-1:-1;;;17743:77:0;;7487:2:1;17743:77:0;;;7469:21:1;7526:2;7506:18;;;7499:30;7565:34;7545:18;;;7538:62;-1:-1:-1;;;7616:18:1;;;7609:42;7668:19;;17743:77:0;7285:408:1;17743:77:0;17832:15;17857:19;17868:7;17857:10;:19::i;:::-;-1:-1:-1;;;;;;;;;17905:15:0;;;;;;:7;:15;;;;;;17831:45;;-1:-1:-1;17905:25:0;;17831:45;;-1:-1:-1;17905:15:0;-1:-1:-1;17905:25:0;:::i;:::-;-1:-1:-1;;;;;17887:15:0;;;;;;:7;:15;;;;;:43;17951:7;;:17;;17961:7;;17951:17;:::i;:::-;17941:7;:27;17992:10;;:20;;18005:7;;17992:20;:::i;:::-;17979:10;:33;-1:-1:-1;;;17651:369:0:o;18028:438::-;18118:7;18157;;18146;:18;;18138:62;;;;-1:-1:-1;;;18138:62:0;;7900:2:1;18138:62:0;;;7882:21:1;7939:2;7919:18;;;7912:30;7978:33;7958:18;;;7951:61;8029:18;;18138:62:0;7698:355:1;18138:62:0;18216:17;18211:248;;18251:15;18276:19;18287:7;18276:10;:19::i;:::-;-1:-1:-1;18250:45:0;;-1:-1:-1;18310:14:0;;-1:-1:-1;;;;;;18310:14:0;18211:248;18359:23;18391:19;18402:7;18391:10;:19::i;:::-;-1:-1:-1;18357:53:0;;-1:-1:-1;18425:22:0;;-1:-1:-1;;;;;;18425:22:0;33722:253;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;33804:12:::1;:25:::0;;;33889:7:::1;::::0;33876:10:::1;::::0;33852:6:::1;::::0;:21:::1;::::0;33819:10;;33852:21:::1;:::i;18732:333::-:0;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18815:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18814:21;18806:61;;;::::0;-1:-1:-1;;;18806:61:0;;8260:2:1;18806:61:0::1;::::0;::::1;8242:21:1::0;8299:2;8279:18;;;8272:30;8338:29;8318:18;;;8311:57;8385:18;;18806:61:0::1;8058:351:1::0;18806:61:0::1;-1:-1:-1::0;;;;;18881:16:0;::::1;18900:1;18881:16:::0;;;:7:::1;:16;::::0;;;;;:20;18878:108:::1;;-1:-1:-1::0;;;;;18957:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18937:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18918:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18878:108:::1;-1:-1:-1::0;;;;;18996:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18996:27:0::1;19019:4;18996:27:::0;;::::1;::::0;;;19034:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19034:23:0::1;::::0;;::::1;::::0;;18732:333::o;34497:272::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;34632:6:::1;34596:42;;:32;;;;;;;;;;;:42;;::::0;34588:121:::1;;;::::0;-1:-1:-1;;;34588:121:0;;8616:2:1;34588:121:0::1;::::0;::::1;8598:21:1::0;8655:2;8635:18;;;8628:30;8694:34;8674:18;;;8667:62;8765:34;8745:18;;;8738:62;-1:-1:-1;;;8816:19:1;;;8809:33;8859:19;;34588:121:0::1;8414:470:1::0;34588:121:0::1;34720:32;:41:::0;;;::::1;;-1:-1:-1::0;;;34720:41:0::1;-1:-1:-1::0;;;;34720:41:0;;::::1;::::0;;;::::1;::::0;;34497:272::o;33987:253::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;34070:10:::1;:24:::0;;;34154:7:::1;::::0;34126:12:::1;::::0;34117:6:::1;::::0;34083:11;;34117:21:::1;::::0;::::1;:::i;15980:198::-:0;-1:-1:-1;;;;;16070:20:0;;16046:7;16070:20;;;:11;:20;;;;;;;;16066:49;;;-1:-1:-1;;;;;;16099:16:0;;;;;:7;:16;;;;;;;15980:198::o;16066:49::-;-1:-1:-1;;;;;16153:16:0;;;;;;:7;:16;;;;;;16133:37;;:19;:37::i;1001:148::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;1108:1:::1;1092:6:::0;;1071:40:::1;::::0;-1:-1:-1;;;;;1092:6:0;;::::1;::::0;1071:40:::1;::::0;1108:1;;1071:40:::1;1139:1;1122:19:::0;;-1:-1:-1;;;;;;1122:19:0::1;::::0;;1001:148::o;15691:87::-;15730:13;15763:7;15756:14;;;;;:::i;17178:225::-;191:10;17271:4;17320:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17320:34:0;;;;;;;;;;17271:4;;17288:85;;17311:7;;17320:52;;17357:15;;17320:52;:::i;16186:167::-;16264:4;16281:42;191:10;16305:9;16316:6;16281:9;:42::i;27919:240::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;28037:6:::1;28021:13;15957:7:::0;;;15877:95;28021:13:::1;:22;;;;:::i;:::-;28009:9;:34;28001:109;;;::::0;-1:-1:-1;;;28001:109:0;;9091:2:1;28001:109:0::1;::::0;::::1;9073:21:1::0;9130:2;9110:18;;;9103:30;9169:34;9149:18;;;9142:62;9240:32;9220:18;;;9213:60;9290:19;;28001:109:0::1;8889:426:1::0;28001:109:0::1;28121:18;:30:::0;27919:240::o;32737:373::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;32852:15:::1;::::0;-1:-1:-1;;;;;32852:15:0;;::::1;32832:35:::0;;::::1;::::0;32824:88:::1;;;::::0;-1:-1:-1;;;32824:88:0;;9522:2:1;32824:88:0::1;::::0;::::1;9504:21:1::0;9561:2;9541:18;;;9534:30;9600:34;9580:18;;;9573:62;-1:-1:-1;;;9651:18:1;;;9644:38;9699:19;;32824:88:0::1;9320:404:1::0;32824:88:0::1;-1:-1:-1::0;;;;;20130:19:0;;;:23;32923:79:::1;;;::::0;-1:-1:-1;;;32923:79:0;;9931:2:1;32923:79:0::1;::::0;::::1;9913:21:1::0;9970:2;9950:18;;;9943:30;10009:34;9989:18;;;9982:62;-1:-1:-1;;;10060:18:1;;;10053:35;10105:19;;32923:79:0::1;9729:401:1::0;32923:79:0::1;33013:15;:34:::0;;-1:-1:-1;;;;;;33013:34:0::1;-1:-1:-1::0;;;;;33013:34:0;::::1;::::0;;::::1;::::0;;;33063:39:::1;::::0;1755:51:1;;;33063:39:0::1;::::0;1743:2:1;1728:18;33063:39:0::1;;;;;;;;32737:373:::0;:::o;32433:292::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32528:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;32520:95:::1;;;::::0;-1:-1:-1;;;32520:95:0;;10337:2:1;32520:95:0::1;::::0;::::1;10319:21:1::0;10376:2;10356:18;;;10349:30;10415:34;10395:18;;;10388:62;-1:-1:-1;;;10466:18:1;;;10459:40;10516:19;;32520:95:0::1;10135:406:1::0;32520:95:0::1;-1:-1:-1::0;;;;;32626:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;32626:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32683:34;;1348:41:1;;;32683:34:0::1;::::0;1321:18:1;32683:34:0::1;;;;;;;32433:292:::0;;:::o;34248:241::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;34325:7:::1;:18:::0;;;34390:10:::1;::::0;34375:12:::1;::::0;34366:6:::1;::::0;34335:8;;34390:10;34366:21:::1;::::0;::::1;:::i;28171:143::-:0;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;28240:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;28240:22:0::1;-1:-1:-1::0;;;;28240:22:0;;::::1;;::::0;;28278:28:::1;::::0;::::1;::::0;::::1;::::0;28254:8;1373:14:1;1366:22;1348:41;;1336:2;1321:18;;1208:187;33118:351:0;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;33227:13:::1;::::0;-1:-1:-1;;;;;33227:13:0;;::::1;33209:31:::0;;::::1;::::0;33201:82:::1;;;::::0;-1:-1:-1;;;33201:82:0;;10748:2:1;33201:82:0::1;::::0;::::1;10730:21:1::0;10787:2;10767:18;;;10760:30;10826:34;10806:18;;;10799:62;-1:-1:-1;;;10877:18:1;;;10870:36;10923:19;;33201:82:0::1;10546:402:1::0;33201:82:0::1;-1:-1:-1::0;;;;;20130:19:0;;;:23;33294:75:::1;;;::::0;-1:-1:-1;;;33294:75:0;;11155:2:1;33294:75:0::1;::::0;::::1;11137:21:1::0;11194:2;11174:18;;;11167:30;11233:34;11213:18;;;11206:62;-1:-1:-1;;;11284:18:1;;;11277:33;11327:19;;33294:75:0::1;10953:399:1::0;33294:75:0::1;33380:13;:30:::0;;-1:-1:-1;;;;;;33380:30:0::1;-1:-1:-1::0;;;;;33380:30:0;::::1;::::0;;::::1;::::0;;;33426:35:::1;::::0;1755:51:1;;;33426:35:0::1;::::0;1743:2:1;1728:18;33426:35:0::1;1582:230:1::0;1157:244:0;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1246:22:0;::::1;1238:73;;;::::0;-1:-1:-1;;;1238:73:0;;11559:2:1;1238:73:0::1;::::0;::::1;11541:21:1::0;11598:2;11578:18;;;11571:30;11637:34;11617:18;;;11610:62;-1:-1:-1;;;11688:18:1;;;11681:36;11734:19;;1238:73:0::1;11357:402:1::0;1238:73:0::1;1348:6;::::0;;1327:38:::1;::::0;-1:-1:-1;;;;;1327:38:0;;::::1;::::0;1348:6;::::1;::::0;1327:38:::1;::::0;::::1;1376:6;:17:::0;;-1:-1:-1;;;;;;1376:17:0::1;-1:-1:-1::0;;;;;1376:17:0;;;::::1;::::0;;;::::1;::::0;;1157:244::o;19597:441::-;914:6;;-1:-1:-1;;;;;914:6:0;191:10;914:22;906:67;;;;-1:-1:-1;;;906:67:0;;;;;;;:::i;:::-;19693:4:::1;-1:-1:-1::0;;;;;19676:22:0;::::1;::::0;19668:67:::1;;;::::0;-1:-1:-1;;;19668:67:0;;11966:2:1;19668:67:0::1;::::0;::::1;11948:21:1::0;;;11985:18;;;11978:30;12044:34;12024:18;;;12017:62;12096:18;;19668:67:0::1;11764:356:1::0;19668:67:0::1;-1:-1:-1::0;;;;;19750:21:0;::::1;19746:126;;19788:51;::::0;19796:10:::1;::::0;19817:21:::1;19788:51:::0;::::1;;;::::0;::::1;::::0;;;19817:21;19796:10;19788:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;19746:126;19944:35;::::0;-1:-1:-1;;;19944:35:0;;19973:4:::1;19944:35;::::0;::::1;1755:51:1::0;19909:5:0;;19882:17:::1;::::0;-1:-1:-1;;;;;19944:20:0;::::1;::::0;::::1;::::0;1728:18:1;;19944:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19990:40;::::0;-1:-1:-1;;;19990:40:0;;20010:10:::1;19990:40;::::0;::::1;12488:51:1::0;12555:18;;;12548:34;;;19926:53:0;;-1:-1:-1;;;;;;19990:19:0;::::1;::::0;::::1;::::0;12461:18:1;;19990:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19657:381;;19597:441:::0;:::o;25501:337::-;-1:-1:-1;;;;;25594:19:0;;25586:68;;;;-1:-1:-1;;;25586:68:0;;13045:2:1;25586:68:0;;;13027:21:1;13084:2;13064:18;;;13057:30;13123:34;13103:18;;;13096:62;-1:-1:-1;;;13174:18:1;;;13167:34;13218:19;;25586:68:0;12843:400:1;25586:68:0;-1:-1:-1;;;;;25673:21:0;;25665:68;;;;-1:-1:-1;;;25665:68:0;;13450:2:1;25665:68:0;;;13432:21:1;13489:2;13469:18;;;13462:30;13528:34;13508:18;;;13501:62;-1:-1:-1;;;13579:18:1;;;13572:32;13621:19;;25665:68:0;13248:398:1;25665:68:0;-1:-1:-1;;;;;25746:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25798:32;;1546:25:1;;;25798:32:0;;1519:18:1;25798:32:0;;;;;;;25501:337;;;:::o;25846:1440::-;-1:-1:-1;;;;;25968:18:0;;25960:68;;;;-1:-1:-1;;;25960:68:0;;13853:2:1;25960:68:0;;;13835:21:1;13892:2;13872:18;;;13865:30;13931:34;13911:18;;;13904:62;-1:-1:-1;;;13982:18:1;;;13975:35;14027:19;;25960:68:0;13651:401:1;25960:68:0;26056:1;26047:6;:10;26039:64;;;;-1:-1:-1;;;26039:64:0;;14259:2:1;26039:64:0;;;14241:21:1;14298:2;14278:18;;;14271:30;14337:34;14317:18;;;14310:62;-1:-1:-1;;;14388:18:1;;;14381:39;14437:19;;26039:64:0;14057:405:1;26039:64:0;26118:28;26149:24;26167:4;26149:9;:24::i;:::-;26243:18;;26118:55;;-1:-1:-1;26219:42:0;;;;;;;26290:53;;-1:-1:-1;26327:16:0;;-1:-1:-1;;;26327:16:0;;;;26326:17;26290:53;:89;;;;-1:-1:-1;26366:13:0;;-1:-1:-1;;;;;26360:19:0;;;26366:13;;26360:19;26290:89;:117;;;;-1:-1:-1;26396:11:0;;-1:-1:-1;;;26396:11:0;;;;26290:117;26272:890;;;26434:16;:23;;-1:-1:-1;;;;26434:23:0;-1:-1:-1;;;26434:23:0;;;26522:10;;26507:12;;26434:23;;26507:25;;;:::i;:::-;26486:46;-1:-1:-1;26550:14:0;;26547:565;;26610:21;26650:38;26667:20;26650:16;:38::i;:::-;26707:18;26728:38;26752:14;26728:21;:38;:::i;:::-;26788:10;;26707:59;;-1:-1:-1;26788:14:0;26785:135;;26844:13;;26874:10;;26828:72;;-1:-1:-1;;;;;26844:13:0;;26889:10;;26861:23;;:10;:23;:::i;:::-;26860:39;;;;:::i;:::-;26828:7;:72::i;:::-;26959:12;;:16;26956:140;;27016:15;;27048:12;;27000:76;;-1:-1:-1;;;;;27016:15:0;;27065:10;;27035:25;;:10;:25;:::i;27000:76::-;26566:546;;26547:565;-1:-1:-1;27126:16:0;:24;;-1:-1:-1;;;;27126:24:0;;;26272:890;27248:30;27263:4;27268:2;27271:6;27248:14;:30::i;:::-;25949:1337;;25846:1440;;;:::o;22038:160::-;22079:7;22100:15;22117;22136:19;:17;:19::i;:::-;22099:56;;-1:-1:-1;22099:56:0;-1:-1:-1;22173:17:0;22099:56;;22173:17;:::i;:::-;22166:24;;;;22038:160;:::o;20641:466::-;20700:7;20709;20718;20727;20736;20745;20754;20775:23;20800:12;20814:16;20832:18;20854:20;20866:7;20854:11;:20::i;:::-;20774:100;;;;;;;;20886:15;20903:23;20928:12;20944:60;20956:7;20965:4;20971:8;20981:10;20993;:8;:10::i;:::-;20944:11;:60::i;:::-;20885:119;;-1:-1:-1;20885:119:0;-1:-1:-1;20885:119:0;-1:-1:-1;21055:15:0;;-1:-1:-1;21072:4:0;;-1:-1:-1;21078:8:0;;-1:-1:-1;21088:10:0;-1:-1:-1;;;;20641:466:0;;;;;;;;;:::o;27322:589::-;27472:16;;;27486:1;27472:16;;;;;;;;27448:21;;27472:16;;;;;;;;;;-1:-1:-1;27472:16:0;27448:40;;27517:4;27499;27504:1;27499:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27499:23:0;;;:7;;;;;;;;;;:23;;;;27543:15;;:22;;;-1:-1:-1;;;27543:22:0;;;;:15;;;;;:20;;:22;;;;;27499:7;;27543:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27533:4;27538:1;27533:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27533:32:0;;;:7;;;;;;;;;:32;27610:15;;27578:62;;27595:4;;27610:15;27628:11;27578:8;:62::i;:::-;27679:15;;:224;;-1:-1:-1;;;27679:224:0;;-1:-1:-1;;;;;27679:15:0;;;;:66;;:224;;27760:11;;27679:15;;27830:4;;27857;;27877:15;;27679:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27377:534;27322:589;:::o;20169:315::-;20282:6;20257:21;:31;;20249:73;;;;-1:-1:-1;;;20249:73:0;;16215:2:1;20249:73:0;;;16197:21:1;16254:2;16234:18;;;16227:30;16293:31;16273:18;;;16266:59;16342:18;;20249:73:0;16013:353:1;20249:73:0;20336:12;20354:9;-1:-1:-1;;;;;20354:14:0;20376:6;20354:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20335:52;;;20406:7;20398:78;;;;-1:-1:-1;;;20398:78:0;;16783:2:1;20398:78:0;;;16765:21:1;16822:2;16802:18;;;16795:30;16861:34;16841:18;;;16834:62;16932:28;16912:18;;;16905:56;16978:19;;20398:78:0;16581:422:1;20398:78:0;20238:246;20169:315;;:::o;28360:1100::-;-1:-1:-1;;;;;28493:27:0;;28454:16;28493:27;;;:19;:27;;;;;;;;;:75;;-1:-1:-1;;;;;;28538:30:0;;;;;;:19;:30;;;;;;;;28493:75;:198;;;-1:-1:-1;28587:32:0;;-1:-1:-1;;;28587:32:0;;;;:73;;;;-1:-1:-1;28647:13:0;;-1:-1:-1;;;;;28637:23:0;;;28647:13;;28637:23;;28587:73;:103;;;;-1:-1:-1;28677:13:0;;-1:-1:-1;;;;;28664:26:0;;;28677:13;;28664:26;;28587:103;28489:288;;;28718:14;:12;:14::i;:::-;-1:-1:-1;28761:4:0;28489:288;-1:-1:-1;;;;;28791:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28815:22:0;;;;;;:11;:22;;;;;;;;28814:23;28791:46;28787:597;;;28854:48;28876:6;28884:9;28895:6;28854:21;:48::i;:::-;28787:597;;;-1:-1:-1;;;;;28925:19:0;;;;;;:11;:19;;;;;;;;28924:20;:46;;;;-1:-1:-1;;;;;;28948:22:0;;;;;;:11;:22;;;;;;;;28924:46;28920:464;;;28987:46;29007:6;29015:9;29026:6;28987:19;:46::i;28920:464::-;-1:-1:-1;;;;;29056:19:0;;;;;;:11;:19;;;;;;;;29055:20;:47;;;;-1:-1:-1;;;;;;29080:22:0;;;;;;:11;:22;;;;;;;;29079:23;29055:47;29051:333;;;29119:44;29137:6;29145:9;29156:6;29119:17;:44::i;29051:333::-;-1:-1:-1;;;;;29185:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29208:22:0;;;;;;:11;:22;;;;;;;;29185:45;29181:203;;;29247:48;29269:6;29277:9;29288:6;29247:21;:48::i;29181:203::-;29328:44;29346:6;29354:9;29365:6;29328:17;:44::i;:::-;29398:11;29394:59;;;29426:15;25207;;25198:6;:24;25246:19;;25233:10;:32;25291:21;;25276:12;:36;25333:16;;25323:7;:26;25154:203;22206:552;22303:7;;22339;;22256;;;;;22363:283;22387:9;:16;22383:20;;22363:283;;;22453:7;22429;:21;22437:9;22447:1;22437:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22437:12:0;22429:21;;;;;;;;;;;;;:31;;:66;;;22488:7;22464;:21;22472:9;22482:1;22472:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22472:12:0;22464:21;;;;;;;;;;;;;:31;22429:66;22425:97;;;22505:7;;22514;;22497:25;;;;;;;22206:552;;:::o;22425:97::-;22557:7;:21;22565:9;22575:1;22565:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22565:12:0;22557:21;;;;;;;;;;;;;22547:31;;:7;:31;:::i;:::-;22537:41;;22613:7;:21;22621:9;22631:1;22621:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22621:12:0;22613:21;;;;;;;;;;;;;22603:31;;:7;:31;:::i;:::-;22593:41;-1:-1:-1;22405:3:0;;;;:::i;:::-;;;;22363:283;;;;22680:7;;22670;;:17;;;;:::i;:::-;22660:7;:27;22656:58;;;22697:7;;22706;;22689:25;;;;;;22206:552;;:::o;22656:58::-;22733:7;;22742;;-1:-1:-1;22206:552:0;-1:-1:-1;22206:552:0:o;21115:412::-;21175:7;21184;21193;21202;21222:12;21237:24;21253:7;21237:15;:24::i;:::-;21222:39;;21272:16;21291:28;21311:7;21291:19;:28::i;:::-;21272:47;;21330:18;21351:30;21373:7;21351:21;:30::i;:::-;21330:51;-1:-1:-1;21392:23:0;21330:51;21435:8;21418:14;21428:4;21418:7;:14;:::i;:::-;:25;;;;:::i;:::-;:38;;;;:::i;:::-;21392:64;21492:4;;-1:-1:-1;21498:8:0;;-1:-1:-1;21498:8:0;-1:-1:-1;21115:412:0;;-1:-1:-1;;;21115:412:0:o;21535:495::-;21668:7;;;;21724:21;21734:11;21724:7;:21;:::i;:::-;21706:39;-1:-1:-1;21756:12:0;21771:18;21778:11;21771:4;:18;:::i;:::-;21756:33;-1:-1:-1;21800:16:0;21819:22;21830:11;21819:8;:22;:::i;:::-;21800:41;-1:-1:-1;21852:18:0;21873:24;21886:11;21873:10;:24;:::i;:::-;21852:45;-1:-1:-1;21908:23:0;21852:45;21951:8;21934:14;21944:4;21934:7;:14;:::i;:::-;:25;;;;:::i;:::-;:38;;;;:::i;:::-;21991:7;;;;-1:-1:-1;22017:4:0;;-1:-1:-1;21535:495:0;;-1:-1:-1;;;;;;;;;21535:495:0:o;24736:406::-;24782:6;;:11;:30;;;;-1:-1:-1;24797:10:0;;:15;24782:30;:51;;;;-1:-1:-1;24816:12:0;;:17;24782:51;:67;;;;-1:-1:-1;24837:7:0;;:12;24782:67;24779:79;;;24736:406::o;24779:79::-;24896:6;;;24878:15;:24;24935:10;;;24913:19;:32;24980:12;;;24956:21;:36;25022:7;;;25003:16;:26;-1:-1:-1;25050:10:0;;;;25071:14;;;;25096:16;;;25123:11;24736:406::o;30875:716::-;30978:15;30995:23;31020:12;31034:23;31059:12;31073:16;31091:18;31113:19;31124:7;31113:10;:19::i;:::-;30977:155;;;;;;;;;;;;;;31180:60;31190:6;31198:15;31215;31232:7;31180:9;:60::i;:::-;-1:-1:-1;;;;;31269:15:0;;;;;;:7;:15;;;;;;31143:97;;-1:-1:-1;31143:97:0;;-1:-1:-1;31269:25:0;;31287:7;;31269:25;:::i;:::-;-1:-1:-1;;;;;31251:15:0;;;;;;:7;:15;;;;;;;;:43;;;;31323:7;:15;;;;:25;;31341:7;;31323:25;:::i;:::-;-1:-1:-1;;;;;31305:15:0;;;;;;;:7;:15;;;;;;:43;;;;31380:18;;;;;;;:36;;31401:15;;31380:36;:::i;:::-;-1:-1:-1;;;;;31359:18:0;;;;;;:7;:18;;;;;:57;31428:26;31443:10;31428:14;:26::i;:::-;31467:22;31480:8;31467:12;:22::i;:::-;31500:23;31512:4;31518;31500:11;:23::i;:::-;31556:9;-1:-1:-1;;;;;31539:44:0;31548:6;-1:-1:-1;;;;;31539:44:0;;31567:15;31539:44;;;;1546:25:1;;1534:2;1519:18;;1400:177;31539:44:0;;;;;;;;30966:625;;;;;;;30875:716;;;:::o;30131:736::-;30232:15;30249:23;30274:12;30288:23;30313:12;30327:16;30345:18;30367:19;30378:7;30367:10;:19::i;:::-;30231:155;;;;;;;;;;;;;;30434:60;30444:6;30452:15;30469;30486:7;30434:9;:60::i;:::-;-1:-1:-1;;;;;30523:15:0;;;;;;:7;:15;;;;;;30397:97;;-1:-1:-1;30397:97:0;;-1:-1:-1;30523:25:0;;30541:7;;30523:25;:::i;:::-;-1:-1:-1;;;;;30505:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;30580:18;;;;;:7;:18;;;;;:36;;30601:15;;30580:36;:::i;:::-;-1:-1:-1;;;;;30559:18:0;;;;;;:7;:18;;;;;;;;:57;;;;30648:7;:18;;;;:36;;30669:15;;30648:36;:::i;29468:655::-;29567:15;29584:23;29609:12;29623:23;29648:12;29662:16;29680:18;29702:19;29713:7;29702:10;:19::i;:::-;29566:155;;;;;;;;;;;;;;29769:60;29779:6;29787:15;29804;29821:7;29769:9;:60::i;:::-;-1:-1:-1;;;;;29858:15:0;;;;;;:7;:15;;;;;;29732:97;;-1:-1:-1;29732:97:0;;-1:-1:-1;29858:25:0;;29876:7;;29858:25;:::i;31599:789::-;31702:15;31719:23;31744:12;31758:23;31783:12;31797:16;31815:18;31837:19;31848:7;31837:10;:19::i;:::-;31701:155;;;;;;;;;;;;;;31904:60;31914:6;31922:15;31939;31956:7;31904:9;:60::i;:::-;-1:-1:-1;;;;;31993:15:0;;;;;;:7;:15;;;;;;31867:97;;-1:-1:-1;31867:97:0;;-1:-1:-1;31993:25:0;;32011:7;;31993:25;:::i;:::-;-1:-1:-1;;;;;31975:15:0;;;;;;:7;:15;;;;;;;;:43;;;;32047:7;:15;;;;:25;;32065:7;;32047:25;:::i;24189:121::-;24253:7;24299:3;24290:6;;24280:7;:16;;;;:::i;:::-;:22;;;;:::i;24318:129::-;24386:7;24436:3;24423:10;;24413:7;:20;;;;:::i;24459:133::-;24529:7;24581:3;24566:12;;24556:7;:22;;;;:::i;23588:589::-;23707:7;23716;23739;;23748:1;23739:10;23736:61;;-1:-1:-1;23761:15:0;;-1:-1:-1;23778:15:0;23754:40;;23736:61;23845:7;;23811:13;;23828;23838:3;23828:7;:13;:::i;:::-;23827:25;;;;:::i;:::-;23811:41;;23867:13;23891:10;:8;:10::i;:::-;23883:18;;:5;:18;:::i;:::-;23867:34;-1:-1:-1;23934:23:0;23867:34;23934:15;:23;:::i;:::-;23916:41;-1:-1:-1;23990:23:0;24008:5;23990:15;:23;:::i;:::-;24052:4;;-1:-1:-1;;;;;24052:4:0;24044:13;;;;:7;:13;;;;;;23972:41;;-1:-1:-1;24044:21:0;;24060:5;;24044:21;:::i;:::-;24036:4;;;-1:-1:-1;;;;;24036:4:0;;;24028:13;;;;:7;:13;;;;;;;;;:37;;;;24102:4;;24085:29;;1546:25:1;;;24102:4:0;;;;24085:29;;;;;;1519:18:1;24085:29:0;;;;;;;24136:15;24153;24129:40;;;;;;23588:589;;;;;;;;:::o;23172:408::-;23239:14;;23235:338;;23270:19;23293:10;:8;:10::i;:::-;23270:33;-1:-1:-1;23318:18:0;23339:24;23270:33;23339:10;:24;:::i;:::-;23419:4;23403:22;;;;:7;:22;;;;;;23318:45;;-1:-1:-1;23403:35:0;;23318:45;;23403:35;:::i;:::-;23394:4;23378:22;;;;:7;:22;;;;;;;;:60;;;;23456:11;:26;;;;;;23453:108;;;23542:4;23526:22;;;;:7;:22;;;;;;:35;;23551:10;;23526:35;:::i;:::-;23517:4;23501:22;;;;:7;:22;;;;;:60;23255:318;;23172:408;:::o;20492:141::-;20580:4;20570:7;;:14;;;;:::i;:::-;20560:7;:24;20608:10;;:17;;20621:4;;20608:17;:::i;:::-;20595:10;:30;-1:-1:-1;;20492:141:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:315;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;2025:456::-;2102:6;2110;2118;2171:2;2159:9;2150:7;2146:23;2142:32;2139:52;;;2187:1;2184;2177:12;2139:52;2226:9;2213:23;2245:31;2270:5;2245:31;:::i;:::-;2295:5;-1:-1:-1;2352:2:1;2337:18;;2324:32;2365:33;2324:32;2365:33;:::i;:::-;2025:456;;2417:7;;-1:-1:-1;;;2471:2:1;2456:18;;;;2443:32;;2025:456::o;2675:247::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:31;2886:5;2861:31;:::i;2927:118::-;3013:5;3006:13;2999:21;2992:5;2989:32;2979:60;;3035:1;3032;3025:12;3050:309;3115:6;3123;3176:2;3164:9;3155:7;3151:23;3147:32;3144:52;;;3192:1;3189;3182:12;3144:52;3228:9;3215:23;3205:33;;3288:2;3277:9;3273:18;3260:32;3301:28;3323:5;3301:28;:::i;:::-;3348:5;3338:15;;;3050:309;;;;;:::o;3364:241::-;3420:6;3473:2;3461:9;3452:7;3448:23;3444:32;3441:52;;;3489:1;3486;3479:12;3441:52;3528:9;3515:23;3547:28;3569:5;3547:28;:::i;3610:382::-;3675:6;3683;3736:2;3724:9;3715:7;3711:23;3707:32;3704:52;;;3752:1;3749;3742:12;3704:52;3791:9;3778:23;3810:31;3835:5;3810:31;:::i;:::-;3860:5;-1:-1:-1;3917:2:1;3902:18;;3889:32;3930:30;3889:32;3930:30;:::i;3997:388::-;4065:6;4073;4126:2;4114:9;4105:7;4101:23;4097:32;4094:52;;;4142:1;4139;4132:12;4094:52;4181:9;4168:23;4200:31;4225:5;4200:31;:::i;:::-;4250:5;-1:-1:-1;4307:2:1;4292:18;;4279:32;4320:33;4279:32;4320:33;:::i;4390:356::-;4592:2;4574:21;;;4611:18;;;4604:30;4670:34;4665:2;4650:18;;4643:62;4737:2;4722:18;;4390:356::o;4751:127::-;4812:10;4807:3;4803:20;4800:1;4793:31;4843:4;4840:1;4833:15;4867:4;4864:1;4857:15;4883:125;4948:9;;;4969:10;;;4966:36;;;4982:18;;:::i;5374:380::-;5453:1;5449:12;;;;5496;;;5517:61;;5571:4;5563:6;5559:17;5549:27;;5517:61;5624:2;5616:6;5613:14;5593:18;5590:38;5587:161;;5670:10;5665:3;5661:20;5658:1;5651:31;5705:4;5702:1;5695:15;5733:4;5730:1;5723:15;5587:161;;5374:380;;;:::o;5759:128::-;5826:9;;;5847:11;;;5844:37;;;5861:18;;:::i;6303:217::-;6343:1;6369;6359:132;;6413:10;6408:3;6404:20;6401:1;6394:31;6448:4;6445:1;6438:15;6476:4;6473:1;6466:15;6359:132;-1:-1:-1;6505:9:1;;6303:217::o;6881:127::-;6942:10;6937:3;6933:20;6930:1;6923:31;6973:4;6970:1;6963:15;6997:4;6994:1;6987:15;7013:127;7074:10;7069:3;7065:20;7062:1;7055:31;7105:4;7102:1;7095:15;7129:4;7126:1;7119:15;7145:135;7184:3;7205:17;;;7202:43;;7225:18;;:::i;:::-;-1:-1:-1;7272:1:1;7261:13;;7145:135::o;12125:184::-;12195:6;12248:2;12236:9;12227:7;12223:23;12219:32;12216:52;;;12264:1;12261;12254:12;12216:52;-1:-1:-1;12287:16:1;;12125:184;-1:-1:-1;12125:184:1:o;12593:245::-;12660:6;12713:2;12701:9;12692:7;12688:23;12684:32;12681:52;;;12729:1;12726;12719:12;12681:52;12761:9;12755:16;12780:28;12802:5;12780:28;:::i;14467:168::-;14540:9;;;14571;;14588:15;;;14582:22;;14568:37;14558:71;;14609:18;;:::i;14772:251::-;14842:6;14895:2;14883:9;14874:7;14870:23;14866:32;14863:52;;;14911:1;14908;14901:12;14863:52;14943:9;14937:16;14962:31;14987:5;14962:31;:::i;15028:980::-;15290:4;15338:3;15327:9;15323:19;15369:6;15358:9;15351:25;15395:2;15433:6;15428:2;15417:9;15413:18;15406:34;15476:3;15471:2;15460:9;15456:18;15449:31;15500:6;15535;15529:13;15566:6;15558;15551:22;15604:3;15593:9;15589:19;15582:26;;15643:2;15635:6;15631:15;15617:29;;15664:1;15674:195;15688:6;15685:1;15682:13;15674:195;;;15753:13;;-1:-1:-1;;;;;15749:39:1;15737:52;;15844:15;;;;15809:12;;;;15785:1;15703:9;15674:195;;;-1:-1:-1;;;;;;;15925:32:1;;;;15920:2;15905:18;;15898:60;-1:-1:-1;;;15989:3:1;15974:19;15967:35;15886:3;15028:980;-1:-1:-1;;;15028:980:1:o

Swarm Source

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