ETH Price: $3,667.64 (+2.48%)

Token

WICK FINANCE (WICK)
 

Overview

Max Total Supply

898,169,664,360.744005352234992332 WICK

Holders

393 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
282,002,641.243950244818185114 WICK

Value
$0.00
0xf9df78d070f24c644d35a56a8f2971b590084e9b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A social project supporting and financing the development of products and services utilizing dog-related coins and tokens such as $DOGE, $KISHU, $SHIB and $HOKK.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WICKFINANCE

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-20
*/

// SPDX-License-Identifier: UNLICENSED
/*

WICK FINANCE

*/


pragma solidity ^0.6.12;

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

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


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    

}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }


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

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

        return c;
    }

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

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

library Address {

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

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

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


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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () internal {
        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;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    //Added function
    // 1 minute = 60
    // 1h 3600
    // 24h 86400
    // 1w 604800
    
    function getTime() public view returns (uint256) {
        return now;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 WICKFINANCE is Context, IERC20, Ownable {
    using SafeMath for uint256;
    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 _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;
    uint256 private _tInnovationTotal;

    string private _name = "WICK FINANCE";
    string private _symbol = "WICK";
    uint8 private _decimals = 18;


    uint256 public _taxFee = 5;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _burnFee = 5;
    uint256 private _previousBurnFee = _burnFee;
    
    
    uint256 public _innovationFee = 5;
    uint256 private _previousInnovationFee = _innovationFee;
    
    uint256 public _maxTxAmount = 10000000000 * 10**18;
    uint256 private minimumTokensBeforeSwap = 10000000000 * 10**18; 
    
    address payable public innovationAddress = 0xd6cE27BFd2b5981d379C6e86086c6D53cBd5B41E; // Innovation wallet
    
        
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _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()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }
    
    function totalInnovationETH() public view returns (uint256) {
        // ETH has  18 decimals!
        return _tInnovationTotal;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    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].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(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.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        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 excluded");
        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;
            }
        }
    }

    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(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");


        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        if (
            overMinimumTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = minimumTokensBeforeSwap;
            swapAndLiquify(contractTokenBalance);
        }
        

        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        swapTokensForEth(contractTokenBalance); 
        _tInnovationTotal = _tInnovationTotal.add(address(this).balance);
        TransferInnovationETH(innovationAddress, address(this).balance);
    }

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

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

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


    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        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(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 rBurn, uint256 tFee, uint256 tBurn) private {
        _rTotal = _rTotal.sub(rFee).sub(rBurn);
        _tFeeTotal = _tFeeTotal.add(tFee);
        _tBurnTotal = _tBurnTotal.add(tBurn);
        _tTotal = _tTotal.sub(tBurn);
    }

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn).sub(tLiquidity);
        return (tTransferAmount, tFee, tBurn, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_innovationFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _burnFee == 0 && _innovationFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousBurnFee = _burnFee;
        _previousInnovationFee = _innovationFee;
        
        _taxFee = 0;
        _burnFee = 0;
        _innovationFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _burnFee = _previousBurnFee;
        _innovationFee = _previousInnovationFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setBurnFeePercent(uint256 burnFee) external onlyOwner() {
        _burnFee = burnFee;
    }
    
    function setInnovationFeePercent(uint256 InnovationFee) external onlyOwner() {
        _innovationFee = InnovationFee;
    }
    
    function setMaxTxPercent(uint256 maxTxPercent, uint256 maxTxDecimals) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**(uint256(maxTxDecimals) + 2)
        );
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    
    function TransferInnovationETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_innovationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":[],"name":"innovationAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"InnovationFee","type":"uint256"}],"name":"setInnovationFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"},{"internalType":"uint256","name":"maxTxDecimals","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","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":"totalInnovationETH","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":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6c0c9f2c9cd04674edea400000006009556c0815c6278fccd683bfbfffffff19600a55610100604052600c60c08190526b5749434b2046494e414e434560a01b60e09081526200005391600e9190620003eb565b50604080518082019091526004808252635749434b60e01b60209092019182526200008191600f91620003eb565b506010805460ff1916601290811790915560056011819055908190556013819055601481905560158190556016556b204fce5e3e2502611000000060178190556018556019805460ff60a81b196001600160a01b031990911673d6ce27bfd2b5981d379c6e86086c6d53cbd5b41e1716600160a81b1790553480156200010657600080fd5b50600062000113620003d8565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a54600360006200016e620003d8565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e557600080fd5b505afa158015620001fa573d6000803e3d6000fd5b505050506040513d60208110156200021157600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200026257600080fd5b505afa15801562000277573d6000803e3d6000fd5b505050506040513d60208110156200028e57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002e157600080fd5b505af1158015620002f6573d6000803e3d6000fd5b505050506040513d60208110156200030d57600080fd5b50516001600160601b0319606091821b811660a0529082901b166080526001600660006200033a620003dc565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600690925290208054909116600117905562000384620003d8565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a35062000487565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200042e57805160ff19168380011785556200045e565b828001600101855582156200045e579182015b828111156200045e57825182559160200191906001019062000441565b506200046c92915062000470565b5090565b5b808211156200046c576000815560010162000471565b60805160601c60a05160601c612c77620004c5600039806110935280611bcf525080610ad15280612373528061242b52806124525250612c776000f3fe6080604052600436106102765760003560e01c806352390c021161014f578063a457c2d7116100c1578063dd4670641161007a578063dd46706414610899578063dd62ed3e146108c3578063e7d67bc1146108fe578063ea2f0b3714610928578063f0f165af1461095b578063f2fde38b146109855761027d565b8063a457c2d7146107a7578063a69df4b5146107e0578063a9059cbb146107f5578063c0b0fda21461082e578063c49b9a8014610843578063cea269581461086f5761027d565b8063715018a611610113578063715018a61461070b5780637d1db4a51461072057806388f82020146107355780638da5cb5b1461076857806395d89b411461077d578063a073d37f146107925761027d565b806352390c02146106485780635342acb41461067b578063557ed1ba146106ae578063602bc62b146106c357806370a08231146106d85761027d565b80633685d419116101e85780633f3cf56c116101ac5780633f3cf56c146105745780633ffe0a78146105a4578063437823ec146105b95780634549b039146105ec57806349bd5a5e1461061e5780634a74bb02146106335761027d565b80633685d419146104b457806339509351146104e75780633b124fe7146105205780633bd5d173146105355780633c9f861d1461055f5761027d565b806318160ddd1161023a57806318160ddd146103dd57806323b872dd146103f25780632ca29c34146104355780632d8381191461044a578063311847f814610474578063313ce567146104895761027d565b8063061c82d01461028257806306fdde03146102ae578063095ea7b31461033857806313114a9d146103855780631694505e146103ac5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102ac600480360360208110156102a557600080fd5b50356109b8565b005b3480156102ba57600080fd5b506102c3610a15565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102fd5781810151838201526020016102e5565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103716004803603604081101561035b57600080fd5b506001600160a01b038135169060200135610aab565b604080519115158252519081900360200190f35b34801561039157600080fd5b5061039a610ac9565b60408051918252519081900360200190f35b3480156103b857600080fd5b506103c1610acf565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b5061039a610af3565b3480156103fe57600080fd5b506103716004803603606081101561041557600080fd5b506001600160a01b03813581169160208101359091169060400135610af9565b34801561044157600080fd5b5061039a610b80565b34801561045657600080fd5b5061039a6004803603602081101561046d57600080fd5b5035610b86565b34801561048057600080fd5b506103c1610be8565b34801561049557600080fd5b5061049e610bf7565b6040805160ff9092168252519081900360200190f35b3480156104c057600080fd5b506102ac600480360360208110156104d757600080fd5b50356001600160a01b0316610c00565b3480156104f357600080fd5b506103716004803603604081101561050a57600080fd5b506001600160a01b038135169060200135610dc1565b34801561052c57600080fd5b5061039a610e0f565b34801561054157600080fd5b506102ac6004803603602081101561055857600080fd5b5035610e15565b34801561056b57600080fd5b5061039a610ef1565b34801561058057600080fd5b506102ac6004803603604081101561059757600080fd5b5080359060200135610ef7565b3480156105b057600080fd5b5061039a610f7b565b3480156105c557600080fd5b506102ac600480360360208110156105dc57600080fd5b50356001600160a01b0316610f81565b3480156105f857600080fd5b5061039a6004803603604081101561060f57600080fd5b50803590602001351515610ffd565b34801561062a57600080fd5b506103c1611091565b34801561063f57600080fd5b506103716110b5565b34801561065457600080fd5b506102ac6004803603602081101561066b57600080fd5b50356001600160a01b03166110c5565b34801561068757600080fd5b506103716004803603602081101561069e57600080fd5b50356001600160a01b031661124b565b3480156106ba57600080fd5b5061039a611269565b3480156106cf57600080fd5b5061039a61126d565b3480156106e457600080fd5b5061039a600480360360208110156106fb57600080fd5b50356001600160a01b0316611273565b34801561071757600080fd5b506102ac6112d5565b34801561072c57600080fd5b5061039a611365565b34801561074157600080fd5b506103716004803603602081101561075857600080fd5b50356001600160a01b031661136b565b34801561077457600080fd5b506103c1611389565b34801561078957600080fd5b506102c3611398565b34801561079e57600080fd5b5061039a6113f9565b3480156107b357600080fd5b50610371600480360360408110156107ca57600080fd5b506001600160a01b0381351690602001356113ff565b3480156107ec57600080fd5b506102ac611467565b34801561080157600080fd5b506103716004803603604081101561081857600080fd5b506001600160a01b038135169060200135611555565b34801561083a57600080fd5b5061039a611569565b34801561084f57600080fd5b506102ac6004803603602081101561086657600080fd5b5035151561156f565b34801561087b57600080fd5b506102ac6004803603602081101561089257600080fd5b503561161a565b3480156108a557600080fd5b506102ac600480360360208110156108bc57600080fd5b5035611677565b3480156108cf57600080fd5b5061039a600480360360408110156108e657600080fd5b506001600160a01b0381358116916020013516611715565b34801561090a57600080fd5b506102ac6004803603602081101561092157600080fd5b5035611740565b34801561093457600080fd5b506102ac6004803603602081101561094b57600080fd5b50356001600160a01b031661179d565b34801561096757600080fd5b506102ac6004803603602081101561097e57600080fd5b5035611816565b34801561099157600080fd5b506102ac600480360360208110156109a857600080fd5b50356001600160a01b0316611873565b6109c0611959565b6000546001600160a01b03908116911614610a10576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601155565b600e8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa15780601f10610a7657610100808354040283529160200191610aa1565b820191906000526020600020905b815481529060010190602001808311610a8457829003601f168201915b5050505050905090565b6000610abf610ab8611959565b848461195d565b5060015b92915050565b600b5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095490565b6000610b06848484611a49565b610b7684610b12611959565b610b7185604051806060016040528060288152602001612af4602891396001600160a01b038a16600090815260056020526040812090610b50611959565b6001600160a01b031681526020810191909152604001600020549190611c8b565b61195d565b5060019392505050565b600d5490565b6000600a54821115610bc95760405162461bcd60e51b815260040180806020018281038252602a815260200180612a39602a913960400191505060405180910390fd5b6000610bd3611d22565b9050610bdf8382611d45565b9150505b919050565b6019546001600160a01b031681565b60105460ff1690565b610c08611959565b6000546001600160a01b03908116911614610c58576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610cc5576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610dbd57816001600160a01b031660088281548110610ce957fe5b6000918252602090912001546001600160a01b03161415610db557600880546000198101908110610d1657fe5b600091825260209091200154600880546001600160a01b039092169183908110610d3c57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d8e57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610dbd565b600101610cc8565b5050565b6000610abf610dce611959565b84610b718560056000610ddf611959565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611d8e565b60115481565b6000610e1f611959565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e7a5760405162461bcd60e51b815260040180806020018281038252602c815260200180612bce602c913960400191505060405180910390fd5b6000610e8583611de8565b5050506001600160a01b038616600090815260036020526040902054939450610eb393925084915050611e43565b6001600160a01b038316600090815260036020526040902055600a54610ed99082611e43565b600a55600b54610ee99084611d8e565b600b55505050565b600c5490565b610eff611959565b6000546001600160a01b03908116911614610f4f576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b610f7481600201600a0a610f6e84600954611e8590919063ffffffff16565b90611d45565b6017555050565b60155481565b610f89611959565b6000546001600160a01b03908116911614610fd9576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600954831115611056576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161107657600061106684611de8565b50949650610ac395505050505050565b600061108184611de8565b50939650610ac395505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601954600160a81b900460ff1681565b6110cd611959565b6000546001600160a01b0390811691161461111d576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff161561118b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156111e5576001600160a01b0381166000908152600360205260409020546111cb90610b86565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b4290565b60025490565b6001600160a01b03811660009081526007602052604081205460ff16156112b357506001600160a01b038116600090815260046020526040902054610be3565b6001600160a01b038216600090815260036020526040902054610ac390610b86565b6112dd611959565b6000546001600160a01b0390811691161461132d576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020612b3c833981519152908390a3600080546001600160a01b0319169055565b60175481565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa15780601f10610a7657610100808354040283529160200191610aa1565b60185490565b6000610abf61140c611959565b84610b7185604051806060016040528060258152602001612c1d6025913960056000611436611959565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611c8b565b6001546001600160a01b031633146114b05760405162461bcd60e51b8152600401808060200182810382526023815260200180612bfa6023913960400191505060405180910390fd5b6002544211611506576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020612b3c83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610abf611562611959565b8484611a49565b60135481565b611577611959565b6000546001600160a01b039081169116146115c7576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b60198054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611622611959565b6000546001600160a01b03908116911614611672576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601355565b61167f611959565b6000546001600160a01b039081169116146116cf576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020612b3c833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611748611959565b6000546001600160a01b03908116911614611798576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601555565b6117a5611959565b6000546001600160a01b039081169116146117f5576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b61181e611959565b6000546001600160a01b0390811691161461186e576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601855565b61187b611959565b6000546001600160a01b039081169116146118cb576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b0381166119105760405162461bcd60e51b8152600401808060200182810382526026815260200180612a636026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020612b3c83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166119a25760405162461bcd60e51b8152600401808060200182810382526024815260200180612baa6024913960400191505060405180910390fd5b6001600160a01b0382166119e75760405162461bcd60e51b8152600401808060200182810382526022815260200180612a896022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611a8e5760405162461bcd60e51b8152600401808060200182810382526025815260200180612b856025913960400191505060405180910390fd5b6001600160a01b038216611ad35760405162461bcd60e51b8152600401808060200182810382526023815260200180612a166023913960400191505060405180910390fd5b60008111611b125760405162461bcd60e51b8152600401808060200182810382526029815260200180612b5c6029913960400191505060405180910390fd5b611b1a611389565b6001600160a01b0316836001600160a01b031614158015611b545750611b3e611389565b6001600160a01b0316826001600160a01b031614155b15611b9a57601754811115611b9a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612aab6028913960400191505060405180910390fd5b6000611ba530611273565b60185490915081108015908190611bc65750601954600160a01b900460ff16155b8015611c0457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611c195750601954600160a81b900460ff165b15611c2c576018549150611c2c82611ede565b6001600160a01b03851660009081526006602052604090205460019060ff1680611c6e57506001600160a01b03851660009081526006602052604090205460ff165b15611c77575060005b611c8386868684611f30565b505050505050565b60008184841115611d1a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cdf578181015183820152602001611cc7565b50505050905090810190601f168015611d0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611d2f6120a4565b9092509050611d3e8282611d45565b9250505090565b6000611d8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612207565b9392505050565b600082820183811015611d87576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000806000806000806000806000611e028c61226c565b93509350935093506000806000611e238f878787611e1e611d22565b6122c1565b919f509d509b509599509397509195509350505050919395979092949650565b6000611d8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c8b565b600082611e9457506000610ac3565b82820282848281611ea157fe5b0414611d875760405162461bcd60e51b8152600401808060200182810382526021815260200180612ad36021913960400191505060405180910390fd5b6019805460ff60a01b1916600160a01b179055611efa81612323565b600d54611f079047611d8e565b600d55601954611f20906001600160a01b031647612532565b506019805460ff60a01b19169055565b80611f3d57611f3d61256d565b6001600160a01b03841660009081526007602052604090205460ff168015611f7e57506001600160a01b03831660009081526007602052604090205460ff16155b15611f9357611f8e8484846125b6565b612091565b6001600160a01b03841660009081526007602052604090205460ff16158015611fd457506001600160a01b03831660009081526007602052604090205460ff165b15611fe457611f8e848484612704565b6001600160a01b03841660009081526007602052604090205460ff1615801561202657506001600160a01b03831660009081526007602052604090205460ff16155b1561203657611f8e8484846127d2565b6001600160a01b03841660009081526007602052604090205460ff16801561207657506001600160a01b03831660009081526007602052604090205460ff165b1561208657611f8e84848461283b565b6120918484846127d2565b8061209e5761209e6128d3565b50505050565b600a546009546000918291825b6008548110156121d5578260036000600884815481106120cd57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612132575081600460006008848154811061210b57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214957600a5460095494509450505050612203565b612189600360006008848154811061215d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e43565b92506121cb600460006008848154811061219f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e43565b91506001016120b1565b50600954600a546121e591611d45565b8210156121fd57600a54600954935093505050612203565b90925090505b9091565b600081836122565760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cdf578181015183820152602001611cc7565b50600083858161226257fe5b0495945050505050565b600080600080600061227d866128e7565b9050600061228a87612903565b905060006122978861291f565b905060006122b1826122ab85818d89611e43565b90611e43565b9993985091965094509092505050565b60008080806122d08986611e85565b905060006122de8987611e85565b905060006122ec8988611e85565b905060006122fa8989611e85565b9050600061230e826122ab85818989611e43565b949d949c50929a509298505050505050505050565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061235157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ca57600080fd5b505afa1580156123de573d6000803e3d6000fd5b505050506040513d60208110156123f457600080fd5b505181518290600190811061240557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612450307f00000000000000000000000000000000000000000000000000000000000000008461195d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156124f55781810151838201526020016124dd565b505050509050019650505050505050600060405180830381600087803b15801561251e57600080fd5b505af1158015611c83573d6000803e3d6000fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612568573d6000803e3d6000fd5b505050565b60115415801561257d5750601354155b80156125895750601554155b15612593576125b4565b60118054601255601380546014556015805460165560009283905590829055555b565b60006125c0611d22565b905060008060008060008060006125d689611de8565b965096509650965096509650965060006125f98984611e8590919063ffffffff16565b6001600160a01b038d1660009081526004602052604090205490915061261f908b611e43565b6001600160a01b038d1660009081526004602090815260408083209390935560039052205461264e9089611e43565b6001600160a01b03808e1660009081526003602052604080822093909355908d168152205461267d9088611d8e565b6001600160a01b038c1660009081526003602052604090205561269f8261293b565b6126ab868286866129c3565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3505050505050505050505050565b600061270e611d22565b9050600080600080600080600061272489611de8565b965096509650965096509650965060006127478984611e8590919063ffffffff16565b6001600160a01b038d1660009081526003602052604090205490915061276d9089611e43565b6001600160a01b03808e16600090815260036020908152604080832094909455918e168152600490915220546127a39086611d8e565b6001600160a01b038c1660009081526004602090815260408083209390935560039052205461267d9088611d8e565b60006127dc611d22565b905060008060008060008060006127f289611de8565b965096509650965096509650965060006128158984611e8590919063ffffffff16565b6001600160a01b038d1660009081526003602052604090205490915061264e9089611e43565b6000612845611d22565b9050600080600080600080600061285b89611de8565b9650965096509650965096509650600061287e8984611e8590919063ffffffff16565b6001600160a01b038d166000908152600460205260409020549091506128a4908b611e43565b6001600160a01b038d1660009081526004602090815260408083209390935560039052205461276d9089611e43565b601254601155601454601355601654601555565b6000610ac36064610f6e60115485611e8590919063ffffffff16565b6000610ac36064610f6e60135485611e8590919063ffffffff16565b6000610ac36064610f6e60155485611e8590919063ffffffff16565b6000612945611d22565b905060006129538383611e85565b306000908152600360205260409020549091506129709082611d8e565b3060009081526003602090815260408083209390935560079052205460ff161561256857306000908152600460205260409020546129ae9084611d8e565b30600090815260046020526040902055505050565b6129dc836122ab86600a54611e4390919063ffffffff16565b600a55600b546129ec9083611d8e565b600b55600c546129fc9082611d8e565b600c55600954612a0c9082611e43565b6009555050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220140591130f1795ac493127b67810bc72475b5e1c294ed6fe7178a505f3e0995f64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102765760003560e01c806352390c021161014f578063a457c2d7116100c1578063dd4670641161007a578063dd46706414610899578063dd62ed3e146108c3578063e7d67bc1146108fe578063ea2f0b3714610928578063f0f165af1461095b578063f2fde38b146109855761027d565b8063a457c2d7146107a7578063a69df4b5146107e0578063a9059cbb146107f5578063c0b0fda21461082e578063c49b9a8014610843578063cea269581461086f5761027d565b8063715018a611610113578063715018a61461070b5780637d1db4a51461072057806388f82020146107355780638da5cb5b1461076857806395d89b411461077d578063a073d37f146107925761027d565b806352390c02146106485780635342acb41461067b578063557ed1ba146106ae578063602bc62b146106c357806370a08231146106d85761027d565b80633685d419116101e85780633f3cf56c116101ac5780633f3cf56c146105745780633ffe0a78146105a4578063437823ec146105b95780634549b039146105ec57806349bd5a5e1461061e5780634a74bb02146106335761027d565b80633685d419146104b457806339509351146104e75780633b124fe7146105205780633bd5d173146105355780633c9f861d1461055f5761027d565b806318160ddd1161023a57806318160ddd146103dd57806323b872dd146103f25780632ca29c34146104355780632d8381191461044a578063311847f814610474578063313ce567146104895761027d565b8063061c82d01461028257806306fdde03146102ae578063095ea7b31461033857806313114a9d146103855780631694505e146103ac5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102ac600480360360208110156102a557600080fd5b50356109b8565b005b3480156102ba57600080fd5b506102c3610a15565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102fd5781810151838201526020016102e5565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103716004803603604081101561035b57600080fd5b506001600160a01b038135169060200135610aab565b604080519115158252519081900360200190f35b34801561039157600080fd5b5061039a610ac9565b60408051918252519081900360200190f35b3480156103b857600080fd5b506103c1610acf565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b5061039a610af3565b3480156103fe57600080fd5b506103716004803603606081101561041557600080fd5b506001600160a01b03813581169160208101359091169060400135610af9565b34801561044157600080fd5b5061039a610b80565b34801561045657600080fd5b5061039a6004803603602081101561046d57600080fd5b5035610b86565b34801561048057600080fd5b506103c1610be8565b34801561049557600080fd5b5061049e610bf7565b6040805160ff9092168252519081900360200190f35b3480156104c057600080fd5b506102ac600480360360208110156104d757600080fd5b50356001600160a01b0316610c00565b3480156104f357600080fd5b506103716004803603604081101561050a57600080fd5b506001600160a01b038135169060200135610dc1565b34801561052c57600080fd5b5061039a610e0f565b34801561054157600080fd5b506102ac6004803603602081101561055857600080fd5b5035610e15565b34801561056b57600080fd5b5061039a610ef1565b34801561058057600080fd5b506102ac6004803603604081101561059757600080fd5b5080359060200135610ef7565b3480156105b057600080fd5b5061039a610f7b565b3480156105c557600080fd5b506102ac600480360360208110156105dc57600080fd5b50356001600160a01b0316610f81565b3480156105f857600080fd5b5061039a6004803603604081101561060f57600080fd5b50803590602001351515610ffd565b34801561062a57600080fd5b506103c1611091565b34801561063f57600080fd5b506103716110b5565b34801561065457600080fd5b506102ac6004803603602081101561066b57600080fd5b50356001600160a01b03166110c5565b34801561068757600080fd5b506103716004803603602081101561069e57600080fd5b50356001600160a01b031661124b565b3480156106ba57600080fd5b5061039a611269565b3480156106cf57600080fd5b5061039a61126d565b3480156106e457600080fd5b5061039a600480360360208110156106fb57600080fd5b50356001600160a01b0316611273565b34801561071757600080fd5b506102ac6112d5565b34801561072c57600080fd5b5061039a611365565b34801561074157600080fd5b506103716004803603602081101561075857600080fd5b50356001600160a01b031661136b565b34801561077457600080fd5b506103c1611389565b34801561078957600080fd5b506102c3611398565b34801561079e57600080fd5b5061039a6113f9565b3480156107b357600080fd5b50610371600480360360408110156107ca57600080fd5b506001600160a01b0381351690602001356113ff565b3480156107ec57600080fd5b506102ac611467565b34801561080157600080fd5b506103716004803603604081101561081857600080fd5b506001600160a01b038135169060200135611555565b34801561083a57600080fd5b5061039a611569565b34801561084f57600080fd5b506102ac6004803603602081101561086657600080fd5b5035151561156f565b34801561087b57600080fd5b506102ac6004803603602081101561089257600080fd5b503561161a565b3480156108a557600080fd5b506102ac600480360360208110156108bc57600080fd5b5035611677565b3480156108cf57600080fd5b5061039a600480360360408110156108e657600080fd5b506001600160a01b0381358116916020013516611715565b34801561090a57600080fd5b506102ac6004803603602081101561092157600080fd5b5035611740565b34801561093457600080fd5b506102ac6004803603602081101561094b57600080fd5b50356001600160a01b031661179d565b34801561096757600080fd5b506102ac6004803603602081101561097e57600080fd5b5035611816565b34801561099157600080fd5b506102ac600480360360208110156109a857600080fd5b50356001600160a01b0316611873565b6109c0611959565b6000546001600160a01b03908116911614610a10576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601155565b600e8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa15780601f10610a7657610100808354040283529160200191610aa1565b820191906000526020600020905b815481529060010190602001808311610a8457829003601f168201915b5050505050905090565b6000610abf610ab8611959565b848461195d565b5060015b92915050565b600b5490565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095490565b6000610b06848484611a49565b610b7684610b12611959565b610b7185604051806060016040528060288152602001612af4602891396001600160a01b038a16600090815260056020526040812090610b50611959565b6001600160a01b031681526020810191909152604001600020549190611c8b565b61195d565b5060019392505050565b600d5490565b6000600a54821115610bc95760405162461bcd60e51b815260040180806020018281038252602a815260200180612a39602a913960400191505060405180910390fd5b6000610bd3611d22565b9050610bdf8382611d45565b9150505b919050565b6019546001600160a01b031681565b60105460ff1690565b610c08611959565b6000546001600160a01b03908116911614610c58576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610cc5576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610dbd57816001600160a01b031660088281548110610ce957fe5b6000918252602090912001546001600160a01b03161415610db557600880546000198101908110610d1657fe5b600091825260209091200154600880546001600160a01b039092169183908110610d3c57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d8e57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610dbd565b600101610cc8565b5050565b6000610abf610dce611959565b84610b718560056000610ddf611959565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611d8e565b60115481565b6000610e1f611959565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e7a5760405162461bcd60e51b815260040180806020018281038252602c815260200180612bce602c913960400191505060405180910390fd5b6000610e8583611de8565b5050506001600160a01b038616600090815260036020526040902054939450610eb393925084915050611e43565b6001600160a01b038316600090815260036020526040902055600a54610ed99082611e43565b600a55600b54610ee99084611d8e565b600b55505050565b600c5490565b610eff611959565b6000546001600160a01b03908116911614610f4f576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b610f7481600201600a0a610f6e84600954611e8590919063ffffffff16565b90611d45565b6017555050565b60155481565b610f89611959565b6000546001600160a01b03908116911614610fd9576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600954831115611056576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161107657600061106684611de8565b50949650610ac395505050505050565b600061108184611de8565b50939650610ac395505050505050565b7f000000000000000000000000ec7fe0d0fd0f597acfc2e8e4659684416587db3c81565b601954600160a81b900460ff1681565b6110cd611959565b6000546001600160a01b0390811691161461111d576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff161561118b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156111e5576001600160a01b0381166000908152600360205260409020546111cb90610b86565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b4290565b60025490565b6001600160a01b03811660009081526007602052604081205460ff16156112b357506001600160a01b038116600090815260046020526040902054610be3565b6001600160a01b038216600090815260036020526040902054610ac390610b86565b6112dd611959565b6000546001600160a01b0390811691161461132d576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020612b3c833981519152908390a3600080546001600160a01b0319169055565b60175481565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa15780601f10610a7657610100808354040283529160200191610aa1565b60185490565b6000610abf61140c611959565b84610b7185604051806060016040528060258152602001612c1d6025913960056000611436611959565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611c8b565b6001546001600160a01b031633146114b05760405162461bcd60e51b8152600401808060200182810382526023815260200180612bfa6023913960400191505060405180910390fd5b6002544211611506576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020612b3c83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610abf611562611959565b8484611a49565b60135481565b611577611959565b6000546001600160a01b039081169116146115c7576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b60198054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611622611959565b6000546001600160a01b03908116911614611672576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601355565b61167f611959565b6000546001600160a01b039081169116146116cf576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020612b3c833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611748611959565b6000546001600160a01b03908116911614611798576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601555565b6117a5611959565b6000546001600160a01b039081169116146117f5576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b61181e611959565b6000546001600160a01b0390811691161461186e576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601855565b61187b611959565b6000546001600160a01b039081169116146118cb576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b0381166119105760405162461bcd60e51b8152600401808060200182810382526026815260200180612a636026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020612b3c83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166119a25760405162461bcd60e51b8152600401808060200182810382526024815260200180612baa6024913960400191505060405180910390fd5b6001600160a01b0382166119e75760405162461bcd60e51b8152600401808060200182810382526022815260200180612a896022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611a8e5760405162461bcd60e51b8152600401808060200182810382526025815260200180612b856025913960400191505060405180910390fd5b6001600160a01b038216611ad35760405162461bcd60e51b8152600401808060200182810382526023815260200180612a166023913960400191505060405180910390fd5b60008111611b125760405162461bcd60e51b8152600401808060200182810382526029815260200180612b5c6029913960400191505060405180910390fd5b611b1a611389565b6001600160a01b0316836001600160a01b031614158015611b545750611b3e611389565b6001600160a01b0316826001600160a01b031614155b15611b9a57601754811115611b9a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612aab6028913960400191505060405180910390fd5b6000611ba530611273565b60185490915081108015908190611bc65750601954600160a01b900460ff16155b8015611c0457507f000000000000000000000000ec7fe0d0fd0f597acfc2e8e4659684416587db3c6001600160a01b0316856001600160a01b031614155b8015611c195750601954600160a81b900460ff165b15611c2c576018549150611c2c82611ede565b6001600160a01b03851660009081526006602052604090205460019060ff1680611c6e57506001600160a01b03851660009081526006602052604090205460ff165b15611c77575060005b611c8386868684611f30565b505050505050565b60008184841115611d1a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cdf578181015183820152602001611cc7565b50505050905090810190601f168015611d0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611d2f6120a4565b9092509050611d3e8282611d45565b9250505090565b6000611d8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612207565b9392505050565b600082820183811015611d87576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000806000806000806000806000611e028c61226c565b93509350935093506000806000611e238f878787611e1e611d22565b6122c1565b919f509d509b509599509397509195509350505050919395979092949650565b6000611d8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c8b565b600082611e9457506000610ac3565b82820282848281611ea157fe5b0414611d875760405162461bcd60e51b8152600401808060200182810382526021815260200180612ad36021913960400191505060405180910390fd5b6019805460ff60a01b1916600160a01b179055611efa81612323565b600d54611f079047611d8e565b600d55601954611f20906001600160a01b031647612532565b506019805460ff60a01b19169055565b80611f3d57611f3d61256d565b6001600160a01b03841660009081526007602052604090205460ff168015611f7e57506001600160a01b03831660009081526007602052604090205460ff16155b15611f9357611f8e8484846125b6565b612091565b6001600160a01b03841660009081526007602052604090205460ff16158015611fd457506001600160a01b03831660009081526007602052604090205460ff165b15611fe457611f8e848484612704565b6001600160a01b03841660009081526007602052604090205460ff1615801561202657506001600160a01b03831660009081526007602052604090205460ff16155b1561203657611f8e8484846127d2565b6001600160a01b03841660009081526007602052604090205460ff16801561207657506001600160a01b03831660009081526007602052604090205460ff165b1561208657611f8e84848461283b565b6120918484846127d2565b8061209e5761209e6128d3565b50505050565b600a546009546000918291825b6008548110156121d5578260036000600884815481106120cd57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612132575081600460006008848154811061210b57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214957600a5460095494509450505050612203565b612189600360006008848154811061215d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e43565b92506121cb600460006008848154811061219f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e43565b91506001016120b1565b50600954600a546121e591611d45565b8210156121fd57600a54600954935093505050612203565b90925090505b9091565b600081836122565760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cdf578181015183820152602001611cc7565b50600083858161226257fe5b0495945050505050565b600080600080600061227d866128e7565b9050600061228a87612903565b905060006122978861291f565b905060006122b1826122ab85818d89611e43565b90611e43565b9993985091965094509092505050565b60008080806122d08986611e85565b905060006122de8987611e85565b905060006122ec8988611e85565b905060006122fa8989611e85565b9050600061230e826122ab85818989611e43565b949d949c50929a509298505050505050505050565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061235157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ca57600080fd5b505afa1580156123de573d6000803e3d6000fd5b505050506040513d60208110156123f457600080fd5b505181518290600190811061240557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612450307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461195d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156124f55781810151838201526020016124dd565b505050509050019650505050505050600060405180830381600087803b15801561251e57600080fd5b505af1158015611c83573d6000803e3d6000fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612568573d6000803e3d6000fd5b505050565b60115415801561257d5750601354155b80156125895750601554155b15612593576125b4565b60118054601255601380546014556015805460165560009283905590829055555b565b60006125c0611d22565b905060008060008060008060006125d689611de8565b965096509650965096509650965060006125f98984611e8590919063ffffffff16565b6001600160a01b038d1660009081526004602052604090205490915061261f908b611e43565b6001600160a01b038d1660009081526004602090815260408083209390935560039052205461264e9089611e43565b6001600160a01b03808e1660009081526003602052604080822093909355908d168152205461267d9088611d8e565b6001600160a01b038c1660009081526003602052604090205561269f8261293b565b6126ab868286866129c3565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3505050505050505050505050565b600061270e611d22565b9050600080600080600080600061272489611de8565b965096509650965096509650965060006127478984611e8590919063ffffffff16565b6001600160a01b038d1660009081526003602052604090205490915061276d9089611e43565b6001600160a01b03808e16600090815260036020908152604080832094909455918e168152600490915220546127a39086611d8e565b6001600160a01b038c1660009081526004602090815260408083209390935560039052205461267d9088611d8e565b60006127dc611d22565b905060008060008060008060006127f289611de8565b965096509650965096509650965060006128158984611e8590919063ffffffff16565b6001600160a01b038d1660009081526003602052604090205490915061264e9089611e43565b6000612845611d22565b9050600080600080600080600061285b89611de8565b9650965096509650965096509650600061287e8984611e8590919063ffffffff16565b6001600160a01b038d166000908152600460205260409020549091506128a4908b611e43565b6001600160a01b038d1660009081526004602090815260408083209390935560039052205461276d9089611e43565b601254601155601454601355601654601555565b6000610ac36064610f6e60115485611e8590919063ffffffff16565b6000610ac36064610f6e60135485611e8590919063ffffffff16565b6000610ac36064610f6e60155485611e8590919063ffffffff16565b6000612945611d22565b905060006129538383611e85565b306000908152600360205260409020549091506129709082611d8e565b3060009081526003602090815260408083209390935560079052205460ff161561256857306000908152600460205260409020546129ae9084611d8e565b30600090815260046020526040902055505050565b6129dc836122ab86600a54611e4390919063ffffffff16565b600a55600b546129ec9083611d8e565b600b55600c546129fc9082611d8e565b600c55600954612a0c9082611e43565b6009555050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220140591130f1795ac493127b67810bc72475b5e1c294ed6fe7178a505f3e0995f64736f6c634300060c0033

Deployed Bytecode Sourcemap

15245:18594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32660:98;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32660:98:0;;:::i;:::-;;17767:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18679:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18679:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19800:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16643:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16643:51:0;;;;;;;;;;;;;;18044:95;;;;;;;;;;;;;:::i;18848:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18848:313:0;;;;;;;;;;;;;;;;;:::i;19999:137::-;;;;;;;;;;;;;:::i;21108:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21108:253:0;;:::i;16514:85::-;;;;;;;;;;;;;:::i;17953:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21824:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21824:479:0;-1:-1:-1;;;;;21824:479:0;;:::i;19169:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19169:218:0;;;;;;;;:::i;16090:26::-;;;;;;;;;;;;;:::i;20272:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20272:378:0;;:::i;19899:88::-;;;;;;;;;;;;;:::i;33022:212::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33022:212:0;;;;;;;:::i;16273:33::-;;;;;;;;;;;;;:::i;32415:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32415:111:0;-1:-1:-1;;;;;32415:111:0;;:::i;20662:438::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20662:438:0;;;;;;;;;:::i;16701:38::-;;;;;;;;;;;;;:::i;16780:40::-;;;;;;;;;;;;;:::i;21369:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21369:447:0;-1:-1:-1;;;;;21369:447:0;;:::i;32280:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32280:123:0;-1:-1:-1;;;;;32280:123:0;;:::i;6669:78::-;;;;;;;;;;;;;:::i;6465:90::-;;;;;;;;;;;;;:::i;18147:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18147:198:0;-1:-1:-1;;;;;18147:198:0;;:::i;6057:148::-;;;;;;;;;;;;;:::i;16381:50::-;;;;;;;;;;;;;:::i;19672:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19672:120:0;-1:-1:-1;;;;;19672:120:0;;:::i;5843:79::-;;;;;;;;;;;;;:::i;17858:87::-;;;;;;;;;;;;;:::i;20144:120::-;;;;;;;;;;;;;:::i;19395:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19395:269:0;;;;;;;;:::i;6981:293::-;;;;;;;;;;;;;:::i;18353:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18353:167:0;;;;;;;;:::i;16177:27::-;;;;;;;;;;;;;:::i;33416:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33416:171:0;;;;:::i;32770:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32770:102:0;;:::i;6755:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6755:214:0;;:::i;18528:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18528:143:0;;;;;;;;;;:::i;32884:126::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32884:126:0;;:::i;32538:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32538:110:0;-1:-1:-1;;;;;32538:110:0;;:::i;33242:166::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33242:166:0;;:::i;6213:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6213:244:0;-1:-1:-1;;;;;6213:244:0;;:::i;32660:98::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;32734:7:::1;:16:::0;32660:98::o;17767:83::-;17837:5;17830:12;;;;;;;;-1:-1:-1;;17830:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17804:13;;17830:12;;17837:5;;17830:12;;17837:5;17830:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17767:83;:::o;18679:161::-;18754:4;18771:39;18780:12;:10;:12::i;:::-;18794:7;18803:6;18771:8;:39::i;:::-;-1:-1:-1;18828:4:0;18679:161;;;;;:::o;19800:87::-;19869:10;;19800:87;:::o;16643:51::-;;;:::o;18044:95::-;18124:7;;18044:95;:::o;18848:313::-;18946:4;18963:36;18973:6;18981:9;18992:6;18963:9;:36::i;:::-;19010:121;19019:6;19027:12;:10;:12::i;:::-;19041:89;19079:6;19041:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19041:19:0;;;;;;:11;:19;;;;;;19061:12;:10;:12::i;:::-;-1:-1:-1;;;;;19041:33:0;;;;;;;;;;;;-1:-1:-1;19041:33:0;;;:89;:37;:89::i;:::-;19010:8;:121::i;:::-;-1:-1:-1;19149:4:0;18848:313;;;;;:::o;19999:137::-;20111:17;;19999:137;:::o;21108:253::-;21174:7;21213;;21202;:18;;21194:73;;;;-1:-1:-1;;;21194:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21278:19;21301:10;:8;:10::i;:::-;21278:33;-1:-1:-1;21329:24:0;:7;21278:33;21329:11;:24::i;:::-;21322:31;;;21108:253;;;;:::o;16514:85::-;;;-1:-1:-1;;;;;16514:85:0;;:::o;17953:83::-;18019:9;;;;17953:83;:::o;21824:479::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21906:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21898:60;;;::::0;;-1:-1:-1;;;21898:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;21974:9;21969:327;21993:9;:16:::0;21989:20;::::1;21969:327;;;22051:7;-1:-1:-1::0;;;;;22035:23:0::1;:9;22045:1;22035:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22035:12:0::1;:23;22031:254;;;22094:9;22104:16:::0;;-1:-1:-1;;22104:20:0;;;22094:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22079:9:::1;:12:::0;;-1:-1:-1;;;;;22094:31:0;;::::1;::::0;22089:1;;22079:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22079:46:0::1;-1:-1:-1::0;;;;;22079:46:0;;::::1;;::::0;;22144:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22183:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22183:28:0::1;::::0;;22230:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22230:15:0;;;;;-1:-1:-1;;;;;;22230:15:0::1;::::0;;;;;22264:5:::1;;22031:254;22011:3;;21969:327;;;;21824:479:::0;:::o;19169:218::-;19257:4;19274:83;19283:12;:10;:12::i;:::-;19297:7;19306:50;19345:10;19306:11;:25;19318:12;:10;:12::i;:::-;-1:-1:-1;;;;;19306:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;19306:25:0;;;:34;;;;;;;;;;;:38;:50::i;16090:26::-;;;;:::o;20272:378::-;20324:14;20341:12;:10;:12::i;:::-;-1:-1:-1;;;;;20373:19:0;;;;;;:11;:19;;;;;;20324:29;;-1:-1:-1;20373:19:0;;20372:20;20364:77;;;;-1:-1:-1;;;20364:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20453:15;20478:19;20489:7;20478:10;:19::i;:::-;-1:-1:-1;;;;;;;;20526:15:0;;;;;;:7;:15;;;;;;20452:45;;-1:-1:-1;20526:28:0;;:15;-1:-1:-1;20452:45:0;;-1:-1:-1;;20526:19:0;:28::i;:::-;-1:-1:-1;;;;;20508:15:0;;;;;;:7;:15;;;;;:46;20575:7;;:20;;20587:7;20575:11;:20::i;:::-;20565:7;:30;20619:10;;:23;;20634:7;20619:14;:23::i;:::-;20606:10;:36;-1:-1:-1;;;20272:378:0:o;19899:88::-;19968:11;;19899:88;:::o;33022:212::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;33139:87:::1;33196:13;33213:1;33188:26;33183:2;:32;33139:25;33151:12;33139:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:87::i;:::-;33124:12;:102:::0;-1:-1:-1;;33022:212:0:o;16273:33::-;;;;:::o;32415:111::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32484:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;32484:34:0::1;32514:4;32484:34;::::0;;32415:111::o;20662:438::-;20752:7;20791;;20780;:18;;20772:62;;;;;-1:-1:-1;;;20772:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20850:17;20845:248;;20885:15;20910:19;20921:7;20910:10;:19::i;:::-;-1:-1:-1;20884:45:0;;-1:-1:-1;20944:14:0;;-1:-1:-1;;;;;;20944:14:0;20845:248;20993:23;21025:19;21036:7;21025:10;:19::i;:::-;-1:-1:-1;20991:53:0;;-1:-1:-1;21059:22:0;;-1:-1:-1;;;;;;21059:22:0;16701:38;;;:::o;16780:40::-;;;-1:-1:-1;;;16780:40:0;;;;;:::o;21369:447::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21566:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21565:21;21557:61;;;::::0;;-1:-1:-1;;;21557:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;21632:16:0;::::1;21651:1;21632:16:::0;;;:7:::1;:16;::::0;;;;;:20;21629:108:::1;;-1:-1:-1::0;;;;;21708:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21688:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21669:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21629:108:::1;-1:-1:-1::0;;;;;21747:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21747:27:0::1;21770:4;21747:27:::0;;::::1;::::0;;;21785:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21785:23:0::1;::::0;;::::1;::::0;;21369:447::o;32280:123::-;-1:-1:-1;;;;;32368:27:0;32344:4;32368:27;;;:18;:27;;;;;;;;;32280:123::o;6669:78::-;6736:3;6669:78;:::o;6465:90::-;6538:9;;6465:90;:::o;18147:198::-;-1:-1:-1;;;;;18237:20:0;;18213:7;18237:20;;;:11;:20;;;;;;;;18233:49;;;-1:-1:-1;;;;;;18266:16:0;;;;;;:7;:16;;;;;;18259:23;;18233:49;-1:-1:-1;;;;;18320:16:0;;;;;;:7;:16;;;;;;18300:37;;:19;:37::i;6057:148::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;6164:1:::1;6148:6:::0;;6127:40:::1;::::0;-1:-1:-1;;;;;6148:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6127:40:0;6164:1;;6127:40:::1;6195:1;6178:19:::0;;-1:-1:-1;;;;;;6178:19:0::1;::::0;;6057:148::o;16381:50::-;;;;:::o;19672:120::-;-1:-1:-1;;;;;19764:20:0;19740:4;19764:20;;;:11;:20;;;;;;;;;19672:120::o;5843:79::-;5881:7;5908:6;-1:-1:-1;;;;;5908:6:0;5843:79;:::o;17858:87::-;17930:7;17923:14;;;;;;;;-1:-1:-1;;17923:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17897:13;;17923:14;;17930:7;;17923:14;;17930:7;17923:14;;;;;;;;;;;;;;;;;;;;;;;;20144:120;20233:23;;20144:120;:::o;19395:269::-;19488:4;19505:129;19514:12;:10;:12::i;:::-;19528:7;19537:96;19576:15;19537:96;;;;;;;;;;;;;;;;;:11;:25;19549:12;:10;:12::i;:::-;-1:-1:-1;;;;;19537:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;19537:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;6981:293::-;7033:14;;-1:-1:-1;;;;;7033:14:0;7051:10;7033:28;7025:76;;;;-1:-1:-1;;;7025:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7126:9;;7120:3;:15;7112:60;;;;;-1:-1:-1;;;7112:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7217:14;;;7209:6;;7188:44;;-1:-1:-1;;;;;7217:14:0;;;;7209:6;;;;-1:-1:-1;;;;;;;;;;;7188:44:0;;7252:14;;;7243:23;;-1:-1:-1;;;;;;7243:23:0;-1:-1:-1;;;;;7252:14:0;;;7243:23;;;;;;6981:293::o;18353:167::-;18431:4;18448:42;18458:12;:10;:12::i;:::-;18472:9;18483:6;18448:9;:42::i;16177:27::-;;;;:::o;33416:171::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;33493:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;33493:32:0;::::1;-1:-1:-1::0;;;;33493:32:0;;::::1;::::0;;;::::1;::::0;;;33541:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;33416:171:::0;:::o;32770:102::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;32846:8:::1;:18:::0;32770:102::o;6755:214::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;6836:6:::1;::::0;;;6819:23;;-1:-1:-1;;;;;;6819:23:0;;::::1;-1:-1:-1::0;;;;;6836:6:0;::::1;6819:23;::::0;;;6853:19:::1;::::0;;6895:3:::1;:10:::0;::::1;6883:9;:22:::0;6921:40:::1;::::0;6836:6;;-1:-1:-1;;;;;;;;;;;6921:40:0;6836:6;;6921:40:::1;6755:214:::0;:::o;18528:143::-;-1:-1:-1;;;;;18636:18:0;;;18609:7;18636:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18528:143::o;32884:126::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;32972:14:::1;:30:::0;32884:126::o;32538:110::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32605:27:0::1;32635:5;32605:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32605:35:0::1;::::0;;32538:110::o;33242:166::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;33350:23:::1;:50:::0;33242:166::o;6213:244::-;5980:12;:10;:12::i;:::-;5970:6;;-1:-1:-1;;;;;5970:6:0;;;:22;;;5962:67;;;;;-1:-1:-1;;;5962:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5962:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;6302:22:0;::::1;6294:73;;;;-1:-1:-1::0;;;6294:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6404:6;::::0;;6383:38:::1;::::0;-1:-1:-1;;;;;6383:38:0;;::::1;::::0;6404:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6383:38:0;::::1;6432:6;:17:::0;;-1:-1:-1;;;;;;6432:17:0::1;-1:-1:-1::0;;;;;6432:17:0;;;::::1;::::0;;;::::1;::::0;;6213:244::o;131:106::-;219:10;131:106;:::o;22311:337::-;-1:-1:-1;;;;;22404:19:0;;22396:68;;;;-1:-1:-1;;;22396:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22483:21:0;;22475:68;;;;-1:-1:-1;;;22475:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22556:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22608:32;;;;;;;;;;;;;;;;;22311:337;;;:::o;22656:1233::-;-1:-1:-1;;;;;22778:18:0;;22770:68;;;;-1:-1:-1;;;22770:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22857:16:0;;22849:64;;;;-1:-1:-1;;;22849:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22941:1;22932:6;:10;22924:64;;;;-1:-1:-1;;;22924:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23010:7;:5;:7::i;:::-;-1:-1:-1;;;;;23002:15:0;:4;-1:-1:-1;;;;;23002:15:0;;;:32;;;;;23027:7;:5;:7::i;:::-;-1:-1:-1;;;;;23021:13:0;:2;-1:-1:-1;;;;;23021:13:0;;;23002:32;22999:125;;;23067:12;;23057:6;:22;;23049:75;;;;-1:-1:-1;;;23049:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23139:28;23170:24;23188:4;23170:9;:24::i;:::-;23260:23;;23139:55;;-1:-1:-1;23236:47:0;;;;;;;23312:57;;-1:-1:-1;23353:16:0;;-1:-1:-1;;;23353:16:0;;;;23352:17;23312:57;:95;;;;;23394:13;-1:-1:-1;;;;;23386:21:0;:4;-1:-1:-1;;;;;23386:21:0;;;23312:95;:133;;;;-1:-1:-1;23424:21:0;;-1:-1:-1;;;23424:21:0;;;;23312:133;23294:287;;;23495:23;;23472:46;;23533:36;23548:20;23533:14;:36::i;:::-;-1:-1:-1;;;;;23730:24:0;;23603:12;23730:24;;;:18;:24;;;;;;23618:4;;23730:24;;;:50;;-1:-1:-1;;;;;;23758:22:0;;;;;;:18;:22;;;;;;;;23730:50;23727:96;;;-1:-1:-1;23806:5:0;23727:96;23843:38;23858:4;23863:2;23866:6;23873:7;23843:14;:38::i;:::-;22656:1233;;;;;;:::o;1533:192::-;1619:7;1655:12;1647:6;;;;1639:29;;;;-1:-1:-1;;;1639:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1691:5:0;;;1533:192::o;30139:163::-;30180:7;30201:15;30218;30237:19;:17;:19::i;:::-;30200:56;;-1:-1:-1;30200:56:0;-1:-1:-1;30274:20:0;30200:56;;30274:11;:20::i;:::-;30267:27;;;;30139:163;:::o;1993:132::-;2051:7;2078:39;2082:1;2085;2078:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2071:46;1993:132;-1:-1:-1;;;1993:132:0:o;1200:181::-;1258:7;1290:5;;;1314:6;;;;1306:46;;;;;-1:-1:-1;;;1306:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;28745:457;28804:7;28813;28822;28831;28840;28849;28858;28879:23;28904:12;28918:13;28933:18;28955:20;28967:7;28955:11;:20::i;:::-;28878:97;;;;;;;;28987:15;29004:23;29029:12;29045:57;29057:7;29066:4;29072:5;29079:10;29091;:8;:10::i;:::-;29045:11;:57::i;:::-;28986:116;;-1:-1:-1;28986:116:0;-1:-1:-1;28986:116:0;-1:-1:-1;29153:15:0;;-1:-1:-1;29170:4:0;;-1:-1:-1;29176:5:0;;-1:-1:-1;29183:10:0;-1:-1:-1;;;;28745:457:0;;;;;;;;;:::o;1389:136::-;1447:7;1474:43;1478:1;1481;1474:43;;;;;;;;;;;;;;;;;:3;:43::i;1733:250::-;1791:7;1815:6;1811:47;;-1:-1:-1;1845:1:0;1838:8;;1811:47;1882:5;;;1886:1;1882;:5;:1;1906:5;;;;;:10;1898:56;;;;-1:-1:-1;;;1898:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23897:281;17117:16;:23;;-1:-1:-1;;;;17117:23:0;-1:-1:-1;;;17117:23:0;;;23982:38:::1;23999:20:::0;23982:16:::1;:38::i;:::-;24052:17;::::0;:44:::1;::::0;24074:21:::1;24052;:44::i;:::-;24032:17;:64:::0;24129:17:::1;::::0;24107:63:::1;::::0;-1:-1:-1;;;;;24129:17:0::1;24148:21;24107;:63::i;:::-;-1:-1:-1::0;17163:16:0;:24;;-1:-1:-1;;;;17163:24:0;;;23897:281::o;24801:834::-;24912:7;24908:40;;24934:14;:12;:14::i;:::-;-1:-1:-1;;;;;24973:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;24997:22:0;;;;;;:11;:22;;;;;;;;24996:23;24973:46;24969:597;;;25036:48;25058:6;25066:9;25077:6;25036:21;:48::i;:::-;24969:597;;;-1:-1:-1;;;;;25107:19:0;;;;;;:11;:19;;;;;;;;25106:20;:46;;;;-1:-1:-1;;;;;;25130:22:0;;;;;;:11;:22;;;;;;;;25106:46;25102:464;;;25169:46;25189:6;25197:9;25208:6;25169:19;:46::i;25102:464::-;-1:-1:-1;;;;;25238:19:0;;;;;;:11;:19;;;;;;;;25237:20;:47;;;;-1:-1:-1;;;;;;25262:22:0;;;;;;:11;:22;;;;;;;;25261:23;25237:47;25233:333;;;25301:44;25319:6;25327:9;25338:6;25301:17;:44::i;25233:333::-;-1:-1:-1;;;;;25367:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;25390:22:0;;;;;;:11;:22;;;;;;;;25367:45;25363:203;;;25429:48;25451:6;25459:9;25470:6;25429:21;:48::i;25363:203::-;25510:44;25528:6;25536:9;25547:6;25510:17;:44::i;:::-;25590:7;25586:41;;25612:15;:13;:15::i;:::-;24801:834;;;;:::o;30310:561::-;30407:7;;30443;;30360;;;;;30467:289;30491:9;:16;30487:20;;30467:289;;;30557:7;30533;:21;30541:9;30551:1;30541:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30541:12:0;30533:21;;;;;;;;;;;;;:31;;:66;;;30592:7;30568;:21;30576:9;30586:1;30576:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30576:12:0;30568:21;;;;;;;;;;;;;:31;30533:66;30529:97;;;30609:7;;30618;;30601:25;;;;;;;;;30529:97;30651:34;30663:7;:21;30671:9;30681:1;30671:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30671:12:0;30663:21;;;;;;;;;;;;;30651:7;;:11;:34::i;:::-;30641:44;;30710:34;30722:7;:21;30730:9;30740:1;30730:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30730:12:0;30722:21;;;;;;;;;;;;;30710:7;;:11;:34::i;:::-;30700:44;-1:-1:-1;30509:3:0;;30467:289;;;-1:-1:-1;30792:7:0;;30780;;:20;;:11;:20::i;:::-;30770:7;:30;30766:61;;;30810:7;;30819;;30802:25;;;;;;;;30766:61;30846:7;;-1:-1:-1;30855:7:0;-1:-1:-1;30310:561:0;;;:::o;2133:278::-;2219:7;2254:12;2247:5;2239:28;;;;-1:-1:-1;;;2239:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2278:9;2294:1;2290;:5;;;;;;;2133:278;-1:-1:-1;;;;;2133:278:0:o;29210:409::-;29270:7;29279;29288;29297;29317:12;29332:24;29348:7;29332:15;:24::i;:::-;29317:39;;29367:13;29383:25;29400:7;29383:16;:25::i;:::-;29367:41;;29419:18;29440:30;29462:7;29440:21;:30::i;:::-;29419:51;-1:-1:-1;29481:23:0;29507:44;29419:51;29507:28;29529:5;29507:28;:7;29519:4;29507:11;:17::i;:::-;:21;;:28::i;:44::-;29481:70;29587:4;;-1:-1:-1;29593:5:0;;-1:-1:-1;29593:5:0;-1:-1:-1;29210:409:0;;-1:-1:-1;;;29210:409:0:o;29627:504::-;29757:7;;;;29813:24;:7;29825:11;29813;:24::i;:::-;29795:42;-1:-1:-1;29848:12:0;29863:21;:4;29872:11;29863:8;:21::i;:::-;29848:36;-1:-1:-1;29895:13:0;29911:22;:5;29921:11;29911:9;:22::i;:::-;29895:38;-1:-1:-1;29944:18:0;29965:27;:10;29980:11;29965:14;:27::i;:::-;29944:48;-1:-1:-1;30003:23:0;30029:44;29944:48;30029:28;30051:5;30029:28;:7;30041:4;30029:11;:17::i;:44::-;30092:7;;;;-1:-1:-1;30118:4:0;;-1:-1:-1;29627:504:0;;-1:-1:-1;;;;;;;;;29627:504:0:o;24186:605::-;24336:16;;;24350:1;24336:16;;;24312:21;24336:16;;;;;24312:21;24336:16;;;;;;;;;;-1:-1:-1;24336:16:0;24312:40;;24381:4;24363;24368:1;24363:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;24363:23:0;;;-1:-1:-1;;;;;24363:23:0;;;;;24407:15;-1:-1:-1;;;;;24407:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24407:22:0;24397:7;;:4;;24402:1;;24397:7;;;;;;;;;;;:32;-1:-1:-1;;;;;24397:32:0;;;-1:-1:-1;;;;;24397:32:0;;;;;24442:62;24459:4;24474:15;24492:11;24442:8;:62::i;:::-;24543:15;-1:-1:-1;;;;;24543:66:0;;24624:11;24650:1;24694:4;24721;24757:15;24543:240;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24543:240:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33605:127;33698:26;;-1:-1:-1;;;;;33698:18:0;;;:26;;;;;33717:6;;33698:26;;;;33717:6;33698:18;:26;;;;;;;;;;;;;;;;;;;;;33605:127;;:::o;31763:332::-;31809:7;;:12;:29;;;;-1:-1:-1;31825:8:0;;:13;31809:29;:52;;;;-1:-1:-1;31842:14:0;;:19;31809:52;31806:64;;;31863:7;;31806:64;31908:7;;;31890:15;:25;31945:8;;;31926:16;:27;31989:14;;;31964:22;:39;-1:-1:-1;32024:11:0;;;;32046:12;;;;32069:18;31763:332;:::o;26993:689::-;27095:19;27118:10;:8;:10::i;:::-;27095:33;;27140:15;27157:23;27182:12;27196:23;27221:12;27235:13;27250:18;27272:19;27283:7;27272:10;:19::i;:::-;27139:152;;;;;;;;;;;;;;27302:13;27319:22;27329:11;27319:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;27370:15:0;;;;;;:7;:15;;;;;;27302:39;;-1:-1:-1;27370:28:0;;27390:7;27370:19;:28::i;:::-;-1:-1:-1;;;;;27352:15:0;;;;;;:7;:15;;;;;;;;:46;;;;27427:7;:15;;;;:28;;27447:7;27427:19;:28::i;:::-;-1:-1:-1;;;;;27409:15:0;;;;;;;:7;:15;;;;;;:46;;;;27487:18;;;;;;;:39;;27510:15;27487:22;:39::i;:::-;-1:-1:-1;;;;;27466:18:0;;;;;;:7;:18;;;;;:60;27540:26;27555:10;27540:14;:26::i;:::-;27577:37;27589:4;27595:5;27602:4;27608:5;27577:11;:37::i;:::-;27647:9;-1:-1:-1;;;;;27630:44:0;27639:6;-1:-1:-1;;;;;27630:44:0;;27658:15;27630:44;;;;;;;;;;;;;;;;;;26993:689;;;;;;;;;;;;:::o;26276:709::-;26376:19;26399:10;:8;:10::i;:::-;26376:33;;26421:15;26438:23;26463:12;26477:23;26502:12;26516:13;26531:18;26553:19;26564:7;26553:10;:19::i;:::-;26420:152;;;;;;;;;;;;;;26583:13;26600:22;26610:11;26600:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;26651:15:0;;;;;;:7;:15;;;;;;26583:39;;-1:-1:-1;26651:28:0;;26671:7;26651:19;:28::i;:::-;-1:-1:-1;;;;;26633:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;26711:18;;;;;:7;:18;;;;;:39;;26734:15;26711:22;:39::i;:::-;-1:-1:-1;;;;;26690:18:0;;;;;;:7;:18;;;;;;;;:60;;;;26782:7;:18;;;;:39;;26805:15;26782:22;:39::i;25643:625::-;25741:19;25764:10;:8;:10::i;:::-;25741:33;;25786:15;25803:23;25828:12;25842:23;25867:12;25881:13;25896:18;25918:19;25929:7;25918:10;:19::i;:::-;25785:152;;;;;;;;;;;;;;25948:13;25965:22;25975:11;25965:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;26016:15:0;;;;;;:7;:15;;;;;;25948:39;;-1:-1:-1;26016:28:0;;26036:7;26016:19;:28::i;27690:765::-;27792:19;27815:10;:8;:10::i;:::-;27792:33;;27837:15;27854:23;27879:12;27893:23;27918:12;27932:13;27947:18;27969:19;27980:7;27969:10;:19::i;:::-;27836:152;;;;;;;;;;;;;;27999:13;28016:22;28026:11;28016:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;28067:15:0;;;;;;:7;:15;;;;;;27999:39;;-1:-1:-1;28067:28:0;;28087:7;28067:19;:28::i;:::-;-1:-1:-1;;;;;28049:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28124:7;:15;;;;:28;;28144:7;28124:19;:28::i;32107:165::-;32161:15;;32151:7;:25;32198:16;;32187:8;:27;32242:22;;32225:14;:39;32107:165::o;31250:154::-;31314:7;31341:55;31380:5;31341:20;31353:7;;31341;:11;;:20;;;;:::i;31416:156::-;31481:7;31508:56;31548:5;31508:21;31520:8;;31508:7;:11;;:21;;;;:::i;31584:167::-;31654:7;31681:62;31727:5;31681:27;31693:14;;31681:7;:11;;:27;;;;:::i;30883:355::-;30946:19;30969:10;:8;:10::i;:::-;30946:33;-1:-1:-1;30990:18:0;31011:27;:10;30946:33;31011:14;:27::i;:::-;31090:4;31074:22;;;;:7;:22;;;;;;30990:48;;-1:-1:-1;31074:38:0;;30990:48;31074:26;:38::i;:::-;31065:4;31049:22;;;;:7;:22;;;;;;;;:63;;;;31126:11;:26;;;;;;31123:107;;;31208:4;31192:22;;;;:7;:22;;;;;;:38;;31219:10;31192:26;:38::i;:::-;31183:4;31167:22;;;;:7;:22;;;;;:63;30883:355;;;:::o;28463:274::-;28571:28;28593:5;28571:17;28583:4;28571:7;;:11;;:17;;;;:::i;:28::-;28561:7;:38;28623:10;;:20;;28638:4;28623:14;:20::i;:::-;28610:10;:33;28668:11;;:22;;28684:5;28668:15;:22::i;:::-;28654:11;:36;28711:7;;:18;;28723:5;28711:11;:18::i;:::-;28701:7;:28;-1:-1:-1;;;;28463:274:0:o

Swarm Source

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