ETH Price: $3,253.22 (+3.14%)
Gas: 2 Gwei

Token

BLUFF (BLFT)
 

Overview

Max Total Supply

97,612,641.592236299 BLFT

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
221,527.954658154 BLFT

Value
$0.00
0x2decbefeb9915620dac11a89ca686ab6051d0314
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BLUFF

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-15
*/

/**
 *Submitted for verification at Etherscan.io on 2021-04-15
*/

/**
 *Submitted for verification at BscScan.com on 2021-04-13
*/

/*

    BLUFF is a deflationary token with evolutive tax redistribution over time.
  
*/


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 BLUFF 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 = 100 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;
    uint256 private _tDonationTotal;

    string private _name = "BLUFF";
    string private _symbol = "BLFT";
    uint8 private _decimals = 9;


    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _burnFee = 2;
    uint256 private _previousBurnFee = _burnFee;
    
    
    uint256 public _donationFee = 0;
    uint256 private _previousDonationFee = _donationFee;
    
    uint256 public _maxTxAmount = 2 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 5 * 10**4 * 10**9; 
    
    address payable public charityAddress = 0x267Df8E44d6a227ff79fB1e2e87Ed8AA1C0dcbCb; // Charity Address
        
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    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 totalDonationETH() public view returns (uint256) {
        // ETH has  18 decimals!
        return _tDonationTotal;
    }

    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); 
        _tDonationTotal = _tDonationTotal.add(address(this).balance);
        TransferCharityETH(charityAddress, 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(_donationFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _burnFee == 0 && _donationFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousBurnFee = _burnFee;
        _previousDonationFee = _donationFee;
        
        _taxFee = 0;
        _burnFee = 0;
        _donationFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _burnFee = _previousBurnFee;
        _donationFee = _previousDonationFee;
    }

    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 setDonationFeePercent(uint256 DonationFee) external onlyOwner() {
        _donationFee = DonationFee;
    }
    
    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 TransferCharityETH(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":"_donationFee","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":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[{"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":"DonationFee","type":"uint256"}],"name":"setDonationFeePercent","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":"totalDonationETH","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":"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"}]

67016345785d8a000060095567012a74c07c69ffff19600a55610100604052600560c08190526421262aa32360d91b60e09081526200004291600e9190620003d2565b50604080518082019091526004808252631093119560e21b60209092019182526200007091600f91620003d2565b506010805460ff1916600917905560036011819055601255600260138190556014556000601581905560165566071afd498d0000601755652d79883d20006018556019805460ff60a81b196001600160a01b031990911673267df8e44d6a227ff79fb1e2e87ed8aa1c0dcbcb17169055348015620000ed57600080fd5b506000620000fa620003bf565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a546003600062000155620003bf565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001cc57600080fd5b505afa158015620001e1573d6000803e3d6000fd5b505050506040513d6020811015620001f857600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200024957600080fd5b505afa1580156200025e573d6000803e3d6000fd5b505050506040513d60208110156200027557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002c857600080fd5b505af1158015620002dd573d6000803e3d6000fd5b505050506040513d6020811015620002f457600080fd5b50516001600160601b0319606091821b811660a0529082901b1660805260016006600062000321620003c3565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260069092529020805490911660011790556200036b620003bf565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a3506200046e565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200041557805160ff191683800117855562000445565b8280016001018555821562000445579182015b828111156200044557825182559160200191906001019062000428565b506200045392915062000457565b5090565b5b8082111562000453576000815560010162000458565b60805160601c60a05160601c612c77620004ac600039806110785280611bcf525080610ad15280612373528061242b52806124525250612c776000f3fe6080604052600436106102765760003560e01c8063557ed1ba1161014f578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e146108ae578063ea2f0b37146108e9578063f0f165af1461091c578063f13b01f214610946578063f2fde38b14610970578063faf38f62146109a35761027d565b8063a9059cbb146107cb578063afcf2fc414610804578063c0b0fda214610819578063c49b9a801461082e578063cea269581461085a578063dd467064146108845761027d565b806388f820201161011357806388f820201461070b5780638da5cb5b1461073e57806395d89b4114610753578063a073d37f14610768578063a457c2d71461077d578063a69df4b5146107b65761027d565b8063557ed1ba14610684578063602bc62b1461069957806370a08231146106ae578063715018a6146106e15780637d1db4a5146106f65761027d565b80633b124fe7116101e85780634549b039116101ac5780634549b039146105ad57806349bd5a5e146105df5780634a74bb02146105f457806352390c02146106095780635342acb41461063c57806353fdfe3a1461066f5761027d565b80633b124fe7146104f65780633bd5d1731461050b5780633c9f861d146105355780633f3cf56c1461054a578063437823ec1461057a5761027d565b806318160ddd1161023a57806318160ddd146103dd57806323b872dd146103f25780632d83811914610435578063313ce5671461045f5780633685d4191461048a57806339509351146104bd5761027d565b8063061c82d01461028257806306fdde03146102ae578063095ea7b31461033857806313114a9d146103855780631694505e146103ac5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102ac600480360360208110156102a557600080fd5b50356109b8565b005b3480156102ba57600080fd5b506102c3610a15565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102fd5781810151838201526020016102e5565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103716004803603604081101561035b57600080fd5b506001600160a01b038135169060200135610aab565b604080519115158252519081900360200190f35b34801561039157600080fd5b5061039a610ac9565b60408051918252519081900360200190f35b3480156103b857600080fd5b506103c1610acf565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b5061039a610af3565b3480156103fe57600080fd5b506103716004803603606081101561041557600080fd5b506001600160a01b03813581169160208101359091169060400135610af9565b34801561044157600080fd5b5061039a6004803603602081101561045857600080fd5b5035610b80565b34801561046b57600080fd5b50610474610be2565b6040805160ff9092168252519081900360200190f35b34801561049657600080fd5b506102ac600480360360208110156104ad57600080fd5b50356001600160a01b0316610beb565b3480156104c957600080fd5b50610371600480360360408110156104e057600080fd5b506001600160a01b038135169060200135610dac565b34801561050257600080fd5b5061039a610dfa565b34801561051757600080fd5b506102ac6004803603602081101561052e57600080fd5b5035610e00565b34801561054157600080fd5b5061039a610edc565b34801561055657600080fd5b506102ac6004803603604081101561056d57600080fd5b5080359060200135610ee2565b34801561058657600080fd5b506102ac6004803603602081101561059d57600080fd5b50356001600160a01b0316610f66565b3480156105b957600080fd5b5061039a600480360360408110156105d057600080fd5b50803590602001351515610fe2565b3480156105eb57600080fd5b506103c1611076565b34801561060057600080fd5b5061037161109a565b34801561061557600080fd5b506102ac6004803603602081101561062c57600080fd5b50356001600160a01b03166110aa565b34801561064857600080fd5b506103716004803603602081101561065f57600080fd5b50356001600160a01b0316611230565b34801561067b57600080fd5b5061039a61124e565b34801561069057600080fd5b5061039a611254565b3480156106a557600080fd5b5061039a611258565b3480156106ba57600080fd5b5061039a600480360360208110156106d157600080fd5b50356001600160a01b031661125e565b3480156106ed57600080fd5b506102ac6112c0565b34801561070257600080fd5b5061039a611350565b34801561071757600080fd5b506103716004803603602081101561072e57600080fd5b50356001600160a01b0316611356565b34801561074a57600080fd5b506103c1611374565b34801561075f57600080fd5b506102c3611383565b34801561077457600080fd5b5061039a6113e4565b34801561078957600080fd5b50610371600480360360408110156107a057600080fd5b506001600160a01b0381351690602001356113ea565b3480156107c257600080fd5b506102ac611452565b3480156107d757600080fd5b50610371600480360360408110156107ee57600080fd5b506001600160a01b038135169060200135611540565b34801561081057600080fd5b506103c1611554565b34801561082557600080fd5b5061039a611563565b34801561083a57600080fd5b506102ac6004803603602081101561085157600080fd5b50351515611569565b34801561086657600080fd5b506102ac6004803603602081101561087d57600080fd5b5035611614565b34801561089057600080fd5b506102ac600480360360208110156108a757600080fd5b5035611671565b3480156108ba57600080fd5b5061039a600480360360408110156108d157600080fd5b506001600160a01b038135811691602001351661170f565b3480156108f557600080fd5b506102ac6004803603602081101561090c57600080fd5b50356001600160a01b031661173a565b34801561092857600080fd5b506102ac6004803603602081101561093f57600080fd5b50356117b3565b34801561095257600080fd5b506102ac6004803603602081101561096957600080fd5b5035611810565b34801561097c57600080fd5b506102ac6004803603602081101561099357600080fd5b50356001600160a01b031661186d565b3480156109af57600080fd5b5061039a611953565b6109c0611959565b6000546001600160a01b03908116911614610a10576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601155565b600e8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa15780601f10610a7657610100808354040283529160200191610aa1565b820191906000526020600020905b815481529060010190602001808311610a8457829003601f168201915b5050505050905090565b6000610abf610ab8611959565b848461195d565b5060015b92915050565b600b5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095490565b6000610b06848484611a49565b610b7684610b12611959565b610b7185604051806060016040528060288152602001612af4602891396001600160a01b038a16600090815260056020526040812090610b50611959565b6001600160a01b031681526020810191909152604001600020549190611c8b565b61195d565b5060019392505050565b6000600a54821115610bc35760405162461bcd60e51b815260040180806020018281038252602a815260200180612a39602a913960400191505060405180910390fd5b6000610bcd611d22565b9050610bd98382611d45565b9150505b919050565b60105460ff1690565b610bf3611959565b6000546001600160a01b03908116911614610c43576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610cb0576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610da857816001600160a01b031660088281548110610cd457fe5b6000918252602090912001546001600160a01b03161415610da057600880546000198101908110610d0157fe5b600091825260209091200154600880546001600160a01b039092169183908110610d2757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d7957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610da8565b600101610cb3565b5050565b6000610abf610db9611959565b84610b718560056000610dca611959565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611d8e565b60115481565b6000610e0a611959565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e655760405162461bcd60e51b815260040180806020018281038252602c815260200180612bce602c913960400191505060405180910390fd5b6000610e7083611de8565b5050506001600160a01b038616600090815260036020526040902054939450610e9e93925084915050611e43565b6001600160a01b038316600090815260036020526040902055600a54610ec49082611e43565b600a55600b54610ed49084611d8e565b600b55505050565b600c5490565b610eea611959565b6000546001600160a01b03908116911614610f3a576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b610f5f81600201600a0a610f5984600954611e8590919063ffffffff16565b90611d45565b6017555050565b610f6e611959565b6000546001600160a01b03908116911614610fbe576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b600060095483111561103b576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161105b57600061104b84611de8565b50949650610ac395505050505050565b600061106684611de8565b50939650610ac395505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601954600160a81b900460ff1681565b6110b2611959565b6000546001600160a01b03908116911614611102576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff1615611170576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156111ca576001600160a01b0381166000908152600360205260409020546111b090610b80565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b600d5490565b4290565b60025490565b6001600160a01b03811660009081526007602052604081205460ff161561129e57506001600160a01b038116600090815260046020526040902054610bdd565b6001600160a01b038216600090815260036020526040902054610ac390610b80565b6112c8611959565b6000546001600160a01b03908116911614611318576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020612b3c833981519152908390a3600080546001600160a01b0319169055565b60175481565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa15780601f10610a7657610100808354040283529160200191610aa1565b60185490565b6000610abf6113f7611959565b84610b7185604051806060016040528060258152602001612c1d6025913960056000611421611959565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611c8b565b6001546001600160a01b0316331461149b5760405162461bcd60e51b8152600401808060200182810382526023815260200180612bfa6023913960400191505060405180910390fd5b60025442116114f1576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020612b3c83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610abf61154d611959565b8484611a49565b6019546001600160a01b031681565b60135481565b611571611959565b6000546001600160a01b039081169116146115c1576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b60198054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b61161c611959565b6000546001600160a01b0390811691161461166c576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601355565b611679611959565b6000546001600160a01b039081169116146116c9576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020612b3c833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611742611959565b6000546001600160a01b03908116911614611792576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6117bb611959565b6000546001600160a01b0390811691161461180b576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601855565b611818611959565b6000546001600160a01b03908116911614611868576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601555565b611875611959565b6000546001600160a01b039081169116146118c5576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811661190a5760405162461bcd60e51b8152600401808060200182810382526026815260200180612a636026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020612b3c83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b3390565b6001600160a01b0383166119a25760405162461bcd60e51b8152600401808060200182810382526024815260200180612baa6024913960400191505060405180910390fd5b6001600160a01b0382166119e75760405162461bcd60e51b8152600401808060200182810382526022815260200180612a896022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611a8e5760405162461bcd60e51b8152600401808060200182810382526025815260200180612b856025913960400191505060405180910390fd5b6001600160a01b038216611ad35760405162461bcd60e51b8152600401808060200182810382526023815260200180612a166023913960400191505060405180910390fd5b60008111611b125760405162461bcd60e51b8152600401808060200182810382526029815260200180612b5c6029913960400191505060405180910390fd5b611b1a611374565b6001600160a01b0316836001600160a01b031614158015611b545750611b3e611374565b6001600160a01b0316826001600160a01b031614155b15611b9a57601754811115611b9a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612aab6028913960400191505060405180910390fd5b6000611ba53061125e565b60185490915081108015908190611bc65750601954600160a01b900460ff16155b8015611c0457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611c195750601954600160a81b900460ff165b15611c2c576018549150611c2c82611ede565b6001600160a01b03851660009081526006602052604090205460019060ff1680611c6e57506001600160a01b03851660009081526006602052604090205460ff165b15611c77575060005b611c8386868684611f30565b505050505050565b60008184841115611d1a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cdf578181015183820152602001611cc7565b50505050905090810190601f168015611d0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611d2f6120a4565b9092509050611d3e8282611d45565b9250505090565b6000611d8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612207565b9392505050565b600082820183811015611d87576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000806000806000806000806000611e028c61226c565b93509350935093506000806000611e238f878787611e1e611d22565b6122c1565b919f509d509b509599509397509195509350505050919395979092949650565b6000611d8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c8b565b600082611e9457506000610ac3565b82820282848281611ea157fe5b0414611d875760405162461bcd60e51b8152600401808060200182810382526021815260200180612ad36021913960400191505060405180910390fd5b6019805460ff60a01b1916600160a01b179055611efa81612323565b600d54611f079047611d8e565b600d55601954611f20906001600160a01b031647612532565b506019805460ff60a01b19169055565b80611f3d57611f3d61256d565b6001600160a01b03841660009081526007602052604090205460ff168015611f7e57506001600160a01b03831660009081526007602052604090205460ff16155b15611f9357611f8e8484846125b6565b612091565b6001600160a01b03841660009081526007602052604090205460ff16158015611fd457506001600160a01b03831660009081526007602052604090205460ff165b15611fe457611f8e848484612704565b6001600160a01b03841660009081526007602052604090205460ff1615801561202657506001600160a01b03831660009081526007602052604090205460ff16155b1561203657611f8e8484846127d2565b6001600160a01b03841660009081526007602052604090205460ff16801561207657506001600160a01b03831660009081526007602052604090205460ff165b1561208657611f8e84848461283b565b6120918484846127d2565b8061209e5761209e6128d3565b50505050565b600a546009546000918291825b6008548110156121d5578260036000600884815481106120cd57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612132575081600460006008848154811061210b57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214957600a5460095494509450505050612203565b612189600360006008848154811061215d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e43565b92506121cb600460006008848154811061219f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e43565b91506001016120b1565b50600954600a546121e591611d45565b8210156121fd57600a54600954935093505050612203565b90925090505b9091565b600081836122565760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cdf578181015183820152602001611cc7565b50600083858161226257fe5b0495945050505050565b600080600080600061227d866128e7565b9050600061228a87612903565b905060006122978861291f565b905060006122b1826122ab85818d89611e43565b90611e43565b9993985091965094509092505050565b60008080806122d08986611e85565b905060006122de8987611e85565b905060006122ec8988611e85565b905060006122fa8989611e85565b9050600061230e826122ab85818989611e43565b949d949c50929a509298505050505050505050565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061235157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ca57600080fd5b505afa1580156123de573d6000803e3d6000fd5b505050506040513d60208110156123f457600080fd5b505181518290600190811061240557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612450307f00000000000000000000000000000000000000000000000000000000000000008461195d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156124f55781810151838201526020016124dd565b505050509050019650505050505050600060405180830381600087803b15801561251e57600080fd5b505af1158015611c83573d6000803e3d6000fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612568573d6000803e3d6000fd5b505050565b60115415801561257d5750601354155b80156125895750601554155b15612593576125b4565b60118054601255601380546014556015805460165560009283905590829055555b565b60006125c0611d22565b905060008060008060008060006125d689611de8565b965096509650965096509650965060006125f98984611e8590919063ffffffff16565b6001600160a01b038d1660009081526004602052604090205490915061261f908b611e43565b6001600160a01b038d1660009081526004602090815260408083209390935560039052205461264e9089611e43565b6001600160a01b03808e1660009081526003602052604080822093909355908d168152205461267d9088611d8e565b6001600160a01b038c1660009081526003602052604090205561269f8261293b565b6126ab868286866129c3565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3505050505050505050505050565b600061270e611d22565b9050600080600080600080600061272489611de8565b965096509650965096509650965060006127478984611e8590919063ffffffff16565b6001600160a01b038d1660009081526003602052604090205490915061276d9089611e43565b6001600160a01b03808e16600090815260036020908152604080832094909455918e168152600490915220546127a39086611d8e565b6001600160a01b038c1660009081526004602090815260408083209390935560039052205461267d9088611d8e565b60006127dc611d22565b905060008060008060008060006127f289611de8565b965096509650965096509650965060006128158984611e8590919063ffffffff16565b6001600160a01b038d1660009081526003602052604090205490915061264e9089611e43565b6000612845611d22565b9050600080600080600080600061285b89611de8565b9650965096509650965096509650600061287e8984611e8590919063ffffffff16565b6001600160a01b038d166000908152600460205260409020549091506128a4908b611e43565b6001600160a01b038d1660009081526004602090815260408083209390935560039052205461276d9089611e43565b601254601155601454601355601654601555565b6000610ac36064610f5960115485611e8590919063ffffffff16565b6000610ac36064610f5960135485611e8590919063ffffffff16565b6000610ac36064610f5960155485611e8590919063ffffffff16565b6000612945611d22565b905060006129538383611e85565b306000908152600360205260409020549091506129709082611d8e565b3060009081526003602090815260408083209390935560079052205460ff161561256857306000908152600460205260409020546129ae9084611d8e565b30600090815260046020526040902055505050565b6129dc836122ab86600a54611e4390919063ffffffff16565b600a55600b546129ec9083611d8e565b600b55600c546129fc9082611d8e565b600c55600954612a0c9082611e43565b6009555050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204123b3d58eb0971e8f1ae55c96f4e9468ea5b38cdb232583d985f98447fa9e5964736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102765760003560e01c8063557ed1ba1161014f578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e146108ae578063ea2f0b37146108e9578063f0f165af1461091c578063f13b01f214610946578063f2fde38b14610970578063faf38f62146109a35761027d565b8063a9059cbb146107cb578063afcf2fc414610804578063c0b0fda214610819578063c49b9a801461082e578063cea269581461085a578063dd467064146108845761027d565b806388f820201161011357806388f820201461070b5780638da5cb5b1461073e57806395d89b4114610753578063a073d37f14610768578063a457c2d71461077d578063a69df4b5146107b65761027d565b8063557ed1ba14610684578063602bc62b1461069957806370a08231146106ae578063715018a6146106e15780637d1db4a5146106f65761027d565b80633b124fe7116101e85780634549b039116101ac5780634549b039146105ad57806349bd5a5e146105df5780634a74bb02146105f457806352390c02146106095780635342acb41461063c57806353fdfe3a1461066f5761027d565b80633b124fe7146104f65780633bd5d1731461050b5780633c9f861d146105355780633f3cf56c1461054a578063437823ec1461057a5761027d565b806318160ddd1161023a57806318160ddd146103dd57806323b872dd146103f25780632d83811914610435578063313ce5671461045f5780633685d4191461048a57806339509351146104bd5761027d565b8063061c82d01461028257806306fdde03146102ae578063095ea7b31461033857806313114a9d146103855780631694505e146103ac5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102ac600480360360208110156102a557600080fd5b50356109b8565b005b3480156102ba57600080fd5b506102c3610a15565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102fd5781810151838201526020016102e5565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103716004803603604081101561035b57600080fd5b506001600160a01b038135169060200135610aab565b604080519115158252519081900360200190f35b34801561039157600080fd5b5061039a610ac9565b60408051918252519081900360200190f35b3480156103b857600080fd5b506103c1610acf565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b5061039a610af3565b3480156103fe57600080fd5b506103716004803603606081101561041557600080fd5b506001600160a01b03813581169160208101359091169060400135610af9565b34801561044157600080fd5b5061039a6004803603602081101561045857600080fd5b5035610b80565b34801561046b57600080fd5b50610474610be2565b6040805160ff9092168252519081900360200190f35b34801561049657600080fd5b506102ac600480360360208110156104ad57600080fd5b50356001600160a01b0316610beb565b3480156104c957600080fd5b50610371600480360360408110156104e057600080fd5b506001600160a01b038135169060200135610dac565b34801561050257600080fd5b5061039a610dfa565b34801561051757600080fd5b506102ac6004803603602081101561052e57600080fd5b5035610e00565b34801561054157600080fd5b5061039a610edc565b34801561055657600080fd5b506102ac6004803603604081101561056d57600080fd5b5080359060200135610ee2565b34801561058657600080fd5b506102ac6004803603602081101561059d57600080fd5b50356001600160a01b0316610f66565b3480156105b957600080fd5b5061039a600480360360408110156105d057600080fd5b50803590602001351515610fe2565b3480156105eb57600080fd5b506103c1611076565b34801561060057600080fd5b5061037161109a565b34801561061557600080fd5b506102ac6004803603602081101561062c57600080fd5b50356001600160a01b03166110aa565b34801561064857600080fd5b506103716004803603602081101561065f57600080fd5b50356001600160a01b0316611230565b34801561067b57600080fd5b5061039a61124e565b34801561069057600080fd5b5061039a611254565b3480156106a557600080fd5b5061039a611258565b3480156106ba57600080fd5b5061039a600480360360208110156106d157600080fd5b50356001600160a01b031661125e565b3480156106ed57600080fd5b506102ac6112c0565b34801561070257600080fd5b5061039a611350565b34801561071757600080fd5b506103716004803603602081101561072e57600080fd5b50356001600160a01b0316611356565b34801561074a57600080fd5b506103c1611374565b34801561075f57600080fd5b506102c3611383565b34801561077457600080fd5b5061039a6113e4565b34801561078957600080fd5b50610371600480360360408110156107a057600080fd5b506001600160a01b0381351690602001356113ea565b3480156107c257600080fd5b506102ac611452565b3480156107d757600080fd5b50610371600480360360408110156107ee57600080fd5b506001600160a01b038135169060200135611540565b34801561081057600080fd5b506103c1611554565b34801561082557600080fd5b5061039a611563565b34801561083a57600080fd5b506102ac6004803603602081101561085157600080fd5b50351515611569565b34801561086657600080fd5b506102ac6004803603602081101561087d57600080fd5b5035611614565b34801561089057600080fd5b506102ac600480360360208110156108a757600080fd5b5035611671565b3480156108ba57600080fd5b5061039a600480360360408110156108d157600080fd5b506001600160a01b038135811691602001351661170f565b3480156108f557600080fd5b506102ac6004803603602081101561090c57600080fd5b50356001600160a01b031661173a565b34801561092857600080fd5b506102ac6004803603602081101561093f57600080fd5b50356117b3565b34801561095257600080fd5b506102ac6004803603602081101561096957600080fd5b5035611810565b34801561097c57600080fd5b506102ac6004803603602081101561099357600080fd5b50356001600160a01b031661186d565b3480156109af57600080fd5b5061039a611953565b6109c0611959565b6000546001600160a01b03908116911614610a10576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601155565b600e8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa15780601f10610a7657610100808354040283529160200191610aa1565b820191906000526020600020905b815481529060010190602001808311610a8457829003601f168201915b5050505050905090565b6000610abf610ab8611959565b848461195d565b5060015b92915050565b600b5490565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095490565b6000610b06848484611a49565b610b7684610b12611959565b610b7185604051806060016040528060288152602001612af4602891396001600160a01b038a16600090815260056020526040812090610b50611959565b6001600160a01b031681526020810191909152604001600020549190611c8b565b61195d565b5060019392505050565b6000600a54821115610bc35760405162461bcd60e51b815260040180806020018281038252602a815260200180612a39602a913960400191505060405180910390fd5b6000610bcd611d22565b9050610bd98382611d45565b9150505b919050565b60105460ff1690565b610bf3611959565b6000546001600160a01b03908116911614610c43576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610cb0576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610da857816001600160a01b031660088281548110610cd457fe5b6000918252602090912001546001600160a01b03161415610da057600880546000198101908110610d0157fe5b600091825260209091200154600880546001600160a01b039092169183908110610d2757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d7957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610da8565b600101610cb3565b5050565b6000610abf610db9611959565b84610b718560056000610dca611959565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611d8e565b60115481565b6000610e0a611959565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e655760405162461bcd60e51b815260040180806020018281038252602c815260200180612bce602c913960400191505060405180910390fd5b6000610e7083611de8565b5050506001600160a01b038616600090815260036020526040902054939450610e9e93925084915050611e43565b6001600160a01b038316600090815260036020526040902055600a54610ec49082611e43565b600a55600b54610ed49084611d8e565b600b55505050565b600c5490565b610eea611959565b6000546001600160a01b03908116911614610f3a576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b610f5f81600201600a0a610f5984600954611e8590919063ffffffff16565b90611d45565b6017555050565b610f6e611959565b6000546001600160a01b03908116911614610fbe576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b600060095483111561103b576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161105b57600061104b84611de8565b50949650610ac395505050505050565b600061106684611de8565b50939650610ac395505050505050565b7f00000000000000000000000036c1e71c6f0e93e468b63b78e017504ca099fdd381565b601954600160a81b900460ff1681565b6110b2611959565b6000546001600160a01b03908116911614611102576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff1615611170576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156111ca576001600160a01b0381166000908152600360205260409020546111b090610b80565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b600d5490565b4290565b60025490565b6001600160a01b03811660009081526007602052604081205460ff161561129e57506001600160a01b038116600090815260046020526040902054610bdd565b6001600160a01b038216600090815260036020526040902054610ac390610b80565b6112c8611959565b6000546001600160a01b03908116911614611318576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020612b3c833981519152908390a3600080546001600160a01b0319169055565b60175481565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa15780601f10610a7657610100808354040283529160200191610aa1565b60185490565b6000610abf6113f7611959565b84610b7185604051806060016040528060258152602001612c1d6025913960056000611421611959565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611c8b565b6001546001600160a01b0316331461149b5760405162461bcd60e51b8152600401808060200182810382526023815260200180612bfa6023913960400191505060405180910390fd5b60025442116114f1576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020612b3c83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610abf61154d611959565b8484611a49565b6019546001600160a01b031681565b60135481565b611571611959565b6000546001600160a01b039081169116146115c1576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b60198054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b61161c611959565b6000546001600160a01b0390811691161461166c576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601355565b611679611959565b6000546001600160a01b039081169116146116c9576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020612b3c833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611742611959565b6000546001600160a01b03908116911614611792576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6117bb611959565b6000546001600160a01b0390811691161461180b576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601855565b611818611959565b6000546001600160a01b03908116911614611868576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b601555565b611875611959565b6000546001600160a01b039081169116146118c5576040805162461bcd60e51b81526020600482018190526024820152600080516020612b1c833981519152604482015290519081900360640190fd5b6001600160a01b03811661190a5760405162461bcd60e51b8152600401808060200182810382526026815260200180612a636026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020612b3c83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b3390565b6001600160a01b0383166119a25760405162461bcd60e51b8152600401808060200182810382526024815260200180612baa6024913960400191505060405180910390fd5b6001600160a01b0382166119e75760405162461bcd60e51b8152600401808060200182810382526022815260200180612a896022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611a8e5760405162461bcd60e51b8152600401808060200182810382526025815260200180612b856025913960400191505060405180910390fd5b6001600160a01b038216611ad35760405162461bcd60e51b8152600401808060200182810382526023815260200180612a166023913960400191505060405180910390fd5b60008111611b125760405162461bcd60e51b8152600401808060200182810382526029815260200180612b5c6029913960400191505060405180910390fd5b611b1a611374565b6001600160a01b0316836001600160a01b031614158015611b545750611b3e611374565b6001600160a01b0316826001600160a01b031614155b15611b9a57601754811115611b9a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612aab6028913960400191505060405180910390fd5b6000611ba53061125e565b60185490915081108015908190611bc65750601954600160a01b900460ff16155b8015611c0457507f00000000000000000000000036c1e71c6f0e93e468b63b78e017504ca099fdd36001600160a01b0316856001600160a01b031614155b8015611c195750601954600160a81b900460ff165b15611c2c576018549150611c2c82611ede565b6001600160a01b03851660009081526006602052604090205460019060ff1680611c6e57506001600160a01b03851660009081526006602052604090205460ff165b15611c77575060005b611c8386868684611f30565b505050505050565b60008184841115611d1a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cdf578181015183820152602001611cc7565b50505050905090810190601f168015611d0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611d2f6120a4565b9092509050611d3e8282611d45565b9250505090565b6000611d8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612207565b9392505050565b600082820183811015611d87576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000806000806000806000806000611e028c61226c565b93509350935093506000806000611e238f878787611e1e611d22565b6122c1565b919f509d509b509599509397509195509350505050919395979092949650565b6000611d8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c8b565b600082611e9457506000610ac3565b82820282848281611ea157fe5b0414611d875760405162461bcd60e51b8152600401808060200182810382526021815260200180612ad36021913960400191505060405180910390fd5b6019805460ff60a01b1916600160a01b179055611efa81612323565b600d54611f079047611d8e565b600d55601954611f20906001600160a01b031647612532565b506019805460ff60a01b19169055565b80611f3d57611f3d61256d565b6001600160a01b03841660009081526007602052604090205460ff168015611f7e57506001600160a01b03831660009081526007602052604090205460ff16155b15611f9357611f8e8484846125b6565b612091565b6001600160a01b03841660009081526007602052604090205460ff16158015611fd457506001600160a01b03831660009081526007602052604090205460ff165b15611fe457611f8e848484612704565b6001600160a01b03841660009081526007602052604090205460ff1615801561202657506001600160a01b03831660009081526007602052604090205460ff16155b1561203657611f8e8484846127d2565b6001600160a01b03841660009081526007602052604090205460ff16801561207657506001600160a01b03831660009081526007602052604090205460ff165b1561208657611f8e84848461283b565b6120918484846127d2565b8061209e5761209e6128d3565b50505050565b600a546009546000918291825b6008548110156121d5578260036000600884815481106120cd57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612132575081600460006008848154811061210b57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214957600a5460095494509450505050612203565b612189600360006008848154811061215d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e43565b92506121cb600460006008848154811061219f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e43565b91506001016120b1565b50600954600a546121e591611d45565b8210156121fd57600a54600954935093505050612203565b90925090505b9091565b600081836122565760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cdf578181015183820152602001611cc7565b50600083858161226257fe5b0495945050505050565b600080600080600061227d866128e7565b9050600061228a87612903565b905060006122978861291f565b905060006122b1826122ab85818d89611e43565b90611e43565b9993985091965094509092505050565b60008080806122d08986611e85565b905060006122de8987611e85565b905060006122ec8988611e85565b905060006122fa8989611e85565b9050600061230e826122ab85818989611e43565b949d949c50929a509298505050505050505050565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061235157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ca57600080fd5b505afa1580156123de573d6000803e3d6000fd5b505050506040513d60208110156123f457600080fd5b505181518290600190811061240557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612450307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461195d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156124f55781810151838201526020016124dd565b505050509050019650505050505050600060405180830381600087803b15801561251e57600080fd5b505af1158015611c83573d6000803e3d6000fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612568573d6000803e3d6000fd5b505050565b60115415801561257d5750601354155b80156125895750601554155b15612593576125b4565b60118054601255601380546014556015805460165560009283905590829055555b565b60006125c0611d22565b905060008060008060008060006125d689611de8565b965096509650965096509650965060006125f98984611e8590919063ffffffff16565b6001600160a01b038d1660009081526004602052604090205490915061261f908b611e43565b6001600160a01b038d1660009081526004602090815260408083209390935560039052205461264e9089611e43565b6001600160a01b03808e1660009081526003602052604080822093909355908d168152205461267d9088611d8e565b6001600160a01b038c1660009081526003602052604090205561269f8261293b565b6126ab868286866129c3565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3505050505050505050505050565b600061270e611d22565b9050600080600080600080600061272489611de8565b965096509650965096509650965060006127478984611e8590919063ffffffff16565b6001600160a01b038d1660009081526003602052604090205490915061276d9089611e43565b6001600160a01b03808e16600090815260036020908152604080832094909455918e168152600490915220546127a39086611d8e565b6001600160a01b038c1660009081526004602090815260408083209390935560039052205461267d9088611d8e565b60006127dc611d22565b905060008060008060008060006127f289611de8565b965096509650965096509650965060006128158984611e8590919063ffffffff16565b6001600160a01b038d1660009081526003602052604090205490915061264e9089611e43565b6000612845611d22565b9050600080600080600080600061285b89611de8565b9650965096509650965096509650600061287e8984611e8590919063ffffffff16565b6001600160a01b038d166000908152600460205260409020549091506128a4908b611e43565b6001600160a01b038d1660009081526004602090815260408083209390935560039052205461276d9089611e43565b601254601155601454601355601654601555565b6000610ac36064610f5960115485611e8590919063ffffffff16565b6000610ac36064610f5960135485611e8590919063ffffffff16565b6000610ac36064610f5960155485611e8590919063ffffffff16565b6000612945611d22565b905060006129538383611e85565b306000908152600360205260409020549091506129709082611d8e565b3060009081526003602090815260408083209390935560079052205460ff161561256857306000908152600460205260409020546129ae9084611d8e565b30600090815260046020526040902055505050565b6129dc836122ab86600a54611e4390919063ffffffff16565b600a55600b546129ec9083611d8e565b600b55600c546129fc9082611d8e565b600c55600954612a0c9082611e43565b6009555050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204123b3d58eb0971e8f1ae55c96f4e9468ea5b38cdb232583d985f98447fa9e5964736f6c634300060c0033

Deployed Bytecode Sourcemap

15414:18514:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32760:98;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32760:98:0;;:::i;:::-;;17895:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18807:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18807:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19928:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16770:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16770:51:0;;;;;;;;;;;;;;18172:95;;;;;;;;;;;;;:::i;18976:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18976:313:0;;;;;;;;;;;;;;;;;:::i;21232:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21232:253:0;;:::i;18081:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21948:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21948:479:0;-1:-1:-1;;;;;21948:479:0;;:::i;19297:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19297:218:0;;;;;;;;:::i;16240:26::-;;;;;;;;;;;;;:::i;20396:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20396:378:0;;:::i;20027:88::-;;;;;;;;;;;;;:::i;33114:212::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33114:212:0;;;;;;;:::i;32515:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32515:111:0;-1:-1:-1;;;;;32515:111:0;;:::i;20786:438::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20786:438:0;;;;;;;;;:::i;16828:38::-;;;;;;;;;;;;;:::i;16907:41::-;;;;;;;;;;;;;:::i;21493:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21493:447:0;-1:-1:-1;;;;;21493:447:0;;:::i;32380:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32380:123:0;-1:-1:-1;;;;;32380:123:0;;:::i;20127:133::-;;;;;;;;;;;;;:::i;6838:78::-;;;;;;;;;;;;;:::i;6634:90::-;;;;;;;;;;;;;:::i;18275:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18275:198:0;-1:-1:-1;;;;;18275:198:0;;:::i;6226:148::-;;;;;;;;;;;;;:::i;16525:47::-;;;;;;;;;;;;;:::i;19800:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19800:120:0;-1:-1:-1;;;;;19800:120:0;;:::i;6012:79::-;;;;;;;;;;;;;:::i;17986:87::-;;;;;;;;;;;;;:::i;20268:120::-;;;;;;;;;;;;;:::i;19523:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19523:269:0;;;;;;;;:::i;7150:293::-;;;;;;;;;;;;;:::i;18481:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18481:167:0;;;;;;;;:::i;16652:82::-;;;;;;;;;;;;;:::i;16327:27::-;;;;;;;;;;;;;:::i;33508:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33508:171:0;;;;:::i;32870:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32870:102:0;;:::i;6924:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6924:214:0;;:::i;18656:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18656:143:0;;;;;;;;;;:::i;32638:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32638:110:0;-1:-1:-1;;;;;32638:110:0;;:::i;33334:166::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33334:166:0;;:::i;32984:118::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32984:118:0;;:::i;6382:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6382:244:0;-1:-1:-1;;;;;6382:244:0;;:::i;16423:31::-;;;;;;;;;;;;;:::i;32760:98::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;32834:7:::1;:16:::0;32760:98::o;17895:83::-;17965:5;17958:12;;;;;;;;-1:-1:-1;;17958:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17932:13;;17958:12;;17965:5;;17958:12;;17965:5;17958:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17895:83;:::o;18807:161::-;18882:4;18899:39;18908:12;:10;:12::i;:::-;18922:7;18931:6;18899:8;:39::i;:::-;-1:-1:-1;18956:4:0;18807:161;;;;;:::o;19928:87::-;19997:10;;19928:87;:::o;16770:51::-;;;:::o;18172:95::-;18252:7;;18172:95;:::o;18976:313::-;19074:4;19091:36;19101:6;19109:9;19120:6;19091:9;:36::i;:::-;19138:121;19147:6;19155:12;:10;:12::i;:::-;19169:89;19207:6;19169:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19169:19:0;;;;;;:11;:19;;;;;;19189:12;:10;:12::i;:::-;-1:-1:-1;;;;;19169:33:0;;;;;;;;;;;;-1:-1:-1;19169:33:0;;;:89;:37;:89::i;:::-;19138:8;:121::i;:::-;-1:-1:-1;19277:4:0;18976:313;;;;;:::o;21232:253::-;21298:7;21337;;21326;:18;;21318:73;;;;-1:-1:-1;;;21318:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21402:19;21425:10;:8;:10::i;:::-;21402:33;-1:-1:-1;21453:24:0;:7;21402:33;21453:11;:24::i;:::-;21446:31;;;21232:253;;;;:::o;18081:83::-;18147:9;;;;18081:83;:::o;21948:479::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22030:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22022:60;;;::::0;;-1:-1:-1;;;22022:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22098:9;22093:327;22117:9;:16:::0;22113:20;::::1;22093:327;;;22175:7;-1:-1:-1::0;;;;;22159:23:0::1;:9;22169:1;22159:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22159:12:0::1;:23;22155:254;;;22218:9;22228:16:::0;;-1:-1:-1;;22228:20:0;;;22218:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22203:9:::1;:12:::0;;-1:-1:-1;;;;;22218:31:0;;::::1;::::0;22213:1;;22203:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22203:46:0::1;-1:-1:-1::0;;;;;22203:46:0;;::::1;;::::0;;22268:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22307:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22307:28:0::1;::::0;;22354:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22354:15:0;;;;;-1:-1:-1;;;;;;22354:15:0::1;::::0;;;;;22388:5:::1;;22155:254;22135:3;;22093:327;;;;21948:479:::0;:::o;19297:218::-;19385:4;19402:83;19411:12;:10;:12::i;:::-;19425:7;19434:50;19473:10;19434:11;:25;19446:12;:10;:12::i;:::-;-1:-1:-1;;;;;19434:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;19434:25:0;;;:34;;;;;;;;;;;:38;:50::i;16240:26::-;;;;:::o;20396:378::-;20448:14;20465:12;:10;:12::i;:::-;-1:-1:-1;;;;;20497:19:0;;;;;;:11;:19;;;;;;20448:29;;-1:-1:-1;20497:19:0;;20496:20;20488:77;;;;-1:-1:-1;;;20488:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20577:15;20602:19;20613:7;20602:10;:19::i;:::-;-1:-1:-1;;;;;;;;20650:15:0;;;;;;:7;:15;;;;;;20576:45;;-1:-1:-1;20650:28:0;;:15;-1:-1:-1;20576:45:0;;-1:-1:-1;;20650:19:0;:28::i;:::-;-1:-1:-1;;;;;20632:15:0;;;;;;:7;:15;;;;;:46;20699:7;;:20;;20711:7;20699:11;:20::i;:::-;20689:7;:30;20743:10;;:23;;20758:7;20743:14;:23::i;:::-;20730:10;:36;-1:-1:-1;;;20396:378:0:o;20027:88::-;20096:11;;20027:88;:::o;33114:212::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;33231:87:::1;33288:13;33305:1;33280:26;33275:2;:32;33231:25;33243:12;33231:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:87::i;:::-;33216:12;:102:::0;-1:-1:-1;;33114:212:0:o;32515:111::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32584:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;32584:34:0::1;32614:4;32584:34;::::0;;32515:111::o;20786:438::-;20876:7;20915;;20904;:18;;20896:62;;;;;-1:-1:-1;;;20896:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20974:17;20969:248;;21009:15;21034:19;21045:7;21034:10;:19::i;:::-;-1:-1:-1;21008:45:0;;-1:-1:-1;21068:14:0;;-1:-1:-1;;;;;;21068:14:0;20969:248;21117:23;21149:19;21160:7;21149:10;:19::i;:::-;-1:-1:-1;21115:53:0;;-1:-1:-1;21183:22:0;;-1:-1:-1;;;;;;21183:22:0;16828:38;;;:::o;16907:41::-;;;-1:-1:-1;;;16907:41:0;;;;;:::o;21493:447::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21690:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21689:21;21681:61;;;::::0;;-1:-1:-1;;;21681:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;21756:16:0;::::1;21775:1;21756:16:::0;;;:7:::1;:16;::::0;;;;;:20;21753:108:::1;;-1:-1:-1::0;;;;;21832:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21812:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21793:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21753:108:::1;-1:-1:-1::0;;;;;21871:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21871:27:0::1;21894:4;21871:27:::0;;::::1;::::0;;;21909:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21909:23:0::1;::::0;;::::1;::::0;;21493:447::o;32380:123::-;-1:-1:-1;;;;;32468:27:0;32444:4;32468:27;;;:18;:27;;;;;;;;;32380:123::o;20127:133::-;20237:15;;20127:133;:::o;6838:78::-;6905:3;6838:78;:::o;6634:90::-;6707:9;;6634:90;:::o;18275:198::-;-1:-1:-1;;;;;18365:20:0;;18341:7;18365:20;;;:11;:20;;;;;;;;18361:49;;;-1:-1:-1;;;;;;18394:16:0;;;;;;:7;:16;;;;;;18387:23;;18361:49;-1:-1:-1;;;;;18448:16:0;;;;;;:7;:16;;;;;;18428:37;;:19;:37::i;6226:148::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;6333:1:::1;6317:6:::0;;6296:40:::1;::::0;-1:-1:-1;;;;;6317:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6296:40:0;6333:1;;6296:40:::1;6364:1;6347:19:::0;;-1:-1:-1;;;;;;6347:19:0::1;::::0;;6226:148::o;16525:47::-;;;;:::o;19800:120::-;-1:-1:-1;;;;;19892:20:0;19868:4;19892:20;;;:11;:20;;;;;;;;;19800:120::o;6012:79::-;6050:7;6077:6;-1:-1:-1;;;;;6077:6:0;6012:79;:::o;17986:87::-;18058:7;18051:14;;;;;;;;-1:-1:-1;;18051:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18025:13;;18051:14;;18058:7;;18051:14;;18058:7;18051:14;;;;;;;;;;;;;;;;;;;;;;;;20268:120;20357:23;;20268:120;:::o;19523:269::-;19616:4;19633:129;19642:12;:10;:12::i;:::-;19656:7;19665:96;19704:15;19665:96;;;;;;;;;;;;;;;;;:11;:25;19677:12;:10;:12::i;:::-;-1:-1:-1;;;;;19665:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;19665:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;7150:293::-;7202:14;;-1:-1:-1;;;;;7202:14:0;7220:10;7202:28;7194:76;;;;-1:-1:-1;;;7194:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7295:9;;7289:3;:15;7281:60;;;;;-1:-1:-1;;;7281:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7386:14;;;7378:6;;7357:44;;-1:-1:-1;;;;;7386:14:0;;;;7378:6;;;;-1:-1:-1;;;;;;;;;;;7357:44:0;;7421:14;;;7412:23;;-1:-1:-1;;;;;;7412:23:0;-1:-1:-1;;;;;7421:14:0;;;7412:23;;;;;;7150:293::o;18481:167::-;18559:4;18576:42;18586:12;:10;:12::i;:::-;18600:9;18611:6;18576:9;:42::i;16652:82::-;;;-1:-1:-1;;;;;16652:82:0;;:::o;16327:27::-;;;;:::o;33508:171::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;33585:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;33585:32:0;::::1;-1:-1:-1::0;;;;33585:32:0;;::::1;::::0;;;::::1;::::0;;;33633:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;33508:171:::0;:::o;32870:102::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;32946:8:::1;:18:::0;32870:102::o;6924:214::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;7005:6:::1;::::0;;;6988:23;;-1:-1:-1;;;;;;6988:23:0;;::::1;-1:-1:-1::0;;;;;7005:6:0;::::1;6988:23;::::0;;;7022:19:::1;::::0;;7064:3:::1;:10:::0;::::1;7052:9;:22:::0;7090:40:::1;::::0;7005:6;;-1:-1:-1;;;;;;;;;;;7090:40:0;7005:6;;7090:40:::1;6924:214:::0;:::o;18656:143::-;-1:-1:-1;;;;;18764:18:0;;;18737:7;18764:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18656:143::o;32638:110::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32705:27:0::1;32735:5;32705:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32705:35:0::1;::::0;;32638:110::o;33334:166::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;33442:23:::1;:50:::0;33334:166::o;32984:118::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;33068:12:::1;:26:::0;32984:118::o;6382:244::-;6149:12;:10;:12::i;:::-;6139:6;;-1:-1:-1;;;;;6139:6:0;;;:22;;;6131:67;;;;;-1:-1:-1;;;6131:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6131:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;6471:22:0;::::1;6463:73;;;;-1:-1:-1::0;;;6463:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6573:6;::::0;;6552:38:::1;::::0;-1:-1:-1;;;;;6552:38:0;;::::1;::::0;6573:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6552:38:0;::::1;6601:6;:17:::0;;-1:-1:-1;;;;;;6601:17:0::1;-1:-1:-1::0;;;;;6601:17:0;;;::::1;::::0;;;::::1;::::0;;6382:244::o;16423:31::-;;;;:::o;300:106::-;388:10;300:106;:::o;22435:337::-;-1:-1:-1;;;;;22528:19:0;;22520:68;;;;-1:-1:-1;;;22520:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22607:21:0;;22599:68;;;;-1:-1:-1;;;22599:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22680:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22732:32;;;;;;;;;;;;;;;;;22435:337;;;:::o;22780:1233::-;-1:-1:-1;;;;;22902:18:0;;22894:68;;;;-1:-1:-1;;;22894:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22981:16:0;;22973:64;;;;-1:-1:-1;;;22973:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23065:1;23056:6;:10;23048:64;;;;-1:-1:-1;;;23048:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23134:7;:5;:7::i;:::-;-1:-1:-1;;;;;23126:15:0;:4;-1:-1:-1;;;;;23126:15:0;;;:32;;;;;23151:7;:5;:7::i;:::-;-1:-1:-1;;;;;23145:13:0;:2;-1:-1:-1;;;;;23145:13:0;;;23126:32;23123:125;;;23191:12;;23181:6;:22;;23173:75;;;;-1:-1:-1;;;23173:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23263:28;23294:24;23312:4;23294:9;:24::i;:::-;23384:23;;23263:55;;-1:-1:-1;23360:47:0;;;;;;;23436:57;;-1:-1:-1;23477:16:0;;-1:-1:-1;;;23477:16:0;;;;23476:17;23436:57;:95;;;;;23518:13;-1:-1:-1;;;;;23510:21:0;:4;-1:-1:-1;;;;;23510:21:0;;;23436:95;:133;;;;-1:-1:-1;23548:21:0;;-1:-1:-1;;;23548:21:0;;;;23436:133;23418:287;;;23619:23;;23596:46;;23657:36;23672:20;23657:14;:36::i;:::-;-1:-1:-1;;;;;23854:24:0;;23727:12;23854:24;;;:18;:24;;;;;;23742:4;;23854:24;;;:50;;-1:-1:-1;;;;;;23882:22:0;;;;;;:18;:22;;;;;;;;23854:50;23851:96;;;-1:-1:-1;23930:5:0;23851:96;23967:38;23982:4;23987:2;23990:6;23997:7;23967:14;:38::i;:::-;22780:1233;;;;;;:::o;1702:192::-;1788:7;1824:12;1816:6;;;;1808:29;;;;-1:-1:-1;;;1808:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1860:5:0;;;1702:192::o;30253:163::-;30294:7;30315:15;30332;30351:19;:17;:19::i;:::-;30314:56;;-1:-1:-1;30314:56:0;-1:-1:-1;30388:20:0;30314:56;;30388:11;:20::i;:::-;30381:27;;;;30253:163;:::o;2162:132::-;2220:7;2247:39;2251:1;2254;2247:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2240:46;2162:132;-1:-1:-1;;;2162:132:0:o;1369:181::-;1427:7;1459:5;;;1483:6;;;;1475:46;;;;;-1:-1:-1;;;1475:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;28859:457;28918:7;28927;28936;28945;28954;28963;28972;28993:23;29018:12;29032:13;29047:18;29069:20;29081:7;29069:11;:20::i;:::-;28992:97;;;;;;;;29101:15;29118:23;29143:12;29159:57;29171:7;29180:4;29186:5;29193:10;29205;:8;:10::i;:::-;29159:11;:57::i;:::-;29100:116;;-1:-1:-1;29100:116:0;-1:-1:-1;29100:116:0;-1:-1:-1;29267:15:0;;-1:-1:-1;29284:4:0;;-1:-1:-1;29290:5:0;;-1:-1:-1;29297:10:0;-1:-1:-1;;;;28859:457:0;;;;;;;;;:::o;1558:136::-;1616:7;1643:43;1647:1;1650;1643:43;;;;;;;;;;;;;;;;;:3;:43::i;1902:250::-;1960:7;1984:6;1980:47;;-1:-1:-1;2014:1:0;2007:8;;1980:47;2051:5;;;2055:1;2051;:5;:1;2075:5;;;;;:10;2067:56;;;;-1:-1:-1;;;2067:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24021:271;17245:16;:23;;-1:-1:-1;;;;17245:23:0;-1:-1:-1;;;17245:23:0;;;24106:38:::1;24123:20:::0;24106:16:::1;:38::i;:::-;24174:15;::::0;:42:::1;::::0;24194:21:::1;24174:19;:42::i;:::-;24156:15;:60:::0;24246:14:::1;::::0;24227:57:::1;::::0;-1:-1:-1;;;;;24246:14:0::1;24262:21;24227:18;:57::i;:::-;-1:-1:-1::0;17291:16:0;:24;;-1:-1:-1;;;;17291:24:0;;;24021:271::o;24915:834::-;25026:7;25022:40;;25048:14;:12;:14::i;:::-;-1:-1:-1;;;;;25087:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;25111:22:0;;;;;;:11;:22;;;;;;;;25110:23;25087:46;25083:597;;;25150:48;25172:6;25180:9;25191:6;25150:21;:48::i;:::-;25083:597;;;-1:-1:-1;;;;;25221:19:0;;;;;;:11;:19;;;;;;;;25220:20;:46;;;;-1:-1:-1;;;;;;25244:22:0;;;;;;:11;:22;;;;;;;;25220:46;25216:464;;;25283:46;25303:6;25311:9;25322:6;25283:19;:46::i;25216:464::-;-1:-1:-1;;;;;25352:19:0;;;;;;:11;:19;;;;;;;;25351:20;:47;;;;-1:-1:-1;;;;;;25376:22:0;;;;;;:11;:22;;;;;;;;25375:23;25351:47;25347:333;;;25415:44;25433:6;25441:9;25452:6;25415:17;:44::i;25347:333::-;-1:-1:-1;;;;;25481:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;25504:22:0;;;;;;:11;:22;;;;;;;;25481:45;25477:203;;;25543:48;25565:6;25573:9;25584:6;25543:21;:48::i;25477:203::-;25624:44;25642:6;25650:9;25661:6;25624:17;:44::i;:::-;25704:7;25700:41;;25726:15;:13;:15::i;:::-;24915:834;;;;:::o;30424:561::-;30521:7;;30557;;30474;;;;;30581:289;30605:9;:16;30601:20;;30581:289;;;30671:7;30647;:21;30655:9;30665:1;30655:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30655:12:0;30647:21;;;;;;;;;;;;;:31;;:66;;;30706:7;30682;:21;30690:9;30700:1;30690:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30690:12:0;30682:21;;;;;;;;;;;;;:31;30647:66;30643:97;;;30723:7;;30732;;30715:25;;;;;;;;;30643:97;30765:34;30777:7;:21;30785:9;30795:1;30785:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30785:12:0;30777:21;;;;;;;;;;;;;30765:7;;:11;:34::i;:::-;30755:44;;30824:34;30836:7;:21;30844:9;30854:1;30844:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30844:12:0;30836:21;;;;;;;;;;;;;30824:7;;:11;:34::i;:::-;30814:44;-1:-1:-1;30623:3:0;;30581:289;;;-1:-1:-1;30906:7:0;;30894;;:20;;:11;:20::i;:::-;30884:7;:30;30880:61;;;30924:7;;30933;;30916:25;;;;;;;;30880:61;30960:7;;-1:-1:-1;30969:7:0;-1:-1:-1;30424:561:0;;;:::o;2302:278::-;2388:7;2423:12;2416:5;2408:28;;;;-1:-1:-1;;;2408:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2447:9;2463:1;2459;:5;;;;;;;2302:278;-1:-1:-1;;;;;2302:278:0:o;29324:409::-;29384:7;29393;29402;29411;29431:12;29446:24;29462:7;29446:15;:24::i;:::-;29431:39;;29481:13;29497:25;29514:7;29497:16;:25::i;:::-;29481:41;;29533:18;29554:30;29576:7;29554:21;:30::i;:::-;29533:51;-1:-1:-1;29595:23:0;29621:44;29533:51;29621:28;29643:5;29621:28;:7;29633:4;29621:11;:17::i;:::-;:21;;:28::i;:44::-;29595:70;29701:4;;-1:-1:-1;29707:5:0;;-1:-1:-1;29707:5:0;-1:-1:-1;29324:409:0;;-1:-1:-1;;;29324:409:0:o;29741:504::-;29871:7;;;;29927:24;:7;29939:11;29927;:24::i;:::-;29909:42;-1:-1:-1;29962:12:0;29977:21;:4;29986:11;29977:8;:21::i;:::-;29962:36;-1:-1:-1;30009:13:0;30025:22;:5;30035:11;30025:9;:22::i;:::-;30009:38;-1:-1:-1;30058:18:0;30079:27;:10;30094:11;30079:14;:27::i;:::-;30058:48;-1:-1:-1;30117:23:0;30143:44;30058:48;30143:28;30165:5;30143:28;:7;30155:4;30143:11;:17::i;:44::-;30206:7;;;;-1:-1:-1;30232:4:0;;-1:-1:-1;29741:504:0;;-1:-1:-1;;;;;;;;;29741:504:0:o;24300:605::-;24450:16;;;24464:1;24450:16;;;24426:21;24450:16;;;;;24426:21;24450:16;;;;;;;;;;-1:-1:-1;24450:16:0;24426:40;;24495:4;24477;24482:1;24477:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;24477:23:0;;;-1:-1:-1;;;;;24477:23:0;;;;;24521:15;-1:-1:-1;;;;;24521:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24521:22:0;24511:7;;:4;;24516:1;;24511:7;;;;;;;;;;;:32;-1:-1:-1;;;;;24511:32:0;;;-1:-1:-1;;;;;24511:32:0;;;;;24556:62;24573:4;24588:15;24606:11;24556:8;:62::i;:::-;24657:15;-1:-1:-1;;;;;24657:66:0;;24738:11;24764:1;24808:4;24835;24871:15;24657:240;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24657:240:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33697:124;33787:26;;-1:-1:-1;;;;;33787:18:0;;;:26;;;;;33806:6;;33787:26;;;;33806:6;33787:18;:26;;;;;;;;;;;;;;;;;;;;;33697:124;;:::o;31875:324::-;31921:7;;:12;:29;;;;-1:-1:-1;31937:8:0;;:13;31921:29;:50;;;;-1:-1:-1;31954:12:0;;:17;31921:50;31918:62;;;31973:7;;31918:62;32018:7;;;32000:15;:25;32055:8;;;32036:16;:27;32097:12;;;32074:20;:35;-1:-1:-1;32130:11:0;;;;32152:12;;;;32175:16;31875:324;:::o;27107:689::-;27209:19;27232:10;:8;:10::i;:::-;27209:33;;27254:15;27271:23;27296:12;27310:23;27335:12;27349:13;27364:18;27386:19;27397:7;27386:10;:19::i;:::-;27253:152;;;;;;;;;;;;;;27416:13;27433:22;27443:11;27433:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;27484:15:0;;;;;;:7;:15;;;;;;27416:39;;-1:-1:-1;27484:28:0;;27504:7;27484:19;:28::i;:::-;-1:-1:-1;;;;;27466:15:0;;;;;;:7;:15;;;;;;;;:46;;;;27541:7;:15;;;;:28;;27561:7;27541:19;:28::i;:::-;-1:-1:-1;;;;;27523:15:0;;;;;;;:7;:15;;;;;;:46;;;;27601:18;;;;;;;:39;;27624:15;27601:22;:39::i;:::-;-1:-1:-1;;;;;27580:18:0;;;;;;:7;:18;;;;;:60;27654:26;27669:10;27654:14;:26::i;:::-;27691:37;27703:4;27709:5;27716:4;27722:5;27691:11;:37::i;:::-;27761:9;-1:-1:-1;;;;;27744:44:0;27753:6;-1:-1:-1;;;;;27744:44:0;;27772:15;27744:44;;;;;;;;;;;;;;;;;;27107:689;;;;;;;;;;;;:::o;26390:709::-;26490:19;26513:10;:8;:10::i;:::-;26490:33;;26535:15;26552:23;26577:12;26591:23;26616:12;26630:13;26645:18;26667:19;26678:7;26667:10;:19::i;:::-;26534:152;;;;;;;;;;;;;;26697:13;26714:22;26724:11;26714:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;26765:15:0;;;;;;:7;:15;;;;;;26697:39;;-1:-1:-1;26765:28:0;;26785:7;26765:19;:28::i;:::-;-1:-1:-1;;;;;26747:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;26825:18;;;;;:7;:18;;;;;:39;;26848:15;26825:22;:39::i;:::-;-1:-1:-1;;;;;26804:18:0;;;;;;:7;:18;;;;;;;;:60;;;;26896:7;:18;;;;:39;;26919:15;26896:22;:39::i;25757:625::-;25855:19;25878:10;:8;:10::i;:::-;25855:33;;25900:15;25917:23;25942:12;25956:23;25981:12;25995:13;26010:18;26032:19;26043:7;26032:10;:19::i;:::-;25899:152;;;;;;;;;;;;;;26062:13;26079:22;26089:11;26079:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;26130:15:0;;;;;;:7;:15;;;;;;26062:39;;-1:-1:-1;26130:28:0;;26150:7;26130:19;:28::i;27804:765::-;27906:19;27929:10;:8;:10::i;:::-;27906:33;;27951:15;27968:23;27993:12;28007:23;28032:12;28046:13;28061:18;28083:19;28094:7;28083:10;:19::i;:::-;27950:152;;;;;;;;;;;;;;28113:13;28130:22;28140:11;28130:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;28181:15:0;;;;;;:7;:15;;;;;;28113:39;;-1:-1:-1;28181:28:0;;28201:7;28181:19;:28::i;:::-;-1:-1:-1;;;;;28163:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28238:7;:15;;;;:28;;28258:7;28238:19;:28::i;32211:161::-;32265:15;;32255:7;:25;32302:16;;32291:8;:27;32344:20;;32329:12;:35;32211:161::o;31364:154::-;31428:7;31455:55;31494:5;31455:20;31467:7;;31455;:11;;:20;;;;:::i;31530:156::-;31595:7;31622:56;31662:5;31622:21;31634:8;;31622:7;:11;;:21;;;;:::i;31698:165::-;31768:7;31795:60;31839:5;31795:25;31807:12;;31795:7;:11;;:25;;;;:::i;30997:355::-;31060:19;31083:10;:8;:10::i;:::-;31060:33;-1:-1:-1;31104:18:0;31125:27;:10;31060:33;31125:14;:27::i;:::-;31204:4;31188:22;;;;:7;:22;;;;;;31104:48;;-1:-1:-1;31188:38:0;;31104:48;31188:26;:38::i;:::-;31179:4;31163:22;;;;:7;:22;;;;;;;;:63;;;;31240:11;:26;;;;;;31237:107;;;31322:4;31306:22;;;;:7;:22;;;;;;:38;;31333:10;31306:26;:38::i;:::-;31297:4;31281:22;;;;:7;:22;;;;;:63;30997:355;;;:::o;28577:274::-;28685:28;28707:5;28685:17;28697:4;28685:7;;:11;;:17;;;;:::i;:28::-;28675:7;:38;28737:10;;:20;;28752:4;28737:14;:20::i;:::-;28724:10;:33;28782:11;;:22;;28798:5;28782:15;:22::i;:::-;28768:11;:36;28825:7;;:18;;28837:5;28825:11;:18::i;:::-;28815:7;:28;-1:-1:-1;;;;28577:274:0:o

Swarm Source

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