ETH Price: $3,262.68 (-2.16%)

Token

American Floki (USFLOK)
 

Overview

Max Total Supply

1,000,000,000 USFLOK

Holders

22

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,130,996.884479344866227793 USFLOK

Value
$0.00
0x3fde2d64e500cc61a4927a41098bc71dde0bd1b1
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:
AmericanFloki

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-12
*/

/* 

  |* * * * * * * * * * OOOOOOOOOOOOOOOOOOOOOOOOO|
  | * * * * * * * * *  :::::::::::::::::::::::::|
  |* * * * * * * * * * OOOOOOOOOOOOOOOOOOOOOOOOO|
  | * * * * * * * * *  :::::::::::::::::::::::::|
  |* * * * * * * * * * OOOOOOOOOOOOOOOOOOOOOOOOO|
  | * * * * * * * * *  ::::::::::::::::::::;::::|
  |* * * * * * * * * * OOOOOOOOOOOOOOOOOOOOOOOOO|
  |:::::::::::::::::::::::::::::::::::::::::::::|
  |OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO|
  |:::::::::::::::::::::::::::::::::::::::::::::|
  |OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO|
  |:::::::::::::::::::::::::::::::::::::::::::::|
  |OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO|

*/

//https://t.me/AmericanFloki
//https://x.com/American_Floki
//https://americanfloki.vip/


// SPDX-License-Identifier: UNLICENSED


pragma solidity 0.8.26;

interface ERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}



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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

contract Ownable is Context {
    address public _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        authorizations[_owner] = true;
        emit OwnershipTransferred(address(0), msgSender);
    }
    mapping (address => bool) internal authorizations;

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

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

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

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

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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;
}

interface InterfaceLP {
    function sync() external;
}


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

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

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

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

contract AmericanFloki is Ownable, ERC20 {
    using SafeMath for uint256;

    address WETH;
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;
    

    string constant _name = "American Floki";
    string constant _symbol = "USFLOK";
    uint8 constant _decimals = 18; 


    event AutoLiquify(uint256 amountETH, uint256 amountTokens);
    event EditTax(uint8 Buy, uint8 Sell, uint8 Transfer);
    event setFeeExempt(address Wallet, bool Exempt);
    event setTXExempt(address Wallet, bool Exempt);
    event clearERC(uint256 amount);
    event removeToken(address TokenAddressCleared, uint256 Amount);
    event set_Wallets(address marketingFeeReceiver, address utilityFeeReceiver,address stakingfeeReceiver,address projectFeeReceiver);
    event set_MaxHolding(uint256 maxWallet);
    event set_TXLimit(uint256 maxTX);
    event set_ContractSells(uint256 Amount, bool Enabled);
  
    uint256 _totalSupply =  1000000000 * 10**_decimals; 

    uint256 public _maxTxAmount = _totalSupply.mul(15).div(1000);
    uint256 public _maxWalletToken = _totalSupply.mul(15).div(1000);

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;  
    mapping (address => bool) isfeeexempt;
    mapping (address => bool) istxLimitExempt;
    mapping (address => bool) isTimelockExempt;

    uint256 private liquidityFee    = 1;
    uint256 private marketingFee    = 3;
    uint256 private projectFee      = 0;
    uint256 private utilityFee      = 1; 
    uint256 private stakingfee      = 0;
    uint256 public totalFee         = utilityFee + marketingFee + liquidityFee + projectFee + stakingfee;
    uint256 private feeDenominator  = 100;

    uint256 sellmultiplier = 100;
    uint256 buymultiplier = 100;
    uint256 wallettowalletmultiplier = 100; 

    address private uniLPReceiver;
    address private marketingFeeReceiver;
    address private projectFeeReceiver;
    address private utilityFeeReceiver;
    address private stakingfeeReceiver;

    uint256 setproportion = 30;
    uint256 setproportionDenominator = 100;
    
    IDEXRouter public router;
    InterfaceLP private pairContract;
    address public pair;
    
    bool public TradingOpen = false; 

    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 5;
    mapping (address => uint) private cooldownTimer;
   
    bool public contractSellEnabled = true;
    uint256 public contractsellthreshold = _totalSupply * 20 / 1000; 
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    
    constructor () {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        pairContract = InterfaceLP(pair);
       
        
        _allowances[address(this)][address(router)] = type(uint256).max;

        isfeeexempt[msg.sender] = true;            
        istxLimitExempt[msg.sender] = true;
        istxLimitExempt[pair] = true;
        istxLimitExempt[marketingFeeReceiver] = true;
        istxLimitExempt[address(this)] = true;
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;
        
        uniLPReceiver = msg.sender;
        marketingFeeReceiver = 0xBC22a69346e94136eB644C4D33Ef08DdB46EC4c4;
        projectFeeReceiver = msg.sender;
        utilityFeeReceiver = msg.sender;
        stakingfeeReceiver = DEAD; 

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);

    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) {return owner();}
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

        function setMaxWallet(uint256 maxWallPercent) external onlyOwner {
         require(maxWallPercent >= 1); 
        _maxWalletToken = (_totalSupply * maxWallPercent ) / 1000;
        emit set_MaxHolding(_maxWalletToken);
                
    }

     
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

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

    function removeTax () external onlyOwner {
            buymultiplier = 0;
            sellmultiplier = 0;
            wallettowalletmultiplier = 0;
            contractsellthreshold = _totalSupply * 1 / 100;
            
    }
      
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(TradingOpen,"Trading not open yet");
        
          }
        
               
        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != stakingfeeReceiver && recipient != marketingFeeReceiver && !istxLimitExempt[recipient]){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}

        if (sender == pair && buyCooldownEnabled && !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait between buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        checkTxLimit(sender, amount);  

        if(shouldSwapBack()){ swapBack(); }
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = (isfeeexempt[sender] || isfeeexempt[recipient]) ? amount : takeFee(sender, amount, recipient);
        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
 
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || istxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isfeeexempt[sender];
    }

    function takeFee(address sender, uint256 amount, address recipient) internal returns (uint256) {
        
        uint256 percent = wallettowalletmultiplier;
        if(recipient == pair) {
            percent = sellmultiplier;
        } else if(sender == pair) {
            percent = buymultiplier;
        }

        uint256 feeAmount = amount.mul(totalFee).mul(percent).div(feeDenominator * 100);
        uint256 burnTokens = feeAmount.mul(stakingfee).div(totalFee);
        uint256 contractTokens = feeAmount.sub(burnTokens);
        _balances[address(this)] = _balances[address(this)].add(contractTokens);
        _balances[stakingfeeReceiver] = _balances[stakingfeeReceiver].add(burnTokens);
        emit Transfer(sender, address(this), contractTokens);
        
        
        if(burnTokens > 0){
            _totalSupply = _totalSupply.sub(burnTokens);
            emit Transfer(sender, ZERO, burnTokens);  
        
        }

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && contractSellEnabled
        && _balances[address(this)] >= contractsellthreshold;
    }

  
     function clearStuckEthereum() external { 
             payable(projectFeeReceiver).transfer(address(this).balance);
            
    }

   function clearForeignERCToken(address tokenAddress, uint256 tokens) external returns (bool success) {
            require(tokenAddress != address(this), "tokenAddress can not be the native token");
             if(tokens == 0){
            tokens = ERC20(tokenAddress).balanceOf(address(this));
        }
        emit removeToken(tokenAddress, tokens);
        return ERC20(tokenAddress).transfer(uniLPReceiver, tokens);
    }

    function setMultipliers(uint256 _percentonbuy, uint256 _percentonsell, uint256 _wallettransfer) external onlyOwner {
        sellmultiplier = _percentonsell;
        buymultiplier = _percentonbuy;
        wallettowalletmultiplier = _wallettransfer;    
          
    }
       
    function enableTrading() public onlyOwner {
        TradingOpen = true;
        buymultiplier = 500;
        sellmultiplier = 700;
        wallettowalletmultiplier = 1000;
                              
    }

               
    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = checkproportion(setproportion, setproportionDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = contractsellthreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = contractsellthreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
        uint256 amountETHutility = amountETH.mul(utilityFee).div(totalETHFee);
        uint256 amountETHdev = amountETH.mul(projectFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing}("");
        (tmpSuccess,) = payable(projectFeeReceiver).call{value: amountETHdev}("");
        (tmpSuccess,) = payable(utilityFeeReceiver).call{value: amountETHutility}("");
        
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                uniLPReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }
    
  
    function set_fees() internal {
      
        emit EditTax( uint8(totalFee.mul(buymultiplier).div(100)),
            uint8(totalFee.mul(sellmultiplier).div(100)),
            uint8(totalFee.mul(wallettowalletmultiplier).div(100))
            );
    }
    
    function setFees(uint256 _liquidityFee, uint256 _utilityFee, uint256 _marketingFee, uint256 _projectFee, uint256 _stakingfee, uint256 _feeDenominator) external onlyOwner {
        liquidityFee = _liquidityFee;
        utilityFee = _utilityFee;
        marketingFee = _marketingFee;
        projectFee = _projectFee;
        stakingfee = _stakingfee;
        totalFee = _liquidityFee.add(_utilityFee).add(_marketingFee).add(_projectFee).add(_stakingfee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator / 4, "Fees can not be more than 25%"); 
        set_fees();
    }

   
    function setFeeReceivers(address _uniLPReceiver, address _marketingFeeReceiver, address _projectFeeReceiver, address _stakingfeeReceiver, address _utilityFeeReceiver) external onlyOwner {
        uniLPReceiver = _uniLPReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        projectFeeReceiver = _projectFeeReceiver;
        stakingfeeReceiver = _stakingfeeReceiver;
        utilityFeeReceiver = _utilityFeeReceiver;

        emit set_Wallets(marketingFeeReceiver, utilityFeeReceiver, stakingfeeReceiver, projectFeeReceiver);
    }


    function multiTransfer(address from, address[] calldata addresses, uint256[] calldata tokens) external {
    require(istxLimitExempt[msg.sender]);
    require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses");
    require(addresses.length == tokens.length,"Mismatch between Address and token count");

    uint256 airdrop = 0;

    for(uint i=0; i < addresses.length; i++){
        airdrop = airdrop + tokens[i];
    }

    require(balanceOf(from) >= airdrop, "Not enough tokens in wallet");

    for(uint i=0; i < addresses.length; i++){
        _basicTransfer(from,addresses[i],tokens[i]);
    }
}

    function setContractsellmultipliers(bool _enabled, uint256 _amount) external onlyOwner {
        contractSellEnabled = _enabled;
        contractsellthreshold = _amount;
        emit set_ContractSells(contractsellthreshold, contractSellEnabled);
    }

    function checkproportion(uint256 ratio, uint256 accuracy) public view returns (bool) {
        return showthreshold(accuracy) > ratio;
    }

    function showthreshold(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(showSupply());
    }
    
    function showSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"Buy","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"Sell","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"Transfer","type":"uint8"}],"name":"EditTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"clearERC","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"TokenAddressCleared","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"removeToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Exempt","type":"bool"}],"name":"setFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Exempt","type":"bool"}],"name":"setTXExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"Enabled","type":"bool"}],"name":"set_ContractSells","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"set_MaxHolding","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTX","type":"uint256"}],"name":"set_TXLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingFeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"utilityFeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"stakingfeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"projectFeeReceiver","type":"address"}],"name":"set_Wallets","type":"event"},{"inputs":[],"name":"TradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","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":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"checkproportion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"clearForeignERCToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckEthereum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSellEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractsellthreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setContractsellmultipliers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniLPReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_projectFeeReceiver","type":"address"},{"internalType":"address","name":"_stakingfeeReceiver","type":"address"},{"internalType":"address","name":"_utilityFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_utilityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"},{"internalType":"uint256","name":"_stakingfee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentonbuy","type":"uint256"},{"internalType":"uint256","name":"_percentonsell","type":"uint256"},{"internalType":"uint256","name":"_wallettransfer","type":"uint256"}],"name":"setMultipliers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"showthreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","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"},{"stateMutability":"payable","type":"receive"}]

60806040526100106012600a61066d565b61001e90633b9aca0061067b565b600381905561003c906103e89061003690600f61046e565b906104fa565b600455600354610055906103e89061003690600f61046e565b6005556001600b556003600c555f600d556001600e555f600f55600f54600d54600b54600c54600e546100889190610692565b6100929190610692565b61009c9190610692565b6100a69190610692565b60105560646011819055601281905560138190556014818155601e601a819055601b92909255815462ffffff60a01b191661050160a81b179091556020805460ff191660011790556003546103e8916100ff919061067b565b61010991906106a5565b602155348015610117575f80fd5b505f80546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa1580156101d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f791906106c4565b600280546001600160a01b0319166001600160a01b03928316179055601c546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa158015610253573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027791906106c4565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303815f875af11580156102c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e991906106c4565b601e80546001600160a01b039283166001600160a01b031991821681178355601d805483169091179055305f818152600760209081526040808320601c548816845282528083205f1990553380845260088352818420805460ff199081166001908117909255600985528386208054821683179055975489168552828520805489168217905560168054909916855282852080548916821790558585528285208054891682179055818552600a845282852080548916821790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80548916821790559484528184208054909716909417909555601580548516841790558554841673bc22a69346e94136eb644c4d33ef08ddb46ec4c41790955560178054841683179055601880548416831790556019805490931661dead179092556003548183526006855283832081905592519283529290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361071f565b5f825f0361047d57505f6104f4565b5f610488838561067b565b90508261049585836106a5565b146104f15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b5f6104f183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061054160201b60201c565b5f81836105615760405162461bcd60e51b81526004016104e891906106ea565b505f61056d84866106a5565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156105c5578085048111156105a9576105a9610576565b60018416156105b757908102905b60019390931c92800261058e565b935093915050565b5f826105db575060016104f4565b816105e757505f6104f4565b81600181146105fd576002811461060757610623565b60019150506104f4565b60ff84111561061857610618610576565b50506001821b6104f4565b5060208310610133831016604e8410600b8410161715610646575081810a6104f4565b6106525f19848461058a565b805f190482111561066557610665610576565b029392505050565b5f6104f160ff8416836105cd565b80820281158282048414176104f4576104f4610576565b808201808211156104f4576104f4610576565b5f826106bf57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156106d4575f80fd5b81516001600160a01b03811681146104f1575f80fd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6125488061072c5f395ff3fe608060405260043610610236575f3560e01c80636ce46bc3116101295780638da5cb5b116100a8578063b53d8d291161006d578063b53d8d2914610689578063cf4d094b146106a8578063dd62ed3e146106c7578063f2fde38b1461070b578063f887ea401461072a575f80fd5b80638da5cb5b146105e357806395d89b41146105ff578063a8aa1b311461062d578063a9059cbb1461064c578063b2bdfa7b1461066b575f80fd5b80637d1db4a5116100ee5780637d1db4a5146105575780637fd4fc9c1461056c57806386f6c3c114610580578063893d20e81461059f5780638a8c523c146105cf575f80fd5b80636ce46bc3146104bb57806370a08231146104da578063715018a61461050e578063722b62ad1461052257806378109e5414610542575f80fd5b80632f5f2572116101b557806350db71fb1161017a57806350db71fb1461042a5780635526566914610449578063571ac8b01461045d5780635d0044ca1461047c578063617fe0ed1461049b575f80fd5b80632f5f2572146103a8578063308302d3146103bc578063313ce567146103d157806337c73d3d146103f257806348b98ef514610411575f80fd5b80631ca0a28d116101fb5780631ca0a28d146103175780631df4ccfc1461033657806323b872dd1461034b5780632d5945671461036a5780632e6ac10614610389575f80fd5b806306fdde031461024157806308fd3d0514610289578063095ea7b3146102b957806318160ddd146102d857806318abb635146102f6575f80fd5b3661023d57005b5f80fd5b34801561024c575f80fd5b5060408051808201909152600e81526d416d65726963616e20466c6f6b6960901b60208201525b6040516102809190612019565b60405180910390f35b348015610294575f80fd5b50601e546102a990600160a01b900460ff1681565b6040519015158152602001610280565b3480156102c4575f80fd5b506102a96102d3366004612069565b610749565b3480156102e3575f80fd5b506003545b604051908152602001610280565b348015610301575f80fd5b50610315610310366004612091565b6107b5565b005b348015610322575f80fd5b5061031561033136600461213a565b610895565b348015610341575f80fd5b506102e860105481565b348015610356575f80fd5b506102a96103653660046121ba565b610a82565b348015610375575f80fd5b50610315610384366004612201565b610b40565b348015610394575f80fd5b506102a96103a336600461223d565b610ba0565b3480156103b3575f80fd5b50610315610bb3565b3480156103c7575f80fd5b506102e860215481565b3480156103dc575f80fd5b5060125b60405160ff9091168152602001610280565b3480156103fd575f80fd5b5061031561040c36600461225d565b610c0a565b34801561041c575f80fd5b506020546102a99060ff1681565b348015610435575f80fd5b50610315610444366004612279565b610c8c565b348015610454575f80fd5b506102e8610cdf565b348015610468575f80fd5b506102a96104773660046122a3565b610d4f565b348015610487575f80fd5b506103156104963660046122bc565b610d5b565b3480156104a6575f80fd5b50601e546102a990600160a81b900460ff1681565b3480156104c6575f80fd5b506103156104d53660046122d3565b610de7565b3480156104e5575f80fd5b506102e86104f43660046122a3565b6001600160a01b03165f9081526006602052604090205490565b348015610519575f80fd5b50610315610e21565b34801561052d575f80fd5b50601e546103e090600160b01b900460ff1681565b34801561054d575f80fd5b506102e860055481565b348015610562575f80fd5b506102e860045481565b348015610577575f80fd5b50610315610e92565b34801561058b575f80fd5b5061031561059a3660046122fc565b610ecb565b3480156105aa575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610280565b3480156105da575f80fd5b50610315610f98565b3480156105ee575f80fd5b505f546001600160a01b03166105b7565b34801561060a575f80fd5b506040805180820190915260068152655553464c4f4b60d01b6020820152610273565b348015610638575f80fd5b50601e546105b7906001600160a01b031681565b348015610657575f80fd5b506102a9610666366004612069565b610fe8565b348015610676575f80fd5b505f546105b7906001600160a01b031681565b348015610694575f80fd5b506102a96106a3366004612069565b610ff4565b3480156106b3575f80fd5b506102e86106c23660046122bc565b611184565b3480156106d2575f80fd5b506102e86106e136600461233b565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b348015610716575f80fd5b506103156107253660046122a3565b6111c9565b348015610735575f80fd5b50601c546105b7906001600160a01b031681565b335f8181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107a39086815260200190565b60405180910390a35060015b92915050565b5f546001600160a01b031633146107e75760405162461bcd60e51b81526004016107de9061236c565b60405180910390fd5b601580546001600160a01b038781166001600160a01b031992831617909255601680548784169083168117909155601780548785169084168117909155601980548786169085168117909155601880549587169590941685179093556040805192835260208301949094529281019190915260608101919091527fd57a6cc80e12ea4e450dcae918d555702c8ad353993d8e23acc138382c6c7f649060800160405180910390a15050505050565b335f9081526009602052604090205460ff166108af575f80fd5b6101f583106109165760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084016107de565b8281146109765760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b60648201526084016107de565b5f805b848110156109af57838382818110610993576109936123a1565b90506020020135826109a591906123c9565b9150600101610979565b50806109cf876001600160a01b03165f9081526006602052604090205490565b1015610a1d5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c6574000000000060448201526064016107de565b5f5b84811015610a7957610a7087878784818110610a3d57610a3d6123a1565b9050602002016020810190610a5291906122a3565b868685818110610a6457610a646123a1565b905060200201356112b0565b50600101610a1f565b50505050505050565b6001600160a01b0383165f9081526007602090815260408083203384529091528120545f1914610b2b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152600782528381203382529091529190912054610b07918490611380565b6001600160a01b0385165f9081526007602090815260408083203384529091529020555b610b368484846113b8565b90505b9392505050565b5f546001600160a01b03163314610b695760405162461bcd60e51b81526004016107de9061236c565b601e805461ffff60a81b1916600160a81b9315159390930260ff60b01b191692909217600160b01b60ff9290921691909102179055565b5f82610bab83611184565b119392505050565b5f546001600160a01b03163314610bdc5760405162461bcd60e51b81526004016107de9061236c565b5f60138190556012819055601455600354606490610bfb9060016123dc565b610c0591906123f3565b602155565b5f546001600160a01b03163314610c335760405162461bcd60e51b81526004016107de9061236c565b6020805460ff1916831515908117825560218390556040805184815260ff9092161515928201929092527f392f1d6148f51babec2021798dc4b53898c421ad141fcd1babe8ac1bff909f79910160405180910390a15050565b5f546001600160a01b03163314610cb55760405162461bcd60e51b81526004016107de9061236c565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead5f9081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22546003549192610d4a929091610d4491906117f4565b906117f4565b905090565b5f6107af825f19610749565b5f546001600160a01b03163314610d845760405162461bcd60e51b81526004016107de9061236c565b6001811015610d91575f80fd5b6103e881600354610da291906123dc565b610dac91906123f3565b60058190556040519081527f494fd99b13a8a3670e91a40af1b1ffec73968d010de2a178aa17556d7d353f339060200160405180910390a150565b5f546001600160a01b03163314610e105760405162461bcd60e51b81526004016107de9061236c565b601291909155601391909155601455565b5f546001600160a01b03163314610e4a5760405162461bcd60e51b81526004016107de9061236c565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b6017546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610ec8573d5f803e3d5ffd5b50565b5f546001600160a01b03163314610ef45760405162461bcd60e51b81526004016107de9061236c565b600b869055600e859055600c849055600d839055600f829055610f2582610f1f858188818c8c611835565b90611835565b6010556011819055610f386004826123f3565b60105410610f885760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e2032352500000060448201526064016107de565b610f90611893565b505050505050565b5f546001600160a01b03163314610fc15760405162461bcd60e51b81526004016107de9061236c565b601e805460ff60a01b1916600160a01b1790556101f46013556102bc6012556103e8601455565b5f610b393384846113b8565b5f306001600160a01b0384160361105e5760405162461bcd60e51b815260206004820152602860248201527f746f6b656e416464726573732063616e206e6f7420626520746865206e6174696044820152673b32903a37b5b2b760c11b60648201526084016107de565b815f036110ce576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156110a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110cb9190612412565b91505b604080516001600160a01b0385168152602081018490527f13baf1e647d68ca9451d9fc896ee1c75b4337b7804451971e549ca6d1e24287d910160405180910390a160155460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303815f875af1158015611160573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b399190612429565b5f6107af611190610cdf565b601e546001600160a01b03165f908152600660205260409020546111c3906111bc906002905b9061192e565b859061192e565b906119ac565b5f546001600160a01b031633146111f25760405162461bcd60e51b81526004016107de9061236c565b6001600160a01b0381166112575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107de565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600690915291822054611300918490611380565b6001600160a01b038086165f90815260066020526040808220939093559085168152205461132e9083611835565b6001600160a01b038085165f8181526006602052604090819020939093559151908616905f805160206124f38339815191529061136e9086815260200190565b60405180910390a35060019392505050565b5f81848411156113a35760405162461bcd60e51b81526004016107de9190612019565b505f6113af8486612444565b95945050505050565b6022545f9060ff16156113d7576113d08484846112b0565b9050610b39565b6001600160a01b0384165f9081526001602052604090205460ff1615801561141757506001600160a01b0383165f9081526001602052604090205460ff16155b1561146c57601e54600160a01b900460ff1661146c5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107de565b6001600160a01b0384165f9081526001602052604090205460ff1615801561149d57506001600160a01b0383163014155b80156114b457506001600160a01b03831661dead14155b80156114ce5750601e546001600160a01b03848116911614155b80156114e857506019546001600160a01b03848116911614155b801561150257506016546001600160a01b03848116911614155b801561152657506001600160a01b0383165f9081526009602052604090205460ff16155b156115c6576001600160a01b0383165f9081526006602052604090205460055461155084836123c9565b11156115c45760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107de565b505b601e546001600160a01b0385811691161480156115ec5750601e54600160a81b900460ff165b801561161057506001600160a01b0383165f908152600a602052604090205460ff16155b156116ab576001600160a01b0383165f908152601f6020526040902054421161167b5760405162461bcd60e51b815260206004820152601860248201527f506c656173652077616974206265747765656e2062757973000000000000000060448201526064016107de565b601e5461169290600160b01b900460ff16426123c9565b6001600160a01b0384165f908152601f60205260409020555b6116b584836119ed565b6116bd611a59565b156116ca576116ca611aa6565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f9081526006909152919091205461171b918490611380565b6001600160a01b0385165f90815260066020908152604080832093909355600890529081205460ff168061176657506001600160a01b0384165f9081526008602052604090205460ff165b61177a57611775858486611e6e565b61177c565b825b6001600160a01b0385165f908152600660205260409020549091506117a19082611835565b6001600160a01b038086165f8181526006602052604090819020939093559151908716905f805160206124f3833981519152906117e19085815260200190565b60405180910390a3506001949350505050565b5f610b3983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611380565b5f8061184183856123c9565b905083811015610b395760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107de565b7f8cc651ceed4360bdb07d4dfc17daa4a6fa17092a313d2464a582a73e9b9328006118d060646111c360135460105461192e90919063ffffffff16565b6118ec60646111c360125460105461192e90919063ffffffff16565b61190860646111c360145460105461192e90919063ffffffff16565b6040805160ff9485168152928416602084015292168183015290519081900360600190a1565b5f825f0361193d57505f6107af565b5f61194883856123dc565b90508261195585836123f3565b14610b395760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107de565b5f610b3983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fed565b60045481111580611a1557506001600160a01b0382165f9081526009602052604090205460ff165b611a555760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107de565b5050565b601e545f906001600160a01b03163314801590611a79575060225460ff16155b8015611a87575060205460ff165b8015610d4a575050602154305f90815260066020526040902054101590565b6022805460ff19166001179055601a54601b545f91611ac491610ba0565b611ad057600b54611ad2565b5f5b90505f611af560026111c36010546111c38660215461192e90919063ffffffff16565b90505f611b0d826021546117f490919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f81518110611b4557611b456123a1565b6001600160a01b039283166020918202929092010152600254825191169082906001908110611b7657611b766123a1565b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b81524792919091169063791ac94790611bbf9086905f90879030904290600401612457565b5f604051808303815f87803b158015611bd6575f80fd5b505af1158015611be8573d5f803e3d5ffd5b505050505f611c0082476117f490919063ffffffff16565b90505f611c1a611c118860026119ac565b601054906117f4565b90505f611c2e60026111c38481878d61192e565b90505f611c4a836111c3600c548761192e90919063ffffffff16565b90505f611c66846111c3600e548861192e90919063ffffffff16565b90505f611c82856111c3600d548961192e90919063ffffffff16565b6016546040519192505f916001600160a01b039091169085908381818185875af1925050503d805f8114611cd1576040519150601f19603f3d011682016040523d82523d5f602084013e611cd6565b606091505b50506017546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611d23576040519150601f19603f3d011682016040523d82523d5f602084013e611d28565b606091505b50506018546040519192506001600160a01b03169084905f81818185875af1925050503d805f8114611d75576040519150601f19603f3d011682016040523d82523d5f602084013e611d7a565b606091505b505f9250508b159050611e5657601c5460155460405163f305d71960e01b8152306004820152602481018e90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611df4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e1991906124c7565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff1916905550505050505050505050565b601454601e545f91906001600160a01b0390811690841603611e935750601254611eae565b601e546001600160a01b0390811690861603611eae57506013545b5f611eda6011546064611ec191906123dc565b6111c3846111b66010548a61192e90919063ffffffff16565b90505f611ef86010546111c3600f548561192e90919063ffffffff16565b90505f611f0583836117f4565b305f90815260066020526040902054909150611f219082611835565b305f90815260066020526040808220929092556019546001600160a01b031681522054611f4e9083611835565b6019546001600160a01b039081165f9081526006602090815260409182902093909355518381523092918b16915f805160206124f3833981519152910160405180910390a38115611fd757600354611fa690836117f4565b6003556040518281525f906001600160a01b038a16905f805160206124f38339815191529060200160405180910390a35b611fe187846117f4565b98975050505050505050565b5f818361200d5760405162461bcd60e51b81526004016107de9190612019565b505f6113af84866123f3565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114612064575f80fd5b919050565b5f806040838503121561207a575f80fd5b6120838361204e565b946020939093013593505050565b5f805f805f60a086880312156120a5575f80fd5b6120ae8661204e565b94506120bc6020870161204e565b93506120ca6040870161204e565b92506120d86060870161204e565b91506120e66080870161204e565b90509295509295909350565b5f8083601f840112612102575f80fd5b50813567ffffffffffffffff811115612119575f80fd5b6020830191508360208260051b8501011115612133575f80fd5b9250929050565b5f805f805f6060868803121561214e575f80fd5b6121578661204e565b9450602086013567ffffffffffffffff811115612172575f80fd5b61217e888289016120f2565b909550935050604086013567ffffffffffffffff81111561219d575f80fd5b6121a9888289016120f2565b969995985093965092949392505050565b5f805f606084860312156121cc575f80fd5b6121d58461204e565b92506121e36020850161204e565b929592945050506040919091013590565b8015158114610ec8575f80fd5b5f8060408385031215612212575f80fd5b823561221d816121f4565b9150602083013560ff81168114612232575f80fd5b809150509250929050565b5f806040838503121561224e575f80fd5b50508035926020909101359150565b5f806040838503121561226e575f80fd5b8235612083816121f4565b5f806040838503121561228a575f80fd5b6122938361204e565b91506020830135612232816121f4565b5f602082840312156122b3575f80fd5b610b398261204e565b5f602082840312156122cc575f80fd5b5035919050565b5f805f606084860312156122e5575f80fd5b505081359360208301359350604090920135919050565b5f805f805f8060c08789031215612311575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f806040838503121561234c575f80fd5b6123558361204e565b91506123636020840161204e565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156107af576107af6123b5565b80820281158282048414176107af576107af6123b5565b5f8261240d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612422575f80fd5b5051919050565b5f60208284031215612439575f80fd5b8151610b39816121f4565b818103818111156107af576107af6123b5565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156124a75783516001600160a01b0316835260209384019390920191600101612480565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f606084860312156124d9575f80fd5b505081516020830151604090930151909492935091905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205485e85012e7416e04d399c82bf5d023f1e6479121a2e2f6d8b2a7bc8165938b64736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610236575f3560e01c80636ce46bc3116101295780638da5cb5b116100a8578063b53d8d291161006d578063b53d8d2914610689578063cf4d094b146106a8578063dd62ed3e146106c7578063f2fde38b1461070b578063f887ea401461072a575f80fd5b80638da5cb5b146105e357806395d89b41146105ff578063a8aa1b311461062d578063a9059cbb1461064c578063b2bdfa7b1461066b575f80fd5b80637d1db4a5116100ee5780637d1db4a5146105575780637fd4fc9c1461056c57806386f6c3c114610580578063893d20e81461059f5780638a8c523c146105cf575f80fd5b80636ce46bc3146104bb57806370a08231146104da578063715018a61461050e578063722b62ad1461052257806378109e5414610542575f80fd5b80632f5f2572116101b557806350db71fb1161017a57806350db71fb1461042a5780635526566914610449578063571ac8b01461045d5780635d0044ca1461047c578063617fe0ed1461049b575f80fd5b80632f5f2572146103a8578063308302d3146103bc578063313ce567146103d157806337c73d3d146103f257806348b98ef514610411575f80fd5b80631ca0a28d116101fb5780631ca0a28d146103175780631df4ccfc1461033657806323b872dd1461034b5780632d5945671461036a5780632e6ac10614610389575f80fd5b806306fdde031461024157806308fd3d0514610289578063095ea7b3146102b957806318160ddd146102d857806318abb635146102f6575f80fd5b3661023d57005b5f80fd5b34801561024c575f80fd5b5060408051808201909152600e81526d416d65726963616e20466c6f6b6960901b60208201525b6040516102809190612019565b60405180910390f35b348015610294575f80fd5b50601e546102a990600160a01b900460ff1681565b6040519015158152602001610280565b3480156102c4575f80fd5b506102a96102d3366004612069565b610749565b3480156102e3575f80fd5b506003545b604051908152602001610280565b348015610301575f80fd5b50610315610310366004612091565b6107b5565b005b348015610322575f80fd5b5061031561033136600461213a565b610895565b348015610341575f80fd5b506102e860105481565b348015610356575f80fd5b506102a96103653660046121ba565b610a82565b348015610375575f80fd5b50610315610384366004612201565b610b40565b348015610394575f80fd5b506102a96103a336600461223d565b610ba0565b3480156103b3575f80fd5b50610315610bb3565b3480156103c7575f80fd5b506102e860215481565b3480156103dc575f80fd5b5060125b60405160ff9091168152602001610280565b3480156103fd575f80fd5b5061031561040c36600461225d565b610c0a565b34801561041c575f80fd5b506020546102a99060ff1681565b348015610435575f80fd5b50610315610444366004612279565b610c8c565b348015610454575f80fd5b506102e8610cdf565b348015610468575f80fd5b506102a96104773660046122a3565b610d4f565b348015610487575f80fd5b506103156104963660046122bc565b610d5b565b3480156104a6575f80fd5b50601e546102a990600160a81b900460ff1681565b3480156104c6575f80fd5b506103156104d53660046122d3565b610de7565b3480156104e5575f80fd5b506102e86104f43660046122a3565b6001600160a01b03165f9081526006602052604090205490565b348015610519575f80fd5b50610315610e21565b34801561052d575f80fd5b50601e546103e090600160b01b900460ff1681565b34801561054d575f80fd5b506102e860055481565b348015610562575f80fd5b506102e860045481565b348015610577575f80fd5b50610315610e92565b34801561058b575f80fd5b5061031561059a3660046122fc565b610ecb565b3480156105aa575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610280565b3480156105da575f80fd5b50610315610f98565b3480156105ee575f80fd5b505f546001600160a01b03166105b7565b34801561060a575f80fd5b506040805180820190915260068152655553464c4f4b60d01b6020820152610273565b348015610638575f80fd5b50601e546105b7906001600160a01b031681565b348015610657575f80fd5b506102a9610666366004612069565b610fe8565b348015610676575f80fd5b505f546105b7906001600160a01b031681565b348015610694575f80fd5b506102a96106a3366004612069565b610ff4565b3480156106b3575f80fd5b506102e86106c23660046122bc565b611184565b3480156106d2575f80fd5b506102e86106e136600461233b565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b348015610716575f80fd5b506103156107253660046122a3565b6111c9565b348015610735575f80fd5b50601c546105b7906001600160a01b031681565b335f8181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107a39086815260200190565b60405180910390a35060015b92915050565b5f546001600160a01b031633146107e75760405162461bcd60e51b81526004016107de9061236c565b60405180910390fd5b601580546001600160a01b038781166001600160a01b031992831617909255601680548784169083168117909155601780548785169084168117909155601980548786169085168117909155601880549587169590941685179093556040805192835260208301949094529281019190915260608101919091527fd57a6cc80e12ea4e450dcae918d555702c8ad353993d8e23acc138382c6c7f649060800160405180910390a15050505050565b335f9081526009602052604090205460ff166108af575f80fd5b6101f583106109165760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084016107de565b8281146109765760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b60648201526084016107de565b5f805b848110156109af57838382818110610993576109936123a1565b90506020020135826109a591906123c9565b9150600101610979565b50806109cf876001600160a01b03165f9081526006602052604090205490565b1015610a1d5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c6574000000000060448201526064016107de565b5f5b84811015610a7957610a7087878784818110610a3d57610a3d6123a1565b9050602002016020810190610a5291906122a3565b868685818110610a6457610a646123a1565b905060200201356112b0565b50600101610a1f565b50505050505050565b6001600160a01b0383165f9081526007602090815260408083203384529091528120545f1914610b2b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152600782528381203382529091529190912054610b07918490611380565b6001600160a01b0385165f9081526007602090815260408083203384529091529020555b610b368484846113b8565b90505b9392505050565b5f546001600160a01b03163314610b695760405162461bcd60e51b81526004016107de9061236c565b601e805461ffff60a81b1916600160a81b9315159390930260ff60b01b191692909217600160b01b60ff9290921691909102179055565b5f82610bab83611184565b119392505050565b5f546001600160a01b03163314610bdc5760405162461bcd60e51b81526004016107de9061236c565b5f60138190556012819055601455600354606490610bfb9060016123dc565b610c0591906123f3565b602155565b5f546001600160a01b03163314610c335760405162461bcd60e51b81526004016107de9061236c565b6020805460ff1916831515908117825560218390556040805184815260ff9092161515928201929092527f392f1d6148f51babec2021798dc4b53898c421ad141fcd1babe8ac1bff909f79910160405180910390a15050565b5f546001600160a01b03163314610cb55760405162461bcd60e51b81526004016107de9061236c565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead5f9081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22546003549192610d4a929091610d4491906117f4565b906117f4565b905090565b5f6107af825f19610749565b5f546001600160a01b03163314610d845760405162461bcd60e51b81526004016107de9061236c565b6001811015610d91575f80fd5b6103e881600354610da291906123dc565b610dac91906123f3565b60058190556040519081527f494fd99b13a8a3670e91a40af1b1ffec73968d010de2a178aa17556d7d353f339060200160405180910390a150565b5f546001600160a01b03163314610e105760405162461bcd60e51b81526004016107de9061236c565b601291909155601391909155601455565b5f546001600160a01b03163314610e4a5760405162461bcd60e51b81526004016107de9061236c565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b6017546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610ec8573d5f803e3d5ffd5b50565b5f546001600160a01b03163314610ef45760405162461bcd60e51b81526004016107de9061236c565b600b869055600e859055600c849055600d839055600f829055610f2582610f1f858188818c8c611835565b90611835565b6010556011819055610f386004826123f3565b60105410610f885760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e2032352500000060448201526064016107de565b610f90611893565b505050505050565b5f546001600160a01b03163314610fc15760405162461bcd60e51b81526004016107de9061236c565b601e805460ff60a01b1916600160a01b1790556101f46013556102bc6012556103e8601455565b5f610b393384846113b8565b5f306001600160a01b0384160361105e5760405162461bcd60e51b815260206004820152602860248201527f746f6b656e416464726573732063616e206e6f7420626520746865206e6174696044820152673b32903a37b5b2b760c11b60648201526084016107de565b815f036110ce576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156110a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110cb9190612412565b91505b604080516001600160a01b0385168152602081018490527f13baf1e647d68ca9451d9fc896ee1c75b4337b7804451971e549ca6d1e24287d910160405180910390a160155460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303815f875af1158015611160573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b399190612429565b5f6107af611190610cdf565b601e546001600160a01b03165f908152600660205260409020546111c3906111bc906002905b9061192e565b859061192e565b906119ac565b5f546001600160a01b031633146111f25760405162461bcd60e51b81526004016107de9061236c565b6001600160a01b0381166112575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107de565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600690915291822054611300918490611380565b6001600160a01b038086165f90815260066020526040808220939093559085168152205461132e9083611835565b6001600160a01b038085165f8181526006602052604090819020939093559151908616905f805160206124f38339815191529061136e9086815260200190565b60405180910390a35060019392505050565b5f81848411156113a35760405162461bcd60e51b81526004016107de9190612019565b505f6113af8486612444565b95945050505050565b6022545f9060ff16156113d7576113d08484846112b0565b9050610b39565b6001600160a01b0384165f9081526001602052604090205460ff1615801561141757506001600160a01b0383165f9081526001602052604090205460ff16155b1561146c57601e54600160a01b900460ff1661146c5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107de565b6001600160a01b0384165f9081526001602052604090205460ff1615801561149d57506001600160a01b0383163014155b80156114b457506001600160a01b03831661dead14155b80156114ce5750601e546001600160a01b03848116911614155b80156114e857506019546001600160a01b03848116911614155b801561150257506016546001600160a01b03848116911614155b801561152657506001600160a01b0383165f9081526009602052604090205460ff16155b156115c6576001600160a01b0383165f9081526006602052604090205460055461155084836123c9565b11156115c45760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107de565b505b601e546001600160a01b0385811691161480156115ec5750601e54600160a81b900460ff165b801561161057506001600160a01b0383165f908152600a602052604090205460ff16155b156116ab576001600160a01b0383165f908152601f6020526040902054421161167b5760405162461bcd60e51b815260206004820152601860248201527f506c656173652077616974206265747765656e2062757973000000000000000060448201526064016107de565b601e5461169290600160b01b900460ff16426123c9565b6001600160a01b0384165f908152601f60205260409020555b6116b584836119ed565b6116bd611a59565b156116ca576116ca611aa6565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f9081526006909152919091205461171b918490611380565b6001600160a01b0385165f90815260066020908152604080832093909355600890529081205460ff168061176657506001600160a01b0384165f9081526008602052604090205460ff165b61177a57611775858486611e6e565b61177c565b825b6001600160a01b0385165f908152600660205260409020549091506117a19082611835565b6001600160a01b038086165f8181526006602052604090819020939093559151908716905f805160206124f3833981519152906117e19085815260200190565b60405180910390a3506001949350505050565b5f610b3983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611380565b5f8061184183856123c9565b905083811015610b395760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107de565b7f8cc651ceed4360bdb07d4dfc17daa4a6fa17092a313d2464a582a73e9b9328006118d060646111c360135460105461192e90919063ffffffff16565b6118ec60646111c360125460105461192e90919063ffffffff16565b61190860646111c360145460105461192e90919063ffffffff16565b6040805160ff9485168152928416602084015292168183015290519081900360600190a1565b5f825f0361193d57505f6107af565b5f61194883856123dc565b90508261195585836123f3565b14610b395760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107de565b5f610b3983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fed565b60045481111580611a1557506001600160a01b0382165f9081526009602052604090205460ff165b611a555760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107de565b5050565b601e545f906001600160a01b03163314801590611a79575060225460ff16155b8015611a87575060205460ff165b8015610d4a575050602154305f90815260066020526040902054101590565b6022805460ff19166001179055601a54601b545f91611ac491610ba0565b611ad057600b54611ad2565b5f5b90505f611af560026111c36010546111c38660215461192e90919063ffffffff16565b90505f611b0d826021546117f490919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f81518110611b4557611b456123a1565b6001600160a01b039283166020918202929092010152600254825191169082906001908110611b7657611b766123a1565b6001600160a01b039283166020918202929092010152601c5460405163791ac94760e01b81524792919091169063791ac94790611bbf9086905f90879030904290600401612457565b5f604051808303815f87803b158015611bd6575f80fd5b505af1158015611be8573d5f803e3d5ffd5b505050505f611c0082476117f490919063ffffffff16565b90505f611c1a611c118860026119ac565b601054906117f4565b90505f611c2e60026111c38481878d61192e565b90505f611c4a836111c3600c548761192e90919063ffffffff16565b90505f611c66846111c3600e548861192e90919063ffffffff16565b90505f611c82856111c3600d548961192e90919063ffffffff16565b6016546040519192505f916001600160a01b039091169085908381818185875af1925050503d805f8114611cd1576040519150601f19603f3d011682016040523d82523d5f602084013e611cd6565b606091505b50506017546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611d23576040519150601f19603f3d011682016040523d82523d5f602084013e611d28565b606091505b50506018546040519192506001600160a01b03169084905f81818185875af1925050503d805f8114611d75576040519150601f19603f3d011682016040523d82523d5f602084013e611d7a565b606091505b505f9250508b159050611e5657601c5460155460405163f305d71960e01b8152306004820152602481018e90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611df4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e1991906124c7565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff1916905550505050505050505050565b601454601e545f91906001600160a01b0390811690841603611e935750601254611eae565b601e546001600160a01b0390811690861603611eae57506013545b5f611eda6011546064611ec191906123dc565b6111c3846111b66010548a61192e90919063ffffffff16565b90505f611ef86010546111c3600f548561192e90919063ffffffff16565b90505f611f0583836117f4565b305f90815260066020526040902054909150611f219082611835565b305f90815260066020526040808220929092556019546001600160a01b031681522054611f4e9083611835565b6019546001600160a01b039081165f9081526006602090815260409182902093909355518381523092918b16915f805160206124f3833981519152910160405180910390a38115611fd757600354611fa690836117f4565b6003556040518281525f906001600160a01b038a16905f805160206124f38339815191529060200160405180910390a35b611fe187846117f4565b98975050505050505050565b5f818361200d5760405162461bcd60e51b81526004016107de9190612019565b505f6113af84866123f3565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114612064575f80fd5b919050565b5f806040838503121561207a575f80fd5b6120838361204e565b946020939093013593505050565b5f805f805f60a086880312156120a5575f80fd5b6120ae8661204e565b94506120bc6020870161204e565b93506120ca6040870161204e565b92506120d86060870161204e565b91506120e66080870161204e565b90509295509295909350565b5f8083601f840112612102575f80fd5b50813567ffffffffffffffff811115612119575f80fd5b6020830191508360208260051b8501011115612133575f80fd5b9250929050565b5f805f805f6060868803121561214e575f80fd5b6121578661204e565b9450602086013567ffffffffffffffff811115612172575f80fd5b61217e888289016120f2565b909550935050604086013567ffffffffffffffff81111561219d575f80fd5b6121a9888289016120f2565b969995985093965092949392505050565b5f805f606084860312156121cc575f80fd5b6121d58461204e565b92506121e36020850161204e565b929592945050506040919091013590565b8015158114610ec8575f80fd5b5f8060408385031215612212575f80fd5b823561221d816121f4565b9150602083013560ff81168114612232575f80fd5b809150509250929050565b5f806040838503121561224e575f80fd5b50508035926020909101359150565b5f806040838503121561226e575f80fd5b8235612083816121f4565b5f806040838503121561228a575f80fd5b6122938361204e565b91506020830135612232816121f4565b5f602082840312156122b3575f80fd5b610b398261204e565b5f602082840312156122cc575f80fd5b5035919050565b5f805f606084860312156122e5575f80fd5b505081359360208301359350604090920135919050565b5f805f805f8060c08789031215612311575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f806040838503121561234c575f80fd5b6123558361204e565b91506123636020840161204e565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156107af576107af6123b5565b80820281158282048414176107af576107af6123b5565b5f8261240d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612422575f80fd5b5051919050565b5f60208284031215612439575f80fd5b8151610b39816121f4565b818103818111156107af576107af6123b5565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156124a75783516001600160a01b0316835260209384019390920191600101612480565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f606084860312156124d9575f80fd5b505081516020830151604090930151909492935091905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205485e85012e7416e04d399c82bf5d023f1e6479121a2e2f6d8b2a7bc8165938b64736f6c634300081a0033

Deployed Bytecode Sourcemap

5760:15475:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9880:80;;;;;;;;;;-1:-1:-1;9952:5:0;;;;;;;;;;;;-1:-1:-1;;;9952:5:0;;;;9880:80;;;;;;;:::i;:::-;;;;;;;;8095:31;;;;;;;;;;-1:-1:-1;8095:31:0;;;;-1:-1:-1;;;8095:31:0;;;;;;;;;602:14:1;;595:22;577:41;;565:2;550:18;8095:31:0;437:187:1;10302:216:0;;;;;;;;;;-1:-1:-1;10302:216:0;;;;;:::i;:::-;;:::i;9610:88::-;;;;;;;;;;-1:-1:-1;9683:12:0;;9610:88;;;1258:25:1;;;1246:2;1231:18;9610:88:0;1112:177:1;19311:554:0;;;;;;;;;;-1:-1:-1;19311:554:0;;;;;:::i;:::-;;:::i;:::-;;19875:637;;;;;;;;;;-1:-1:-1;19875:637:0;;;;;:::i;:::-;;:::i;7435:100::-;;;;;;;;;;;;;;;;10820:370;;;;;;;;;;-1:-1:-1;10820:370:0;;;;;:::i;:::-;;:::i;11464:164::-;;;;;;;;;;-1:-1:-1;11464:164:0;;;;;:::i;:::-;;:::i;20783:142::-;;;;;;;;;;-1:-1:-1;20783:142:0;;;;;:::i;:::-;;:::i;11773:232::-;;;;;;;;;;;;;:::i;8329:63::-;;;;;;;;;;;;;;;;9704:80;;;;;;;;;;-1:-1:-1;6131:2:0;9704:80;;;4438:4:1;4426:17;;;4408:36;;4396:2;4381:18;9704:80:0;4266:184:1;20520:255:0;;;;;;;;;;-1:-1:-1;20520:255:0;;;;;:::i;:::-;;:::i;8284:38::-;;;;;;;;;;-1:-1:-1;8284:38:0;;;;;;;;11636:129;;;;;;;;;;-1:-1:-1;11636:129:0;;;;;:::i;:::-;;:::i;21096:132::-;;;;;;;;;;;;;:::i;10526:122::-;;;;;;;;;;-1:-1:-1;10526:122:0;;;;;:::i;:::-;;:::i;11202:247::-;;;;;;;;;;-1:-1:-1;11202:247:0;;;;;:::i;:::-;;:::i;8136:37::-;;;;;;;;;;-1:-1:-1;8136:37:0;;;;-1:-1:-1;;;8136:37:0;;;;;;15988:274;;;;;;;;;;-1:-1:-1;15988:274:0;;;;;:::i;:::-;;:::i;10050:105::-;;;;;;;;;;-1:-1:-1;10050:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;10134:18:0;10116:7;10134:18;;;:9;:18;;;;;;;10050:105;2674:148;;;;;;;;;;;;;:::i;8180:38::-;;;;;;;;;;-1:-1:-1;8180:38:0;;;;-1:-1:-1;;;8180:38:0;;;;;;6894:63;;;;;;;;;;;;;;;;6827:60;;;;;;;;;;;;;;;;15403:137;;;;;;;;;;;;;:::i;18685:613::-;;;;;;;;;;-1:-1:-1;18685:613:0;;;;;:::i;:::-;;:::i;9966:78::-;;;;;;;;;;-1:-1:-1;10018:7:0;2525:6;-1:-1:-1;;;;;2525:6:0;9966:78;;;-1:-1:-1;;;;;7032:32:1;;;7014:51;;7002:2;6987:18;9966:78:0;6868:203:1;16277:214:0;;;;;;;;;;;;;:::i;2460:79::-;;;;;;;;;;-1:-1:-1;2498:7:0;2525:6;-1:-1:-1;;;;;2525:6:0;2460:79;;9790:84;;;;;;;;;;-1:-1:-1;9864:7:0;;;;;;;;;;;;-1:-1:-1;;;9864:7:0;;;;9790:84;;8063:19;;;;;;;;;;-1:-1:-1;8063:19:0;;;;-1:-1:-1;;;;;8063:19:0;;;10656:156;;;;;;;;;;-1:-1:-1;10656:156:0;;;;;:::i;:::-;;:::i;2080:21::-;;;;;;;;;;-1:-1:-1;2080:21:0;;;;-1:-1:-1;;;;;2080:21:0;;;15547:433;;;;;;;;;;-1:-1:-1;15547:433:0;;;;;:::i;:::-;;:::i;20933:151::-;;;;;;;;;;-1:-1:-1;20933:151:0;;;;;:::i;:::-;;:::i;10161:133::-;;;;;;;;;;-1:-1:-1;10161:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10263:19:0;;;10245:7;10263:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10161:133;2830:244;;;;;;;;;;-1:-1:-1;2830:244:0;;;;;:::i;:::-;;:::i;7993:24::-;;;;;;;;;;-1:-1:-1;7993:24:0;;;;-1:-1:-1;;;;;7993:24:0;;;10302:216;10406:10;10377:4;10394:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10394:32:0;;;;;;;;;;:41;;;10451:37;10377:4;;10394:32;;10451:37;;;;10429:6;1258:25:1;;1246:2;1231:18;;1112:177;10451:37:0;;;;;;;;-1:-1:-1;10506:4:0;10302:216;;;;;:::o;19311:554::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;;;;;;;;;19508:13:::1;:30:::0;;-1:-1:-1;;;;;19508:30:0;;::::1;-1:-1:-1::0;;;;;;19508:30:0;;::::1;;::::0;;;19549:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;19604:18:::1;:40:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;19655:18:::1;:40:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;19706:18:::1;:40:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;19764:93:::1;::::0;;8159:51:1;;;8241:2;8226:18;;8219:60;;;;8295:18;;;8288:60;;;;8379:2;8364:18;;8357:60;;;;19764:93:0::1;::::0;8146:3:1;8131:19;19764:93:0::1;;;;;;;19311:554:::0;;;;;:::o;19875:637::-;20009:10;19993:27;;;;:15;:27;;;;;;;;19985:36;;;;;;20055:3;20036:22;;20028:79;;;;-1:-1:-1;;;20028:79:0;;8630:2:1;20028:79:0;;;8612:21:1;8669:2;8649:18;;;8642:30;8708:34;8688:18;;;8681:62;-1:-1:-1;;;8759:18:1;;;8752:43;8812:19;;20028:79:0;8428:409:1;20028:79:0;20122:33;;;20114:85;;;;-1:-1:-1;;;20114:85:0;;9044:2:1;20114:85:0;;;9026:21:1;9083:2;9063:18;;;9056:30;9122:34;9102:18;;;9095:62;-1:-1:-1;;;9173:18:1;;;9166:38;9221:19;;20114:85:0;8842:404:1;20114:85:0;20208:15;20240:6;20236:88;20250:20;;;20236:88;;;20307:6;;20314:1;20307:9;;;;;;;:::i;:::-;;;;;;;20297:7;:19;;;;:::i;:::-;20287:29;-1:-1:-1;20272:3:0;;20236:88;;;;20359:7;20340:15;20350:4;-1:-1:-1;;;;;10134:18:0;10116:7;10134:18;;;:9;:18;;;;;;;10050:105;20340:15;:26;;20332:66;;;;-1:-1:-1;;;20332:66:0;;9847:2:1;20332:66:0;;;9829:21:1;9886:2;9866:18;;;9859:30;9925:29;9905:18;;;9898:57;9972:18;;20332:66:0;9645:351:1;20332:66:0;20411:6;20407:102;20421:20;;;20407:102;;;20458:43;20473:4;20478:9;;20488:1;20478:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20491:6;;20498:1;20491:9;;;;;;;:::i;:::-;;;;;;;20458:14;:43::i;:::-;-1:-1:-1;20443:3:0;;20407:102;;;;19978:534;19875:637;;;;;:::o;10820:370::-;-1:-1:-1;;;;;10940:19:0;;10920:4;10940:19;;;:11;:19;;;;;;;;10960:10;10940:31;;;;;;;;-1:-1:-1;;10940:52:0;10937:186;;11042:69;;;;;;;;;;;-1:-1:-1;;;11042:69:0;;;;;;;;-1:-1:-1;;;;;11042:19:0;;-1:-1:-1;11042:19:0;;;:11;:19;;;;;11062:10;11042:31;;;;;;;;;;:69;;11078:6;;11042:35;:69::i;:::-;-1:-1:-1;;;;;11008:19:0;;;;;;:11;:19;;;;;;;;11028:10;11008:31;;;;;;;:103;10937:186;11142:40;11156:6;11164:9;11175:6;11142:13;:40::i;:::-;11135:47;;10820:370;;;;;;:::o;11464:164::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;11548:18:::1;:28:::0;;-1:-1:-1;;;;11587:33:0;-1:-1:-1;;;11548:28:0;::::1;;::::0;;;::::1;-1:-1:-1::0;;;;11587:33:0;;;;;-1:-1:-1;;;11548:28:0::1;11587:33:::0;;;::::1;::::0;;;::::1;;::::0;;11464:164::o;20783:142::-;20862:4;20912:5;20886:23;20900:8;20886:13;:23::i;:::-;:31;;20783:142;-1:-1:-1;;;20783:142:0:o;11773:232::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;11845:1:::1;11829:13;:17:::0;;;11861:14:::1;:18:::0;;;11894:24:::1;:28:::0;11961:12:::1;::::0;11980:3:::1;::::0;11961:16:::1;::::0;-1:-1:-1;11961:16:0::1;:::i;:::-;:22;;;;:::i;:::-;11937:21;:46:::0;11773:232::o;20520:255::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;20618:19:::1;:30:::0;;-1:-1:-1;;20618:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;20659:21:::1;:31:::0;;;20706:61:::1;::::0;;10564:25:1;;;20618:30:0::1;20747:19:::0;;;10632:14:1;10625:22;10605:18;;;10598:50;;;;20706:61:0::1;::::0;10537:18:1;20706:61:0::1;;;;;;;20520:255:::0;;:::o;11636:129::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11724:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;11724:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11636:129::o;21096:132::-;10134:9;:18;;;;5886:42;21139:7;10134:18;;;;;21166:12;;21139:7;;21166:54;;10134:18;;21166:33;;:12;:16;:33::i;:::-;:37;;:54::i;:::-;21159:61;;21096:132;:::o;10526:122::-;10581:4;10605:35;10613:7;-1:-1:-1;;10605:7:0;:35::i;11202:247::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;11305:1:::1;11287:14;:19;;11279:28;;;::::0;::::1;;11372:4;11353:14;11338:12;;:29;;;;:::i;:::-;11337:39;;;;:::i;:::-;11319:15;:57:::0;;;11392:31:::1;::::0;1258:25:1;;;11392:31:0::1;::::0;1246:2:1;1231:18;11392:31:0::1;;;;;;;11202:247:::0;:::o;15988:274::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;16114:14:::1;:31:::0;;;;16156:13:::1;:29:::0;;;;16196:24:::1;:42:::0;15988:274::o;2674:148::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;2781:1:::1;2765:6:::0;;2744:40:::1;::::0;-1:-1:-1;;;;;2765:6:0;;::::1;::::0;2744:40:::1;::::0;2781:1;;2744:40:::1;2812:1;2795:19:::0;;-1:-1:-1;;;;;;2795:19:0::1;::::0;;2674:148::o;15403:137::-;15467:18;;15459:59;;-1:-1:-1;;;;;15467:18:0;;;;15496:21;15459:59;;;;;15467:18;15459:59;15467:18;15459:59;15496:21;15467:18;15459:59;;;;;;;;;;;;;;;;;;;;;15403:137::o;18685:613::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;18866:12:::1;:28:::0;;;18905:10:::1;:24:::0;;;18940:12:::1;:28:::0;;;18979:10:::1;:24:::0;;;19014:10:::1;:24:::0;;;19060:83:::1;19027:11:::0;19060:66:::1;18992:11:::0;19060:66;18955:13;19060:66;18881:13;18918:11;19060:17:::1;:30::i;:::-;:34:::0;::::1;:49::i;:83::-;19049:8;:94:::0;19154:14:::1;:32:::0;;;19216:18:::1;19233:1;19171:15:::0;19216:18:::1;:::i;:::-;19205:8;;:29;19197:71;;;::::0;-1:-1:-1;;;19197:71:0;;10861:2:1;19197:71:0::1;::::0;::::1;10843:21:1::0;10900:2;10880:18;;;10873:30;10939:31;10919:18;;;10912:59;10988:18;;19197:71:0::1;10659:353:1::0;19197:71:0::1;19280:10;:8;:10::i;:::-;18685:613:::0;;;;;;:::o;16277:214::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;16330:11:::1;:18:::0;;-1:-1:-1;;;;16330:18:0::1;-1:-1:-1::0;;;16330:18:0::1;::::0;;16375:3:::1;16359:13;:19:::0;16406:3:::1;16389:14;:20:::0;16447:4:::1;16330:11;16420:31:::0;16277:214::o;10656:156::-;10736:4;10760:44;10774:10;10786:9;10797:6;10760:13;:44::i;15547:433::-;15633:12;15694:4;-1:-1:-1;;;;;15670:29:0;;;15662:82;;;;-1:-1:-1;;;15662:82:0;;11219:2:1;15662:82:0;;;11201:21:1;11258:2;11238:18;;;11231:30;11297:34;11277:18;;;11270:62;-1:-1:-1;;;11348:18:1;;;11341:38;11396:19;;15662:82:0;11017:404:1;15662:82:0;15763:6;15773:1;15763:11;15760:95;;15799:44;;-1:-1:-1;;;15799:44:0;;15837:4;15799:44;;;7014:51:1;-1:-1:-1;;;;;15799:29:0;;;;;6987:18:1;;15799:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15790:53;;15760:95;15870:33;;;-1:-1:-1;;;;;11853:32:1;;11835:51;;11917:2;11902:18;;11895:34;;;15870:33:0;;11808:18:1;15870:33:0;;;;;;;15950:13;;15921:51;;-1:-1:-1;;;15921:51:0;;-1:-1:-1;;;;;15950:13:0;;;15921:51;;;11835::1;11902:18;;;11895:34;;;15921:28:0;;;;;;11808:18:1;;15921:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20933:151::-;20995:7;21022:54;21063:12;:10;:12::i;:::-;21045:4;;-1:-1:-1;;;;;21045:4:0;10116:7;10134:18;;;:9;:18;;;;;;21022:36;;21035:22;;21055:1;;21035:15;:19;;:22::i;:::-;21022:8;;:12;:36::i;:::-;:40;;:54::i;2830:244::-;2587:6;;-1:-1:-1;;;;;2587:6:0;1897:10;2587:22;2579:67;;;;-1:-1:-1;;;2579:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2919:22:0;::::1;2911:73;;;::::0;-1:-1:-1;;;2911:73:0;;12392:2:1;2911:73:0::1;::::0;::::1;12374:21:1::0;12431:2;12411:18;;;12404:30;12470:34;12450:18;;;12443:62;-1:-1:-1;;;12521:18:1;;;12514:36;12567:19;;2911:73:0::1;12190:402:1::0;2911:73:0::1;3021:6;::::0;;3000:38:::1;::::0;-1:-1:-1;;;;;3000:38:0;;::::1;::::0;3021:6;::::1;::::0;3000:38:::1;::::0;::::1;3049:6;:17:::0;;-1:-1:-1;;;;;;3049:17:0::1;-1:-1:-1::0;;;;;3049:17:0;;;::::1;::::0;;;::::1;::::0;;2830:244::o;13529:330::-;13659:53;;;;;;;;;;;-1:-1:-1;;;13659:53:0;;;;;;;;-1:-1:-1;;;;;13659:17:0;;13622:4;13659:17;;;:9;:17;;;;;;;:53;;13681:6;;13659:21;:53::i;:::-;-1:-1:-1;;;;;13639:17:0;;;;;;;:9;:17;;;;;;:73;;;;13746:20;;;;;;;:32;;13771:6;13746:24;:32::i;:::-;-1:-1:-1;;;;;13723:20:0;;;;;;;:9;:20;;;;;;;:55;;;;13794:35;;;;;;-1:-1:-1;;;;;;;;;;;13794:35:0;;;13822:6;1258:25:1;;1246:2;1231:18;;1112:177;13794:35:0;;;;;;;;-1:-1:-1;13847:4:0;13529:330;;;;;:::o;4972:192::-;5058:7;5094:12;5086:6;;;;5078:29;;;;-1:-1:-1;;;5078:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5118:9:0;5130:5;5134:1;5130;:5;:::i;:::-;5118:17;4972:192;-1:-1:-1;;;;;4972:192:0:o;12019:1501::-;12131:6;;12111:4;;12131:6;;12128:63;;;12147:41;12162:6;12170:9;12181:6;12147:14;:41::i;:::-;12140:48;;;;12128:63;-1:-1:-1;;;;;12207:22:0;;;;;;:14;:22;;;;;;;;12206:23;:53;;;;-1:-1:-1;;;;;;12234:25:0;;;;;;:14;:25;;;;;;;;12233:26;12206:53;12203:139;;;12283:11;;-1:-1:-1;;;12283:11:0;;;;12275:43;;;;-1:-1:-1;;;12275:43:0;;12932:2:1;12275:43:0;;;12914:21:1;12971:2;12951:18;;;12944:30;-1:-1:-1;;;12990:18:1;;;12983:50;13050:18;;12275:43:0;12730:344:1;12275:43:0;-1:-1:-1;;;;;12384:22:0;;;;;;:14;:22;;;;;;;;12383:23;:53;;;;-1:-1:-1;;;;;;12410:26:0;;12431:4;12410:26;;12383:53;:84;;;;-1:-1:-1;;;;;;12441:26:0;;5886:42;12441:26;;12383:84;:105;;;;-1:-1:-1;12484:4:0;;-1:-1:-1;;;;;12471:17:0;;;12484:4;;12471:17;;12383:105;:140;;;;-1:-1:-1;12505:18:0;;-1:-1:-1;;;;;12492:31:0;;;12505:18;;12492:31;;12383:140;:177;;;;-1:-1:-1;12540:20:0;;-1:-1:-1;;;;;12527:33:0;;;12540:20;;12527:33;;12383:177;:208;;;;-1:-1:-1;;;;;;12565:26:0;;;;;;:15;:26;;;;;;;;12564:27;12383:208;12379:400;;;-1:-1:-1;;;;;10134:18:0;;12607;10134;;;:9;:18;;;;;;12696:15;;12672:19;12685:6;10134:18;12672:19;:::i;:::-;12671:40;;12663:114;;;;-1:-1:-1;;;12663:114:0;;13281:2:1;12663:114:0;;;13263:21:1;13320:2;13300:18;;;13293:30;13359:34;13339:18;;;13332:62;13430:32;13410:18;;;13403:60;13480:19;;12663:114:0;13079:426:1;12663:114:0;12592:187;12379:400;12805:4;;-1:-1:-1;;;;;12795:14:0;;;12805:4;;12795:14;:36;;;;-1:-1:-1;12813:18:0;;-1:-1:-1;;;12813:18:0;;;;12795:36;:68;;;;-1:-1:-1;;;;;;12836:27:0;;;;;;:16;:27;;;;;;;;12835:28;12795:68;12791:260;;;-1:-1:-1;;;;;12888:24:0;;;;;;:13;:24;;;;;;12915:15;-1:-1:-1;12880:78:0;;;;-1:-1:-1;;;12880:78:0;;13712:2:1;12880:78:0;;;13694:21:1;13751:2;13731:18;;;13724:30;13790:26;13770:18;;;13763:54;13834:18;;12880:78:0;13510:348:1;12880:78:0;13018:21;;13000:39;;-1:-1:-1;;;13018:21:0;;;;13000:15;:39;:::i;:::-;-1:-1:-1;;;;;12973:24:0;;;;;;:13;:24;;;;;:66;12791:260;13063:28;13076:6;13084;13063:12;:28::i;:::-;13109:16;:14;:16::i;:::-;13106:35;;;13128:10;:8;:10::i;:::-;13171:53;;;;;;;;;;;-1:-1:-1;;;13171:53:0;;;;;;;;-1:-1:-1;;;;;13171:17:0;;-1:-1:-1;13171:17:0;;;:9;:17;;;;;;;;:53;;13193:6;;13171:21;:53::i;:::-;-1:-1:-1;;;;;13151:17:0;;;;;;:9;:17;;;;;;;;:73;;;;13263:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;13286:22:0;;;;;;:11;:22;;;;;;;;13263:45;13262:93;;13321:34;13329:6;13337;13345:9;13321:7;:34::i;:::-;13262:93;;;13312:6;13262:93;-1:-1:-1;;;;;13389:20:0;;;;;;:9;:20;;;;;;13237:118;;-1:-1:-1;13389:40:0;;13237:118;13389:24;:40::i;:::-;-1:-1:-1;;;;;13366:20:0;;;;;;;:9;:20;;;;;;;:63;;;;13447:43;;;;;;-1:-1:-1;;;;;;;;;;;13447:43:0;;;13475:14;1258:25:1;;1246:2;1231:18;;1112:177;13447:43:0;;;;;;;;-1:-1:-1;13508:4:0;;12019:1501;-1:-1:-1;;;;12019:1501:0:o;4830:136::-;4888:7;4915:43;4919:1;4922;4915:43;;;;;;;;;;;;;;;;;:3;:43::i;4643:181::-;4701:7;;4733:5;4737:1;4733;:5;:::i;:::-;4721:17;;4762:1;4757;:6;;4749:46;;;;-1:-1:-1;;;4749:46:0;;14065:2:1;4749:46:0;;;14047:21:1;14104:2;14084:18;;;14077:30;14143:29;14123:18;;;14116:57;14190:18;;4749:46:0;13863:351:1;18417:256:0;18470:195;18485:36;18517:3;18485:27;18498:13;;18485:8;;:12;;:27;;;;:::i;:36::-;18543:37;18576:3;18543:28;18556:14;;18543:8;;:12;;:28;;;;:::i;:37::-;18602:47;18645:3;18602:38;18615:24;;18602:8;;:12;;:38;;;;:::i;:47::-;18470:195;;;14439:4:1;14427:17;;;14409:36;;14481:17;;;14476:2;14461:18;;14454:45;14535:17;;14515:18;;;14508:45;18470:195:0;;;;;;14397:2:1;18470:195:0;;;18417:256::o;5170:250::-;5228:7;5252:1;5257;5252:6;5248:47;;-1:-1:-1;5282:1:0;5275:8;;5248:47;5307:9;5319:5;5323:1;5319;:5;:::i;:::-;5307:17;-1:-1:-1;5352:1:0;5343:5;5347:1;5307:17;5343:5;:::i;:::-;:10;5335:56;;;;-1:-1:-1;;;5335:56:0;;14766:2:1;5335:56:0;;;14748:21:1;14805:2;14785:18;;;14778:30;14844:34;14824:18;;;14817:62;-1:-1:-1;;;14895:18:1;;;14888:31;14936:19;;5335:56:0;14564:397:1;5426:132:0;5484:7;5511:39;5515:1;5518;5511:39;;;;;;;;;;;;;;;;;:3;:39::i;13867:166::-;13964:12;;13954:6;:22;;:49;;;-1:-1:-1;;;;;;13980:23:0;;;;;;:15;:23;;;;;;;;13954:49;13946:79;;;;-1:-1:-1;;;13946:79:0;;15168:2:1;13946:79:0;;;15150:21:1;15207:2;15187:18;;;15180:30;-1:-1:-1;;;15226:18:1;;;15219:47;15283:18;;13946:79:0;14966:341:1;13946:79:0;13867:166;;:::o;15177:213::-;15264:4;;15226;;-1:-1:-1;;;;;15264:4:0;15250:10;:18;;;;:38;;-1:-1:-1;15282:6:0;;;;15281:7;15250:38;:70;;;;-1:-1:-1;15301:19:0;;;;15250:70;:132;;;;-1:-1:-1;;15361:21:0;;15351:4;15333:24;;;;:9;:24;;;;;;:49;;;15177:213::o;16516:1885::-;8440:6;:13;;-1:-1:-1;;8440:13:0;8449:4;8440:13;;;16611::::1;::::0;16626:24:::1;::::0;8440:6;;16595:56:::1;::::0;:15:::1;:56::i;:::-;:75;;16658:12;;16595:75;;;16654:1;16595:75;16565:105;;16681:23;16707:67;16772:1;16707:60;16758:8;;16707:46;16733:19;16707:21;;:25;;:46;;;;:::i;:67::-;16681:93;;16785:20;16808:42;16834:15;16808:21;;:25;;:42;;;;:::i;:::-;16887:16;::::0;;16901:1:::1;16887:16:::0;;;;;::::1;::::0;;16785:65;;-1:-1:-1;16863:21:0::1;::::0;16887:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;16887:16:0::1;16863:40;;16932:4;16914;16919:1;16914:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16914:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;16958:4:::1;::::0;16948:7;;16958:4;::::1;::::0;16948;;16958;;16948:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;16948:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;17033:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;17033:188:0;;16999:21:::1;::::0;17033:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;17105:12;;16975:21:::1;::::0;17148:4;;17175::::1;::::0;17195:15:::1;::::0;17033:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17234:17;17254:40;17280:13;17254:21;:25;;:40;;;;:::i;:::-;17234:60:::0;-1:-1:-1;17307:19:0::1;17329:40;17342:26;:19:::0;17366:1:::1;17342:23;:26::i;:::-;17329:8;::::0;;:12:::1;:40::i;:::-;17307:62:::0;-1:-1:-1;17390:26:0::1;17419:58;17475:1;17419:51;17307:62:::0;17419:51;:9;17433:19;17419:13:::1;:34::i;:58::-;17390:87;;17488:26;17517:44;17549:11;17517:27;17531:12;;17517:9;:13;;:27;;;;:::i;:44::-;17488:73;;17572:24;17599:42;17629:11;17599:25;17613:10;;17599:9;:13;;:25;;;;:::i;:42::-;17572:69;;17652:20;17675:42;17705:11;17675:25;17689:10;;17675:9;:13;;:25;;;;:::i;:42::-;17759:20;::::0;17751:65:::1;::::0;17652;;-1:-1:-1;17731:15:0::1;::::0;-1:-1:-1;;;;;17759:20:0;;::::1;::::0;17793:18;;17731:15;17751:65;17731:15;17751:65;17793:18;17759:20;17751:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;17851:18:0::1;::::0;17843:57:::1;::::0;17730:86;;-1:-1:-1;;;;;;17851:18:0::1;::::0;17883:12;;17843:57:::1;::::0;;;17883:12;17851:18;17843:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;17935:18:0::1;::::0;17927:61:::1;::::0;17827:73;;-1:-1:-1;;;;;;17935:18:0::1;::::0;17967:16;;17927:61:::1;::::0;;;17967:16;17935:18;17927:61:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;18022:5:0::1;::::0;-1:-1:-1;;18043:19:0;;;-1:-1:-1;18040:354:0::1;;18078:6;::::0;18252:13:::1;::::0;18078:236:::1;::::0;-1:-1:-1;;;18078:236:0;;18154:4:::1;18078:236;::::0;::::1;16921:51:1::0;16988:18;;;16981:34;;;18078:6:0::1;17031:18:1::0;;;17024:34;;;17074:18;;;17067:34;-1:-1:-1;;;;;18252:13:0;;::::1;17117:19:1::0;;;17110:61;18284:15:0::1;17187:19:1::0;;;17180:35;18078:6:0;::::1;::::0;:22:::1;::::0;18108:18;;16893:19:1;;18078:236:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;18334:48:0::1;::::0;;17861:25:1;;;17917:2;17902:18;;17895:34;;;18334:48:0::1;::::0;-1:-1:-1;17834:18:1;18334:48:0::1;;;;;;;18040:354;-1:-1:-1::0;;8458:6:0;:14;;-1:-1:-1;;8458:14:0;;;-1:-1:-1;;;;;;;;;;16516:1885:0:o;14163:1006::-;14297:24;;14348:4;;14249:7;;14297:24;-1:-1:-1;;;;;14348:4:0;;;14335:17;;;;14332:148;;-1:-1:-1;14379:14:0;;14332:148;;;14424:4;;-1:-1:-1;;;;;14424:4:0;;;14414:14;;;;14411:69;;-1:-1:-1;14455:13:0;;14411:69;14492:17;14512:59;14550:14;;14567:3;14550:20;;;;:::i;:::-;14512:33;14537:7;14512:20;14523:8;;14512:6;:10;;:20;;;;:::i;:59::-;14492:79;;14582:18;14603:39;14633:8;;14603:25;14617:10;;14603:9;:13;;:25;;;;:::i;:39::-;14582:60;-1:-1:-1;14653:22:0;14678:25;:9;14582:60;14678:13;:25::i;:::-;14759:4;14741:24;;;;:9;:24;;;;;;14653:50;;-1:-1:-1;14741:44:0;;14653:50;14741:28;:44::i;:::-;14732:4;14714:24;;;;:9;:24;;;;;;:71;;;;14838:18;;-1:-1:-1;;;;;14838:18:0;14828:29;;;;:45;;14862:10;14828:33;:45::i;:::-;14806:18;;-1:-1:-1;;;;;14806:18:0;;;14796:29;;;;:9;:29;;;;;;;;;:77;;;;14889:47;1258:25:1;;;14914:4:0;;14889:47;;;;-1:-1:-1;;;;;;;;;;;14889:47:0;1231:18:1;14889:47:0;;;;;;;14970:14;;14967:154;;15015:12;;:28;;15032:10;15015:16;:28::i;:::-;15000:12;:43;15063:34;;1258:25:1;;;5959:42:0;;-1:-1:-1;;;;;15063:34:0;;;-1:-1:-1;;;;;;;;;;;15063:34:0;1246:2:1;1231:18;15063:34:0;;;;;;;14967:154;15140:21;:6;15151:9;15140:10;:21::i;:::-;15133:28;14163:1006;-1:-1:-1;;;;;;;;14163:1006:0:o;5564:189::-;5650:7;5685:12;5678:5;5670:28;;;;-1:-1:-1;;;5670:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5709:9:0;5721:5;5725:1;5721;:5;:::i;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;629:173::-;697:20;;-1:-1:-1;;;;;746:31:1;;736:42;;726:70;;792:1;789;782:12;726:70;629:173;;;:::o;807:300::-;875:6;883;936:2;924:9;915:7;911:23;907:32;904:52;;;952:1;949;942:12;904:52;975:29;994:9;975:29;:::i;:::-;965:39;1073:2;1058:18;;;;1045:32;;-1:-1:-1;;;807:300:1:o;1294:484::-;1389:6;1397;1405;1413;1421;1474:3;1462:9;1453:7;1449:23;1445:33;1442:53;;;1491:1;1488;1481:12;1442:53;1514:29;1533:9;1514:29;:::i;:::-;1504:39;;1562:38;1596:2;1585:9;1581:18;1562:38;:::i;:::-;1552:48;;1619:38;1653:2;1642:9;1638:18;1619:38;:::i;:::-;1609:48;;1676:38;1710:2;1699:9;1695:18;1676:38;:::i;:::-;1666:48;;1733:39;1767:3;1756:9;1752:19;1733:39;:::i;:::-;1723:49;;1294:484;;;;;;;;:::o;1783:367::-;1846:8;1856:6;1910:3;1903:4;1895:6;1891:17;1887:27;1877:55;;1928:1;1925;1918:12;1877:55;-1:-1:-1;1951:20:1;;1994:18;1983:30;;1980:50;;;2026:1;2023;2016:12;1980:50;2063:4;2055:6;2051:17;2039:29;;2123:3;2116:4;2106:6;2103:1;2099:14;2091:6;2087:27;2083:38;2080:47;2077:67;;;2140:1;2137;2130:12;2077:67;1783:367;;;;;:::o;2155:842::-;2286:6;2294;2302;2310;2318;2371:2;2359:9;2350:7;2346:23;2342:32;2339:52;;;2387:1;2384;2377:12;2339:52;2410:29;2429:9;2410:29;:::i;:::-;2400:39;;2490:2;2479:9;2475:18;2462:32;2517:18;2509:6;2506:30;2503:50;;;2549:1;2546;2539:12;2503:50;2588:70;2650:7;2641:6;2630:9;2626:22;2588:70;:::i;:::-;2677:8;;-1:-1:-1;2562:96:1;-1:-1:-1;;2765:2:1;2750:18;;2737:32;2794:18;2781:32;;2778:52;;;2826:1;2823;2816:12;2778:52;2865:72;2929:7;2918:8;2907:9;2903:24;2865:72;:::i;:::-;2155:842;;;;-1:-1:-1;2155:842:1;;-1:-1:-1;2956:8:1;;2839:98;2155:842;-1:-1:-1;;;2155:842:1:o;3002:374::-;3079:6;3087;3095;3148:2;3136:9;3127:7;3123:23;3119:32;3116:52;;;3164:1;3161;3154:12;3116:52;3187:29;3206:9;3187:29;:::i;:::-;3177:39;;3235:38;3269:2;3258:9;3254:18;3235:38;:::i;:::-;3002:374;;3225:48;;-1:-1:-1;;;3342:2:1;3327:18;;;;3314:32;;3002:374::o;3381:118::-;3467:5;3460:13;3453:21;3446:5;3443:32;3433:60;;3489:1;3486;3479:12;3504:406;3567:6;3575;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;3683:9;3670:23;3702:28;3724:5;3702:28;:::i;:::-;3749:5;-1:-1:-1;3806:2:1;3791:18;;3778:32;3854:4;3841:18;;3829:31;;3819:59;;3874:1;3871;3864:12;3819:59;3897:7;3887:17;;;3504:406;;;;;:::o;3915:346::-;3983:6;3991;4044:2;4032:9;4023:7;4019:23;4015:32;4012:52;;;4060:1;4057;4050:12;4012:52;-1:-1:-1;;4105:23:1;;;4225:2;4210:18;;;4197:32;;-1:-1:-1;3915:346:1:o;4455:361::-;4520:6;4528;4581:2;4569:9;4560:7;4556:23;4552:32;4549:52;;;4597:1;4594;4587:12;4549:52;4636:9;4623:23;4655:28;4677:5;4655:28;:::i;4821:315::-;4886:6;4894;4947:2;4935:9;4926:7;4922:23;4918:32;4915:52;;;4963:1;4960;4953:12;4915:52;4986:29;5005:9;4986:29;:::i;:::-;4976:39;;5065:2;5054:9;5050:18;5037:32;5078:28;5100:5;5078:28;:::i;5141:186::-;5200:6;5253:2;5241:9;5232:7;5228:23;5224:32;5221:52;;;5269:1;5266;5259:12;5221:52;5292:29;5311:9;5292:29;:::i;5332:226::-;5391:6;5444:2;5432:9;5423:7;5419:23;5415:32;5412:52;;;5460:1;5457;5450:12;5412:52;-1:-1:-1;5505:23:1;;5332:226;-1:-1:-1;5332:226:1:o;5563:466::-;5640:6;5648;5656;5709:2;5697:9;5688:7;5684:23;5680:32;5677:52;;;5725:1;5722;5715:12;5677:52;-1:-1:-1;;5770:23:1;;;5890:2;5875:18;;5862:32;;-1:-1:-1;5993:2:1;5978:18;;;5965:32;;5563:466;-1:-1:-1;5563:466:1:o;6034:829::-;6138:6;6146;6154;6162;6170;6178;6231:3;6219:9;6210:7;6206:23;6202:33;6199:53;;;6248:1;6245;6238:12;6199:53;-1:-1:-1;;6293:23:1;;;6413:2;6398:18;;6385:32;;-1:-1:-1;6516:2:1;6501:18;;6488:32;;6619:2;6604:18;;6591:32;;-1:-1:-1;6722:3:1;6707:19;;6694:33;;-1:-1:-1;6826:3:1;6811:19;6798:33;;-1:-1:-1;6034:829:1;-1:-1:-1;6034:829:1:o;7076:260::-;7144:6;7152;7205:2;7193:9;7184:7;7180:23;7176:32;7173:52;;;7221:1;7218;7211:12;7173:52;7244:29;7263:9;7244:29;:::i;:::-;7234:39;;7292:38;7326:2;7315:9;7311:18;7292:38;:::i;:::-;7282:48;;7076:260;;;;;:::o;7567:356::-;7769:2;7751:21;;;7788:18;;;7781:30;7847:34;7842:2;7827:18;;7820:62;7914:2;7899:18;;7567:356::o;9251:127::-;9312:10;9307:3;9303:20;9300:1;9293:31;9343:4;9340:1;9333:15;9367:4;9364:1;9357:15;9383:127;9444:10;9439:3;9435:20;9432:1;9425:31;9475:4;9472:1;9465:15;9499:4;9496:1;9489:15;9515:125;9580:9;;;9601:10;;;9598:36;;;9614:18;;:::i;10001:168::-;10074:9;;;10105;;10122:15;;;10116:22;;10102:37;10092:71;;10143:18;;:::i;10174:217::-;10214:1;10240;10230:132;;10284:10;10279:3;10275:20;10272:1;10265:31;10319:4;10316:1;10309:15;10347:4;10344:1;10337:15;10230:132;-1:-1:-1;10376:9:1;;10174:217::o;11426:230::-;11496:6;11549:2;11537:9;11528:7;11524:23;11520:32;11517:52;;;11565:1;11562;11555:12;11517:52;-1:-1:-1;11610:16:1;;11426:230;-1:-1:-1;11426:230:1:o;11940:245::-;12007:6;12060:2;12048:9;12039:7;12035:23;12031:32;12028:52;;;12076:1;12073;12066:12;12028:52;12108:9;12102:16;12127:28;12149:5;12127:28;:::i;12597:128::-;12664:9;;;12685:11;;;12682:37;;;12699:18;;:::i;15444:959::-;15706:4;15754:3;15743:9;15739:19;15785:6;15774:9;15767:25;15828:6;15823:2;15812:9;15808:18;15801:34;15871:3;15866:2;15855:9;15851:18;15844:31;15895:6;15930;15924:13;15961:6;15953;15946:22;15999:3;15988:9;15984:19;15977:26;;16038:2;16030:6;16026:15;16012:29;;16059:1;16069:195;16083:6;16080:1;16077:13;16069:195;;;16148:13;;-1:-1:-1;;;;;16144:39:1;16132:52;;16213:2;16239:15;;;;16204:12;;;;16180:1;16098:9;16069:195;;;-1:-1:-1;;;;;;;16320:32:1;;;;16315:2;16300:18;;16293:60;-1:-1:-1;;16384:3:1;16369:19;16362:35;16281:3;15444:959;-1:-1:-1;;;15444:959:1:o;17226:456::-;17314:6;17322;17330;17383:2;17371:9;17362:7;17358:23;17354:32;17351:52;;;17399:1;17396;17389:12;17351:52;-1:-1:-1;;17444:16:1;;17550:2;17535:18;;17529:25;17646:2;17631:18;;;17625:25;17444:16;;17529:25;;-1:-1:-1;17625:25:1;17226:456;-1:-1:-1;17226:456:1:o

Swarm Source

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