ETH Price: $2,665.03 (+9.94%)
Gas: 2 Gwei

Token

Groki (GROKI)
 

Overview

Max Total Supply

690,420,000,000 GROKI

Holders

87

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
13,808,400,000 GROKI

Value
$0.00
0xb04e6373eb593ffd093c0377075ed3e06ae2fa98
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:
Groki

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-05
*/

/*
Telegram: https://t.me/grokitoken
Website: groki.lol

*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

pragma solidity ^0.8.4;
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.4;
/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

pragma solidity ^0.8.4;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity ^0.8.4;

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

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

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

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

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

pragma solidity ^0.8.4;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

pragma solidity ^0.8.4;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

pragma solidity ^0.8.4;

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () public {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

pragma solidity ^0.8.4;

contract Groki is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    mapping (address => uint256) public _rOwned;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExcludedFromFee;
    mapping(address => bool) public _isBlacklisted;

    address public _PresaleAddress = 0x000000000000000000000000000000000000dEaD;
    bool public tradingEnabled = false;
    bool public liquidityLaunched = false;
    bool public isFirstLaunch = true;
    uint256 public lastSnipeTaxBlock;
    uint8 public snipeBlocks = 1;

    modifier whenTradingEnabled() {
    require(tradingEnabled || _msgSender() == owner(), "Trading is not yet enabled");
    _;
    }
    

    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 690420000000000000000;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 1;
    
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 1;
    
    uint256 private _redisFee;
    uint256 private _taxFee;
    
    string private constant _name = "Groki";
    string private constant _symbol = "GROKI";
    uint8 private constant _decimals = 9;
    
    address payable private _appAddress = payable(0xfd1a67c468559C96E47De916C9Efc354D88BFAA5);
    address payable private _marketingAddress = payable(0xfd1a67c468559C96E47De916C9Efc354D88BFAA5);
    address payable private _buybackAddress = payable(0xfd1a67c468559C96E47De916C9Efc354D88BFAA5);
    address payable private _burnAddress = payable(0xfd1a67c468559C96E47De916C9Efc354D88BFAA5);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool private inSwap = false;
    bool private swapEnabled = true;
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_appAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;
        _isExcludedFromFee[_buybackAddress] = true;
        _isExcludedFromFee[_burnAddress] = true;

        emit Transfer(address(0x0000000000000000000000000000000000000000), _msgSender(), _tTotal);
    }

    function setSnipeBlocks(uint8 _blocks) external onlyOwner {
        require(!tradingEnabled);
        snipeBlocks = _blocks;
    }

    function setPresaleContract(address payable wallet) external onlyOwner{
        _PresaleAddress = wallet;
        excludeFromFees(_PresaleAddress, true);
    }

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

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

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

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

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

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function enableTrading() external onlyOwner {
    require(!tradingEnabled, "Trading is already enabled");
    lastSnipeTaxBlock = block.number + snipeBlocks;
    tradingEnabled = true;
}

    function _transfer(address from, address to, uint256 amount) private {
        if (from != owner())
        require(tradingEnabled == true);
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlacklisted[from], 'Blacklisted address');

        _redisFee = 0;
        _taxFee = 0;

        if (!liquidityLaunched) {
            if (to == uniswapV2Pair) {
                liquidityLaunched = true;
                // high tax ends in x blocks
            }
        }

        //antibot block
        if (from != address(_PresaleAddress)) {
            if(tradingEnabled && block.number <= lastSnipeTaxBlock && !isFirstLaunch){
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
                _tokenTransfer(from,to,amount);
                if (to != address(uniswapV2Pair)) {
                    _isBlacklisted[to]=true;
                }
                return;
            }
        }

        if (tradingEnabled && isFirstLaunch){
            isFirstLaunch = false;
        }
        
        if (from != owner() && to != owner()) {
            
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && from != uniswapV2Pair && swapEnabled && contractTokenBalance > 0) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
            
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }
    
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
            
            if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
                _redisFee = 0;
                _taxFee = 0;
            }
            
        }

        _tokenTransfer(from,to,amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        uint256 devAmount = amount.mul(2).div(7);
        uint256 mktAmount = amount.mul(2).div(7);
        uint256 buybackAmount = amount.mul(2).div(7);
        uint256 burnAmount = amount.sub(devAmount).sub(mktAmount).sub(buybackAmount);
        _appAddress.transfer(devAmount);
        _marketingAddress.transfer(mktAmount);
        _buybackAddress.transfer(buybackAmount);
        _burnAddress.transfer(burnAmount);
    }
    
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        _transferStandard(sender, recipient, amount);
    }

    event tokensRescued(address indexed token, address indexed to, uint amount);
    function rescueForeignTokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        emit tokensRescued(_tokenAddr, _to, _amount);	
        IERC20(_tokenAddr).transfer(_to, _amount);
    }
    
    event appAddressUpdated(address indexed previous, address indexed adr);
    function setNewAppAddress(address payable appaddr) public onlyOwner {
        emit appAddressUpdated(_appAddress, appaddr);	
        _appAddress = appaddr;
        _isExcludedFromFee[_appAddress] = true;
    }
    
    event marketingAddressUpdated(address indexed previous, address indexed adr);
    function setNewMarketingAddress(address payable markt) public onlyOwner {
        emit marketingAddressUpdated(_marketingAddress, markt);	
        _marketingAddress = markt;
        _isExcludedFromFee[_marketingAddress] = true;
    }

    event burnAddressUpdated(address indexed previous, address indexed adr);
    function setNewBurnAddress(address payable burnaddr) public onlyOwner {
        emit burnAddressUpdated(_burnAddress, burnaddr);	
        _burnAddress = burnaddr;
        _isExcludedFromFee[_burnAddress] = true;
    }

    event buybackAddressUpdated(address indexed previous, address indexed adr);
    function setNewBuybackAddress(address payable buybackaddr) public onlyOwner {
        emit buybackAddressUpdated(_buybackAddress, buybackaddr);	
        _buybackAddress = buybackaddr;
        _isExcludedFromFee[_buybackAddress] = true;
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        uint256 tTransferAmount = tAmount.sub(tAmount.mul(_redisFee).div(100)).sub(tAmount.mul(_taxFee).div(100));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tAmount.mul(_redisFee).div(100).mul(currentRate);
        uint256 rTeam = tAmount.mul(_taxFee).div(100).mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
        _reflectFee(rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    /**
     * only thing to change _rTotal
     */
    function _reflectFee(uint256 rFee) private {
        _rTotal = _rTotal.sub(rFee);
    }

    receive() external payable {}

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function manualswap() external {
        require(_msgSender() == owner());
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == owner());
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }
    
    function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
	    require(redisFeeOnBuy < 5, "Redis cannot be more than 5.");
	    require(redisFeeOnSell < 5, "Redis cannot be more than 5.");
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }
    
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    event ExcludeFromFees(address indexed account, bool isExcluded);
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    event BlacklistAddress(address indexed account, bool value);
    function blacklistAddress(address account, bool value) public onlyOwner{
        _isBlacklisted[account] = value;
        emit BlacklistAddress(account, value);
    }

    event BlacklistMultiAddresses(address[] accounts, bool value);
    function blacklistMultiAddresses(address[] calldata accounts, bool value) public onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++) {
            _isBlacklisted[accounts[i]] = value;
        }
        emit BlacklistMultiAddresses(accounts, value);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistMultiAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"appAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"burnAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"buybackAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"marketingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensRescued","type":"event"},{"inputs":[],"name":"_PresaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMultiAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isFirstLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSnipeTaxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueForeignTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"appaddr","type":"address"}],"name":"setNewAppAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"burnaddr","type":"address"}],"name":"setNewBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"buybackaddr","type":"address"}],"name":"setNewBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"markt","type":"address"}],"name":"setNewMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setPresaleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_blocks","type":"uint8"}],"name":"setSnipeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeBlocks","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600580546001600160b81b03191676010000000000000000000000000000000000000000dead1790556007805460ff191660011790556200005168256d8093ff81320000600019620003a4565b6200005f90600019620003c7565b600855600060098190556001600a819055600b91909155600c55600f80546001600160a01b031990811673fd1a67c468559c96e47de916c9efc354d88bfaa590811790925560108054821683179055601180548216831790556012805490911690911790556014805461ffff60a01b1916600160a81b179055348015620000e557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506008543360009081526001602090815260409182902092909255601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b815291519092839263c45a015592600480830193928290030181865afa158015620001a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c99190620003ef565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d9190620003ef565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b19190620003ef565b601480546001600160a01b0319166001600160a01b03928316179055600080548216815260036020526040808220805460ff1990811660019081179092553084528284208054821683179055600f54851684528284208054821683179055601054851684528284208054821683179055601154851684528284208054821683179055601254909416835291208054909216179055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef68256d8093ff813200006040516200039591815260200190565b60405180910390a35062000421565b600082620003c257634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620003e957634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200040257600080fd5b81516001600160a01b03811681146200041a57600080fd5b9392505050565b61241f80620004316000396000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063a9bbd114116100ab578063c492f0461161006f578063c492f046146106d6578063dd62ed3e146106f6578063e293d3161461073c578063f2fde38b1461075c578063fca419ae1461077c57600080fd5b8063a9bbd11414610641578063a9f6151814610661578063aa77ed6714610681578063c0246668146106a1578063c3c8cd80146106c157600080fd5b806395d89b41116100f257806395d89b41146105935780639f3d1360146105c1578063a2a957bb146105e1578063a2fff11414610601578063a9059cbb1461062157600080fd5b8063715018a6146104fb578063758dbe0314610510578063768dc710146105305780638a8c523c146105605780638da5cb5b1461057557600080fd5b806323b872dd116101bc5780634ada218b116101805780634ada218b1461046f5780636a1961c4146104905780636d8aa8f8146104a65780636fc3eaec146104c657806370a08231146104db57600080fd5b806323b872dd146103cd5780632be29fa8146103ed578063313ce56714610419578063455a43961461042d57806349bd5a5e1461044f57600080fd5b80631694505e116102035780631694505e1461031f578063181281291461033f57806318160ddd146103605780631cdd3be31461037c5780631eb147d5146103ac57600080fd5b8063032bba6a1461024057806306fdde031461027d578063095ea7b3146102b45780630cfc15f9146102e457600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b50600554610260906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561028957600080fd5b5060408051808201909152600581526447726f6b6960d81b60208201525b6040516102749190611f8a565b3480156102c057600080fd5b506102d46102cf366004611fed565b61079c565b6040519015158152602001610274565b3480156102f057600080fd5b506103116102ff366004612019565b60016020526000908152604090205481565b604051908152602001610274565b34801561032b57600080fd5b50601354610260906001600160a01b031681565b34801561034b57600080fd5b506005546102d490600160b01b900460ff1681565b34801561036c57600080fd5b5068256d8093ff81320000610311565b34801561038857600080fd5b506102d4610397366004612019565b60046020526000908152604090205460ff1681565b3480156103b857600080fd5b506005546102d490600160a81b900460ff1681565b3480156103d957600080fd5b506102d46103e8366004612036565b6107b3565b3480156103f957600080fd5b506007546104079060ff1681565b60405160ff9091168152602001610274565b34801561042557600080fd5b506009610407565b34801561043957600080fd5b5061044d610448366004612085565b61081c565b005b34801561045b57600080fd5b50601454610260906001600160a01b031681565b34801561047b57600080fd5b506005546102d490600160a01b900460ff1681565b34801561049c57600080fd5b5061031160065481565b3480156104b257600080fd5b5061044d6104c13660046120be565b6108af565b3480156104d257600080fd5b5061044d6108f7565b3480156104e757600080fd5b506103116104f6366004612019565b61091b565b34801561050757600080fd5b5061044d61093d565b34801561051c57600080fd5b5061044d61052b366004612019565b6109b1565b34801561053c57600080fd5b506102d461054b366004612019565b60036020526000908152604090205460ff1681565b34801561056c57600080fd5b5061044d610a4f565b34801561058157600080fd5b506000546001600160a01b0316610260565b34801561059f57600080fd5b5060408051808201909152600581526447524f4b4960d81b60208201526102a7565b3480156105cd57600080fd5b5061044d6105dc366004612019565b610afb565b3480156105ed57600080fd5b5061044d6105fc3660046120db565b610b99565b34801561060d57600080fd5b5061044d61061c366004612019565b610c77565b34801561062d57600080fd5b506102d461063c366004611fed565b610d15565b34801561064d57600080fd5b5061044d61065c366004612019565b610d22565b34801561066d57600080fd5b5061044d61067c36600461210d565b610d75565b34801561068d57600080fd5b5061044d61069c366004612019565b610dcc565b3480156106ad57600080fd5b5061044d6106bc366004612085565b610e6a565b3480156106cd57600080fd5b5061044d610eec565b3480156106e257600080fd5b5061044d6106f1366004612130565b610f19565b34801561070257600080fd5b506103116107113660046121b6565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561074857600080fd5b5061044d610757366004612036565b610ff5565b34801561076857600080fd5b5061044d610777366004612019565b6110e5565b34801561078857600080fd5b5061044d610797366004612130565b6111cf565b60006107a933848461129e565b5060015b92915050565b60006107c08484846113c2565b610812843361080d856040518060600160405280602881526020016123c2602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611843565b61129e565b5060019392505050565b6000546001600160a01b0316331461084f5760405162461bcd60e51b8152600401610846906121e4565b60405180910390fd5b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b6000546001600160a01b031633146108d95760405162461bcd60e51b8152600401610846906121e4565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461090e57600080fd5b476109188161187d565b50565b6001600160a01b0381166000908152600160205260408120546107ad906119cb565b6000546001600160a01b031633146109675760405162461bcd60e51b8152600401610846906121e4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109db5760405162461bcd60e51b8152600401610846906121e4565b6010546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b90600090a3601080546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610a795760405162461bcd60e51b8152600401610846906121e4565b600554600160a01b900460ff1615610ad35760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610846565b600754610ae39060ff164361222f565b6006556005805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b255760405162461bcd60e51b8152600401610846906121e4565b600f546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c3990600090a3600f80546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610bc35760405162461bcd60e51b8152600401610846906121e4565b60058410610c135760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610846565b60058310610c635760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610846565b600993909355600b91909155600a55600c55565b6000546001600160a01b03163314610ca15760405162461bcd60e51b8152600401610846906121e4565b6011546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc90600090a3601180546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b60006107a93384846113c2565b6000546001600160a01b03163314610d4c5760405162461bcd60e51b8152600401610846906121e4565b600580546001600160a01b0319166001600160a01b038316908117909155610918906001610e6a565b6000546001600160a01b03163314610d9f5760405162461bcd60e51b8152600401610846906121e4565b600554600160a01b900460ff1615610db657600080fd5b6007805460ff191660ff92909216919091179055565b6000546001600160a01b03163314610df65760405162461bcd60e51b8152600401610846906121e4565b6012546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f4090600090a3601280546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610e945760405162461bcd60e51b8152600401610846906121e4565b6001600160a01b038216600081815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108a3565b6000546001600160a01b03163314610f0357600080fd5b6000610f0e3061091b565b905061091881611a4f565b6000546001600160a01b03163314610f435760405162461bcd60e51b8152600401610846906121e4565b60005b82811015610fb4578160036000868685818110610f6557610f65612242565b9050602002016020810190610f7a9190612019565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610fac81612258565b915050610f46565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051610fe893929190612271565b60405180910390a1505050565b6000546001600160a01b0316331461101f5760405162461bcd60e51b8152600401610846906121e4565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161106491815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156110bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110df91906122ca565b50505050565b6000546001600160a01b0316331461110f5760405162461bcd60e51b8152600401610846906121e4565b6001600160a01b0381166111745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610846565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111f95760405162461bcd60e51b8152600401610846906121e4565b60005b8281101561126a57816004600086868581811061121b5761121b612242565b90506020020160208101906112309190612019565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061126281612258565b9150506111fc565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf6838383604051610fe893929190612271565b6001600160a01b0383166113005760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610846565b6001600160a01b0382166113615760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610846565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b038481169116146113f257600554600160a01b900460ff1615156001146113f257600080fd5b6001600160a01b0383166114565760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610846565b6001600160a01b0382166114b85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610846565b6000811161151a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610846565b6001600160a01b03831660009081526004602052604090205460ff16156115795760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610846565b6000600d819055600e55600554600160a81b900460ff166115be576014546001600160a01b03908116908316036115be576005805460ff60a81b1916600160a81b1790555b6005546001600160a01b0384811691161461165e57600554600160a01b900460ff1680156115ee57506006544311155b80156116045750600554600160b01b900460ff16155b1561165e57600954600d55600a54600e55611620838383611bc9565b6014546001600160a01b03838116911614611659576001600160a01b0382166000908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156116805750600554600160b01b900460ff165b15611693576005805460ff60b01b191690555b6000546001600160a01b038481169116148015906116bf57506000546001600160a01b03838116911614155b156118385760006116cf3061091b565b601454909150600160a01b900460ff161580156116fa57506014546001600160a01b03858116911614155b801561170f5750601454600160a81b900460ff165b801561171b5750600081115b1561173b5761172981611a4f565b478015611739576117394761187d565b505b6014546001600160a01b03858116911614801561176657506013546001600160a01b03848116911614155b1561177857600954600d55600a54600e555b6014546001600160a01b0384811691161480156117a357506013546001600160a01b03858116911614155b156117b557600b54600d55600c54600e555b6001600160a01b03841660009081526003602052604090205460ff16806117f457506001600160a01b03831660009081526003602052604090205460ff165b8061182657506014546001600160a01b0385811691161480159061182657506014546001600160a01b03848116911614155b15611836576000600d819055600e555b505b611659838383611bc9565b600081848411156118675760405162461bcd60e51b81526004016108469190611f8a565b50600061187484866122e7565b95945050505050565b6000611895600761188f846002611bd4565b90611c56565b905060006118a9600761188f856002611bd4565b905060006118bd600761188f866002611bd4565b905060006118d7826118d185818989611c98565b90611c98565b600f546040519192506001600160a01b03169085156108fc029086906000818181858888f19350505050158015611912573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561194d573d6000803e3d6000fd5b506011546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611988573d6000803e3d6000fd5b506012546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156119c3573d6000803e3d6000fd5b505050505050565b6000600854821115611a325760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610846565b6000611a3c611cda565b9050611a488382611c56565b9392505050565b6014805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9757611a97612242565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1491906122fa565b81600181518110611b2757611b27612242565b6001600160a01b039283166020918202929092010152601354611b4d913091168461129e565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b86908590600090869030904290600401612317565b600060405180830381600087803b158015611ba057600080fd5b505af1158015611bb4573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b611659838383611cfd565b600082600003611be6575060006107ad565b6000611bf28385612388565b905082611bff858361239f565b14611a485760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610846565b6000611a4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ea8565b6000611a4883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611843565b6000806000611ce7611ed6565b9092509050611cf68282611c56565b9250505090565b6000611d07611cda565b90506000611d4c611d28606461188f600e5487611bd490919063ffffffff16565b6118d1611d45606461188f600d5489611bd490919063ffffffff16565b8690611c98565b90506000611d5a8484611bd4565b90506000611d8284611d7c606461188f600d548a611bd490919063ffffffff16565b90611bd4565b90506000611da485611d7c606461188f600e548b611bd490919063ffffffff16565b90506000611db6826118d18686611c98565b6001600160a01b038a16600090815260016020526040902054909150611ddc9085611c98565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611e0b9082611f18565b6001600160a01b038916600090815260016020526040808220929092553081522054611e379083611f18565b30600090815260016020526040902055611e5083611f77565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611e9591815260200190565b60405180910390a3505050505050505050565b60008183611ec95760405162461bcd60e51b81526004016108469190611f8a565b506000611874848661239f565b600854600090819068256d8093ff81320000611ef28282611c56565b821015611f0f5750506008549268256d8093ff8132000092509050565b90939092509050565b600080611f25838561222f565b905083811015611a485760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610846565b600854611f849082611c98565b60085550565b600060208083528351808285015260005b81811015611fb757858101830151858201604001528201611f9b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461091857600080fd5b6000806040838503121561200057600080fd5b823561200b81611fd8565b946020939093013593505050565b60006020828403121561202b57600080fd5b8135611a4881611fd8565b60008060006060848603121561204b57600080fd5b833561205681611fd8565b9250602084013561206681611fd8565b929592945050506040919091013590565b801515811461091857600080fd5b6000806040838503121561209857600080fd5b82356120a381611fd8565b915060208301356120b381612077565b809150509250929050565b6000602082840312156120d057600080fd5b8135611a4881612077565b600080600080608085870312156120f157600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561211f57600080fd5b813560ff81168114611a4857600080fd5b60008060006040848603121561214557600080fd5b833567ffffffffffffffff8082111561215d57600080fd5b818601915086601f83011261217157600080fd5b81358181111561218057600080fd5b8760208260051b850101111561219557600080fd5b602092830195509350508401356121ab81612077565b809150509250925092565b600080604083850312156121c957600080fd5b82356121d481611fd8565b915060208301356120b381611fd8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156107ad576107ad612219565b634e487b7160e01b600052603260045260246000fd5b60006001820161226a5761226a612219565b5060010190565b6040808252810183905260008460608301825b868110156122b457823561229781611fd8565b6001600160a01b0316825260209283019290910190600101612284565b5080925050508215156020830152949350505050565b6000602082840312156122dc57600080fd5b8151611a4881612077565b818103818111156107ad576107ad612219565b60006020828403121561230c57600080fd5b8151611a4881611fd8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123675784516001600160a01b031683529383019391830191600101612342565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107ad576107ad612219565b6000826123bc57634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220394327f72236a46ef6c3298c0d70d402eb968cbf20e1d5d9e74ca626341719a564736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063a9bbd114116100ab578063c492f0461161006f578063c492f046146106d6578063dd62ed3e146106f6578063e293d3161461073c578063f2fde38b1461075c578063fca419ae1461077c57600080fd5b8063a9bbd11414610641578063a9f6151814610661578063aa77ed6714610681578063c0246668146106a1578063c3c8cd80146106c157600080fd5b806395d89b41116100f257806395d89b41146105935780639f3d1360146105c1578063a2a957bb146105e1578063a2fff11414610601578063a9059cbb1461062157600080fd5b8063715018a6146104fb578063758dbe0314610510578063768dc710146105305780638a8c523c146105605780638da5cb5b1461057557600080fd5b806323b872dd116101bc5780634ada218b116101805780634ada218b1461046f5780636a1961c4146104905780636d8aa8f8146104a65780636fc3eaec146104c657806370a08231146104db57600080fd5b806323b872dd146103cd5780632be29fa8146103ed578063313ce56714610419578063455a43961461042d57806349bd5a5e1461044f57600080fd5b80631694505e116102035780631694505e1461031f578063181281291461033f57806318160ddd146103605780631cdd3be31461037c5780631eb147d5146103ac57600080fd5b8063032bba6a1461024057806306fdde031461027d578063095ea7b3146102b45780630cfc15f9146102e457600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b50600554610260906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561028957600080fd5b5060408051808201909152600581526447726f6b6960d81b60208201525b6040516102749190611f8a565b3480156102c057600080fd5b506102d46102cf366004611fed565b61079c565b6040519015158152602001610274565b3480156102f057600080fd5b506103116102ff366004612019565b60016020526000908152604090205481565b604051908152602001610274565b34801561032b57600080fd5b50601354610260906001600160a01b031681565b34801561034b57600080fd5b506005546102d490600160b01b900460ff1681565b34801561036c57600080fd5b5068256d8093ff81320000610311565b34801561038857600080fd5b506102d4610397366004612019565b60046020526000908152604090205460ff1681565b3480156103b857600080fd5b506005546102d490600160a81b900460ff1681565b3480156103d957600080fd5b506102d46103e8366004612036565b6107b3565b3480156103f957600080fd5b506007546104079060ff1681565b60405160ff9091168152602001610274565b34801561042557600080fd5b506009610407565b34801561043957600080fd5b5061044d610448366004612085565b61081c565b005b34801561045b57600080fd5b50601454610260906001600160a01b031681565b34801561047b57600080fd5b506005546102d490600160a01b900460ff1681565b34801561049c57600080fd5b5061031160065481565b3480156104b257600080fd5b5061044d6104c13660046120be565b6108af565b3480156104d257600080fd5b5061044d6108f7565b3480156104e757600080fd5b506103116104f6366004612019565b61091b565b34801561050757600080fd5b5061044d61093d565b34801561051c57600080fd5b5061044d61052b366004612019565b6109b1565b34801561053c57600080fd5b506102d461054b366004612019565b60036020526000908152604090205460ff1681565b34801561056c57600080fd5b5061044d610a4f565b34801561058157600080fd5b506000546001600160a01b0316610260565b34801561059f57600080fd5b5060408051808201909152600581526447524f4b4960d81b60208201526102a7565b3480156105cd57600080fd5b5061044d6105dc366004612019565b610afb565b3480156105ed57600080fd5b5061044d6105fc3660046120db565b610b99565b34801561060d57600080fd5b5061044d61061c366004612019565b610c77565b34801561062d57600080fd5b506102d461063c366004611fed565b610d15565b34801561064d57600080fd5b5061044d61065c366004612019565b610d22565b34801561066d57600080fd5b5061044d61067c36600461210d565b610d75565b34801561068d57600080fd5b5061044d61069c366004612019565b610dcc565b3480156106ad57600080fd5b5061044d6106bc366004612085565b610e6a565b3480156106cd57600080fd5b5061044d610eec565b3480156106e257600080fd5b5061044d6106f1366004612130565b610f19565b34801561070257600080fd5b506103116107113660046121b6565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561074857600080fd5b5061044d610757366004612036565b610ff5565b34801561076857600080fd5b5061044d610777366004612019565b6110e5565b34801561078857600080fd5b5061044d610797366004612130565b6111cf565b60006107a933848461129e565b5060015b92915050565b60006107c08484846113c2565b610812843361080d856040518060600160405280602881526020016123c2602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611843565b61129e565b5060019392505050565b6000546001600160a01b0316331461084f5760405162461bcd60e51b8152600401610846906121e4565b60405180910390fd5b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b6000546001600160a01b031633146108d95760405162461bcd60e51b8152600401610846906121e4565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461090e57600080fd5b476109188161187d565b50565b6001600160a01b0381166000908152600160205260408120546107ad906119cb565b6000546001600160a01b031633146109675760405162461bcd60e51b8152600401610846906121e4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109db5760405162461bcd60e51b8152600401610846906121e4565b6010546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b90600090a3601080546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610a795760405162461bcd60e51b8152600401610846906121e4565b600554600160a01b900460ff1615610ad35760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610846565b600754610ae39060ff164361222f565b6006556005805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b255760405162461bcd60e51b8152600401610846906121e4565b600f546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c3990600090a3600f80546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610bc35760405162461bcd60e51b8152600401610846906121e4565b60058410610c135760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610846565b60058310610c635760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610846565b600993909355600b91909155600a55600c55565b6000546001600160a01b03163314610ca15760405162461bcd60e51b8152600401610846906121e4565b6011546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc90600090a3601180546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b60006107a93384846113c2565b6000546001600160a01b03163314610d4c5760405162461bcd60e51b8152600401610846906121e4565b600580546001600160a01b0319166001600160a01b038316908117909155610918906001610e6a565b6000546001600160a01b03163314610d9f5760405162461bcd60e51b8152600401610846906121e4565b600554600160a01b900460ff1615610db657600080fd5b6007805460ff191660ff92909216919091179055565b6000546001600160a01b03163314610df65760405162461bcd60e51b8152600401610846906121e4565b6012546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f4090600090a3601280546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610e945760405162461bcd60e51b8152600401610846906121e4565b6001600160a01b038216600081815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108a3565b6000546001600160a01b03163314610f0357600080fd5b6000610f0e3061091b565b905061091881611a4f565b6000546001600160a01b03163314610f435760405162461bcd60e51b8152600401610846906121e4565b60005b82811015610fb4578160036000868685818110610f6557610f65612242565b9050602002016020810190610f7a9190612019565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610fac81612258565b915050610f46565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051610fe893929190612271565b60405180910390a1505050565b6000546001600160a01b0316331461101f5760405162461bcd60e51b8152600401610846906121e4565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161106491815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156110bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110df91906122ca565b50505050565b6000546001600160a01b0316331461110f5760405162461bcd60e51b8152600401610846906121e4565b6001600160a01b0381166111745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610846565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111f95760405162461bcd60e51b8152600401610846906121e4565b60005b8281101561126a57816004600086868581811061121b5761121b612242565b90506020020160208101906112309190612019565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061126281612258565b9150506111fc565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf6838383604051610fe893929190612271565b6001600160a01b0383166113005760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610846565b6001600160a01b0382166113615760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610846565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b038481169116146113f257600554600160a01b900460ff1615156001146113f257600080fd5b6001600160a01b0383166114565760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610846565b6001600160a01b0382166114b85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610846565b6000811161151a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610846565b6001600160a01b03831660009081526004602052604090205460ff16156115795760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610846565b6000600d819055600e55600554600160a81b900460ff166115be576014546001600160a01b03908116908316036115be576005805460ff60a81b1916600160a81b1790555b6005546001600160a01b0384811691161461165e57600554600160a01b900460ff1680156115ee57506006544311155b80156116045750600554600160b01b900460ff16155b1561165e57600954600d55600a54600e55611620838383611bc9565b6014546001600160a01b03838116911614611659576001600160a01b0382166000908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156116805750600554600160b01b900460ff165b15611693576005805460ff60b01b191690555b6000546001600160a01b038481169116148015906116bf57506000546001600160a01b03838116911614155b156118385760006116cf3061091b565b601454909150600160a01b900460ff161580156116fa57506014546001600160a01b03858116911614155b801561170f5750601454600160a81b900460ff165b801561171b5750600081115b1561173b5761172981611a4f565b478015611739576117394761187d565b505b6014546001600160a01b03858116911614801561176657506013546001600160a01b03848116911614155b1561177857600954600d55600a54600e555b6014546001600160a01b0384811691161480156117a357506013546001600160a01b03858116911614155b156117b557600b54600d55600c54600e555b6001600160a01b03841660009081526003602052604090205460ff16806117f457506001600160a01b03831660009081526003602052604090205460ff165b8061182657506014546001600160a01b0385811691161480159061182657506014546001600160a01b03848116911614155b15611836576000600d819055600e555b505b611659838383611bc9565b600081848411156118675760405162461bcd60e51b81526004016108469190611f8a565b50600061187484866122e7565b95945050505050565b6000611895600761188f846002611bd4565b90611c56565b905060006118a9600761188f856002611bd4565b905060006118bd600761188f866002611bd4565b905060006118d7826118d185818989611c98565b90611c98565b600f546040519192506001600160a01b03169085156108fc029086906000818181858888f19350505050158015611912573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561194d573d6000803e3d6000fd5b506011546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611988573d6000803e3d6000fd5b506012546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156119c3573d6000803e3d6000fd5b505050505050565b6000600854821115611a325760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610846565b6000611a3c611cda565b9050611a488382611c56565b9392505050565b6014805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9757611a97612242565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1491906122fa565b81600181518110611b2757611b27612242565b6001600160a01b039283166020918202929092010152601354611b4d913091168461129e565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b86908590600090869030904290600401612317565b600060405180830381600087803b158015611ba057600080fd5b505af1158015611bb4573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b611659838383611cfd565b600082600003611be6575060006107ad565b6000611bf28385612388565b905082611bff858361239f565b14611a485760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610846565b6000611a4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ea8565b6000611a4883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611843565b6000806000611ce7611ed6565b9092509050611cf68282611c56565b9250505090565b6000611d07611cda565b90506000611d4c611d28606461188f600e5487611bd490919063ffffffff16565b6118d1611d45606461188f600d5489611bd490919063ffffffff16565b8690611c98565b90506000611d5a8484611bd4565b90506000611d8284611d7c606461188f600d548a611bd490919063ffffffff16565b90611bd4565b90506000611da485611d7c606461188f600e548b611bd490919063ffffffff16565b90506000611db6826118d18686611c98565b6001600160a01b038a16600090815260016020526040902054909150611ddc9085611c98565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611e0b9082611f18565b6001600160a01b038916600090815260016020526040808220929092553081522054611e379083611f18565b30600090815260016020526040902055611e5083611f77565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611e9591815260200190565b60405180910390a3505050505050505050565b60008183611ec95760405162461bcd60e51b81526004016108469190611f8a565b506000611874848661239f565b600854600090819068256d8093ff81320000611ef28282611c56565b821015611f0f5750506008549268256d8093ff8132000092509050565b90939092509050565b600080611f25838561222f565b905083811015611a485760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610846565b600854611f849082611c98565b60085550565b600060208083528351808285015260005b81811015611fb757858101830151858201604001528201611f9b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461091857600080fd5b6000806040838503121561200057600080fd5b823561200b81611fd8565b946020939093013593505050565b60006020828403121561202b57600080fd5b8135611a4881611fd8565b60008060006060848603121561204b57600080fd5b833561205681611fd8565b9250602084013561206681611fd8565b929592945050506040919091013590565b801515811461091857600080fd5b6000806040838503121561209857600080fd5b82356120a381611fd8565b915060208301356120b381612077565b809150509250929050565b6000602082840312156120d057600080fd5b8135611a4881612077565b600080600080608085870312156120f157600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561211f57600080fd5b813560ff81168114611a4857600080fd5b60008060006040848603121561214557600080fd5b833567ffffffffffffffff8082111561215d57600080fd5b818601915086601f83011261217157600080fd5b81358181111561218057600080fd5b8760208260051b850101111561219557600080fd5b602092830195509350508401356121ab81612077565b809150509250925092565b600080604083850312156121c957600080fd5b82356121d481611fd8565b915060208301356120b381611fd8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156107ad576107ad612219565b634e487b7160e01b600052603260045260246000fd5b60006001820161226a5761226a612219565b5060010190565b6040808252810183905260008460608301825b868110156122b457823561229781611fd8565b6001600160a01b0316825260209283019290910190600101612284565b5080925050508215156020830152949350505050565b6000602082840312156122dc57600080fd5b8151611a4881612077565b818103818111156107ad576107ad612219565b60006020828403121561230c57600080fd5b8151611a4881611fd8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123675784516001600160a01b031683529383019391830191600101612342565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107ad576107ad612219565b6000826123bc57634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220394327f72236a46ef6c3298c0d70d402eb968cbf20e1d5d9e74ca626341719a564736f6c63430008130033

Deployed Bytecode Sourcemap

16449:13979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16779:75;;;;;;;;;;-1:-1:-1;16779:75:0;;;;-1:-1:-1;;;;;16779:75:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;16779:75:0;;;;;;;;19534:83;;;;;;;;;;-1:-1:-1;19604:5:0;;;;;;;;;;;;-1:-1:-1;;;19604:5:0;;;;19534:83;;;;;;;:::i;20386:161::-;;;;;;;;;;-1:-1:-1;20386:161:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;20386:161:0;1231:187:1;16538:43:0;;;;;;;;;;-1:-1:-1;16538:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1821:25:1;;;1809:2;1794:18;16538:43:0;1675:177:1;18170:41:0;;;;;;;;;;-1:-1:-1;18170:41:0;;;;-1:-1:-1;;;;;18170:41:0;;;16946:32;;;;;;;;;;-1:-1:-1;16946:32:0;;;;-1:-1:-1;;;16946:32:0;;;;;;19811:95;;;;;;;;;;-1:-1:-1;17298:21:0;19811:95;;16724:46;;;;;;;;;;-1:-1:-1;16724:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16902:37;;;;;;;;;;-1:-1:-1;16902:37:0;;;;-1:-1:-1;;;16902:37:0;;;;;;20555:313;;;;;;;;;;-1:-1:-1;20555:313:0;;;;;:::i;:::-;;:::i;17024:28::-;;;;;;;;;;-1:-1:-1;17024:28:0;;;;;;;;;;;2724:4:1;2712:17;;;2694:36;;2682:2;2667:18;17024:28:0;2552:184:1;19720:83:0;;;;;;;;;;-1:-1:-1;17759:1:0;19720:83;;29907:169;;;;;;;;;;-1:-1:-1;29907:169:0;;;;;:::i;:::-;;:::i;:::-;;18218:28;;;;;;;;;;-1:-1:-1;18218:28:0;;;;-1:-1:-1;;;;;18218:28:0;;;16861:34;;;;;;;;;;-1:-1:-1;16861:34:0;;;;-1:-1:-1;;;16861:34:0;;;;;;16985:32;;;;;;;;;;;;;;;;29083:101;;;;;;;;;;-1:-1:-1;29083:101:0;;;;;:::i;:::-;;:::i;28449:186::-;;;;;;;;;;;;;:::i;19914:138::-;;;;;;;;;;-1:-1:-1;19914:138:0;;;;;:::i;:::-;;:::i;15868:148::-;;;;;;;;;;;;;:::i;25928:237::-;;;;;;;;;;-1:-1:-1;25928:237:0;;;;;:::i;:::-;;:::i;16666:51::-;;;;;;;;;;-1:-1:-1;16666:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21481:190;;;;;;;;;;;;;:::i;15226:79::-;;;;;;;;;;-1:-1:-1;15264:7:0;15291:6;-1:-1:-1;;;;;15291:6:0;15226:79;;19625:87;;;;;;;;;;-1:-1:-1;19697:7:0;;;;;;;;;;;;-1:-1:-1;;;19697:7:0;;;;19625:87;;25620:213;;;;;;;;;;-1:-1:-1;25620:213:0;;;;;:::i;:::-;;:::i;28647:424::-;;;;;;;;;;-1:-1:-1;28647:424:0;;;;;:::i;:::-;;:::i;26561:245::-;;;;;;;;;;-1:-1:-1;26561:245:0;;;;;:::i;:::-;;:::i;20060:167::-;;;;;;;;;;-1:-1:-1;20060:167:0;;;;;:::i;:::-;;:::i;19364:162::-;;;;;;;;;;-1:-1:-1;19364:162:0;;;;;:::i;:::-;;:::i;19223:133::-;;;;;;;;;;-1:-1:-1;19223:133:0;;;;;:::i;:::-;;:::i;26251:221::-;;;;;;;;;;-1:-1:-1;26251:221:0;;;;;:::i;:::-;;:::i;29652:181::-;;;;;;;;;;-1:-1:-1;29652:181:0;;;;;:::i;:::-;;:::i;28254:187::-;;;;;;;;;;;;;:::i;29273:301::-;;;;;;;;;;-1:-1:-1;29273:301:0;;;;;:::i;:::-;;:::i;20235:143::-;;;;;;;;;;-1:-1:-1;20235:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20343:18:0;;;20316:7;20343:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20235:143;25322:209;;;;;;;;;;-1:-1:-1;25322:209:0;;;;;:::i;:::-;;:::i;16171:244::-;;;;;;;;;;-1:-1:-1;16171:244:0;;;;;:::i;:::-;;:::i;30152:271::-;;;;;;;;;;-1:-1:-1;30152:271:0;;;;;:::i;:::-;;:::i;20386:161::-;20461:4;20478:39;3517:10;20501:7;20510:6;20478:8;:39::i;:::-;-1:-1:-1;20535:4:0;20386:161;;;;;:::o;20555:313::-;20653:4;20670:36;20680:6;20688:9;20699:6;20670:9;:36::i;:::-;20717:121;20726:6;3517:10;20748:89;20786:6;20748:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20748:19:0;;;;;;:11;:19;;;;;;;;3517:10;20748:33;;;;;;;;;;:37;:89::i;:::-;20717:8;:121::i;:::-;-1:-1:-1;20856:4:0;20555:313;;;;;:::o;29907:169::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;29989:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;29989:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30036:32;;1371:41:1;;;30036:32:0::1;::::0;1344:18:1;30036:32:0::1;;;;;;;;29907:169:::0;;:::o;29083:101::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;29150:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;29150:26:0::1;-1:-1:-1::0;;;;29150:26:0;;::::1;::::0;;;::::1;::::0;;29083:101::o;28449:186::-;15264:7;15291:6;-1:-1:-1;;;;;15291:6:0;3517:10;28499:23;28491:32;;;;;;28563:21;28595:32;28563:21;28595:12;:32::i;:::-;28480:155;28449:186::o;19914:138::-;-1:-1:-1;;;;;20027:16:0;;19980:7;20027:16;;;:7;:16;;;;;;20007:37;;:19;:37::i;15868:148::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;15975:1:::1;15959:6:::0;;15938:40:::1;::::0;-1:-1:-1;;;;;15959:6:0;;::::1;::::0;15938:40:::1;::::0;15975:1;;15938:40:::1;16006:1;15989:19:::0;;-1:-1:-1;;;;;;15989:19:0::1;::::0;;15868:148::o;25928:237::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;26040:17:::1;::::0;26016:49:::1;::::0;-1:-1:-1;;;;;26016:49:0;;::::1;::::0;26040:17:::1;::::0;26016:49:::1;::::0;26040:17:::1;::::0;26016:49:::1;26077:17;:25:::0;;-1:-1:-1;;;;;26077:25:0;;::::1;-1:-1:-1::0;;;;;;26077:25:0;;::::1;::::0;::::1;::::0;;:17:::1;26113:37:::0;;;:18:::1;:37;::::0;;;;:44;;-1:-1:-1;;26113:44:0::1;26077:25:::0;26113:44:::1;::::0;;25928:237::o;21481:190::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;21541:14:::1;::::0;-1:-1:-1;;;21541:14:0;::::1;;;21540:15;21532:54;;;::::0;-1:-1:-1;;;21532:54:0;;6132:2:1;21532:54:0::1;::::0;::::1;6114:21:1::0;6171:2;6151:18;;;6144:30;6210:28;6190:18;;;6183:56;6256:18;;21532:54:0::1;5930:350:1::0;21532:54:0::1;21628:11;::::0;21613:26:::1;::::0;21628:11:::1;;21613:12;:26;:::i;:::-;21593:17;:46:::0;21646:14:::1;:21:::0;;-1:-1:-1;;;;21646:21:0::1;-1:-1:-1::0;;;21646:21:0::1;::::0;;21481:190::o;25620:213::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;25722:11:::1;::::0;25704:39:::1;::::0;-1:-1:-1;;;;;25704:39:0;;::::1;::::0;25722:11:::1;::::0;25704:39:::1;::::0;25722:11:::1;::::0;25704:39:::1;25755:11;:21:::0;;-1:-1:-1;;;;;25755:21:0;;::::1;-1:-1:-1::0;;;;;;25755:21:0;;::::1;::::0;::::1;::::0;;:11:::1;25787:31:::0;;;:18:::1;:31;::::0;;;;:38;;-1:-1:-1;;25787:38:0::1;25755:21:::0;25787:38:::1;::::0;;25620:213::o;28647:424::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;28802:1:::1;28786:13;:17;28778:58;;;::::0;-1:-1:-1;;;28778:58:0;;6749:2:1;28778:58:0::1;::::0;::::1;6731:21:1::0;6788:2;6768:18;;;6761:30;6827;6807:18;;;6800:58;6875:18;;28778:58:0::1;6547:352:1::0;28778:58:0::1;28869:1;28852:14;:18;28844:59;;;::::0;-1:-1:-1;;;28844:59:0;;6749:2:1;28844:59:0::1;::::0;::::1;6731:21:1::0;6788:2;6768:18;;;6761:30;6827;6807:18;;;6800:58;6875:18;;28844:59:0::1;6547:352:1::0;28844:59:0::1;28914:14;:30:::0;;;;28955:15:::1;:32:::0;;;;28998:12:::1;:26:::0;29035:13:::1;:28:::0;28647:424::o;26561:245::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;26675:15:::1;::::0;26653:51:::1;::::0;-1:-1:-1;;;;;26653:51:0;;::::1;::::0;26675:15:::1;::::0;26653:51:::1;::::0;26675:15:::1;::::0;26653:51:::1;26716:15;:29:::0;;-1:-1:-1;;;;;26716:29:0;;::::1;-1:-1:-1::0;;;;;;26716:29:0;;::::1;::::0;::::1;::::0;;:15:::1;26756:35:::0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;26756:42:0::1;26716:29:::0;26756:42:::1;::::0;;26561:245::o;20060:167::-;20138:4;20155:42;3517:10;20179:9;20190:6;20155:9;:42::i;19364:162::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;19445:15:::1;:24:::0;;-1:-1:-1;;;;;;19445:24:0::1;-1:-1:-1::0;;;;;19445:24:0;::::1;::::0;;::::1;::::0;;;19480:38:::1;::::0;-1:-1:-1;19480:15:0::1;:38::i;19223:133::-:0;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;19301:14:::1;::::0;-1:-1:-1;;;19301:14:0;::::1;;;19300:15;19292:24;;;::::0;::::1;;19327:11;:21:::0;;-1:-1:-1;;19327:21:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19223:133::o;26251:221::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;26356:12:::1;::::0;26337:42:::1;::::0;-1:-1:-1;;;;;26337:42:0;;::::1;::::0;26356:12:::1;::::0;26337:42:::1;::::0;26356:12:::1;::::0;26337:42:::1;26391:12;:23:::0;;-1:-1:-1;;;;;26391:23:0;;::::1;-1:-1:-1::0;;;;;;26391:23:0;;::::1;::::0;::::1;::::0;;:12:::1;26425:32:::0;;;:18:::1;:32;::::0;;;;:39;;-1:-1:-1;;26425:39:0::1;26391:23:::0;26425:39:::1;::::0;;26251:221::o;29652:181::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29737:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;29737:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29791:34;;1371:41:1;;;29791:34:0::1;::::0;1344:18:1;29791:34:0::1;1231:187:1::0;28254::0;15264:7;15291:6;-1:-1:-1;;;;;15291:6:0;3517:10;28304:23;28296:32;;;;;;28339:23;28365:24;28383:4;28365:9;:24::i;:::-;28339:50;;28400:33;28417:15;28400:16;:33::i;29273:301::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;29390:9:::1;29386:114;29405:19:::0;;::::1;29386:114;;;29480:8;29446:18;:31;29465:8;;29474:1;29465:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29446:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29446:31:0;:42;;-1:-1:-1;;29446:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29426:3;::::1;::::0;::::1;:::i;:::-;;;;29386:114;;;;29515:51;29547:8;;29557;29515:51;;;;;;;;:::i;:::-;;;;;;;;29273:301:::0;;;:::o;25322:209::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;25457:3:::1;-1:-1:-1::0;;;;;25431:39:0::1;25445:10;-1:-1:-1::0;;;;;25431:39:0::1;;25462:7;25431:39;;;;1821:25:1::0;;1809:2;1794:18;;1675:177;25431:39:0::1;;;;;;;;25482:41;::::0;-1:-1:-1;;;25482:41:0;;-1:-1:-1;;;;;8167:32:1;;;25482:41:0::1;::::0;::::1;8149:51:1::0;8216:18;;;8209:34;;;25482:27:0;::::1;::::0;::::1;::::0;8122:18:1;;25482:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25322:209:::0;;;:::o;16171:244::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16260:22:0;::::1;16252:73;;;::::0;-1:-1:-1;;;16252:73:0;;8706:2:1;16252:73:0::1;::::0;::::1;8688:21:1::0;8745:2;8725:18;;;8718:30;8784:34;8764:18;;;8757:62;-1:-1:-1;;;8835:18:1;;;8828:36;8881:19;;16252:73:0::1;8504:402:1::0;16252:73:0::1;16362:6;::::0;;16341:38:::1;::::0;-1:-1:-1;;;;;16341:38:0;;::::1;::::0;16362:6;::::1;::::0;16341:38:::1;::::0;::::1;16390:6;:17:::0;;-1:-1:-1;;;;;;16390:17:0::1;-1:-1:-1::0;;;;;16390:17:0;;;::::1;::::0;;;::::1;::::0;;16171:244::o;30152:271::-;15438:6;;-1:-1:-1;;;;;15438:6:0;3517:10;15438:22;15430:67;;;;-1:-1:-1;;;15430:67:0;;;;;;;:::i;:::-;30257:9:::1;30253:107;30272:19:::0;;::::1;30253:107;;;30343:5;30313:14;:27;30328:8;;30337:1;30328:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30313:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30313:27:0;:35;;-1:-1:-1;;30313:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30293:3;::::1;::::0;::::1;:::i;:::-;;;;30253:107;;;;30375:40;30399:8;;30409:5;30375:40;;;;;;;;:::i;21138:335::-:0;-1:-1:-1;;;;;21231:19:0;;21223:68;;;;-1:-1:-1;;;21223:68:0;;9113:2:1;21223:68:0;;;9095:21:1;9152:2;9132:18;;;9125:30;9191:34;9171:18;;;9164:62;-1:-1:-1;;;9242:18:1;;;9235:34;9286:19;;21223:68:0;8911:400:1;21223:68:0;-1:-1:-1;;;;;21310:21:0;;21302:68;;;;-1:-1:-1;;;21302:68:0;;9518:2:1;21302:68:0;;;9500:21:1;9557:2;9537:18;;;9530:30;9596:34;9576:18;;;9569:62;-1:-1:-1;;;9647:18:1;;;9640:32;9689:19;;21302:68:0;9316:398:1;21302:68:0;-1:-1:-1;;;;;21381:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21433:32;;1821:25:1;;;21433:32:0;;1794:18:1;21433:32:0;;;;;;;21138:335;;;:::o;21679:2406::-;15264:7;15291:6;-1:-1:-1;;;;;21763:15:0;;;15291:6;;21763:15;21759:61;;21797:14;;-1:-1:-1;;;21797:14:0;;;;:22;;21815:4;21797:22;21789:31;;;;;;-1:-1:-1;;;;;21839:18:0;;21831:68;;;;-1:-1:-1;;;21831:68:0;;9921:2:1;21831:68:0;;;9903:21:1;9960:2;9940:18;;;9933:30;9999:34;9979:18;;;9972:62;-1:-1:-1;;;10050:18:1;;;10043:35;10095:19;;21831:68:0;9719:401:1;21831:68:0;-1:-1:-1;;;;;21918:16:0;;21910:64;;;;-1:-1:-1;;;21910:64:0;;10327:2:1;21910:64:0;;;10309:21:1;10366:2;10346:18;;;10339:30;10405:34;10385:18;;;10378:62;-1:-1:-1;;;10456:18:1;;;10449:33;10499:19;;21910:64:0;10125:399:1;21910:64:0;22002:1;21993:6;:10;21985:64;;;;-1:-1:-1;;;21985:64:0;;10731:2:1;21985:64:0;;;10713:21:1;10770:2;10750:18;;;10743:30;10809:34;10789:18;;;10782:62;-1:-1:-1;;;10860:18:1;;;10853:39;10909:19;;21985:64:0;10529:405:1;21985:64:0;-1:-1:-1;;;;;22069:20:0;;;;;;:14;:20;;;;;;;;22068:21;22060:53;;;;-1:-1:-1;;;22060:53:0;;11141:2:1;22060:53:0;;;11123:21:1;11180:2;11160:18;;;11153:30;-1:-1:-1;;;11199:18:1;;;11192:49;11258:18;;22060:53:0;10939:343:1;22060:53:0;22138:1;22126:9;:13;;;22150:7;:11;22179:17;;-1:-1:-1;;;22179:17:0;;;;22174:180;;22223:13;;-1:-1:-1;;;;;22223:13:0;;;22217:19;;;;22213:130;;22257:17;:24;;-1:-1:-1;;;;22257:24:0;-1:-1:-1;;;22257:24:0;;;22213:130;22411:15;;-1:-1:-1;;;;;22395:32:0;;;22411:15;;22395:32;22391:431;;22447:14;;-1:-1:-1;;;22447:14:0;;;;:51;;;;;22481:17;;22465:12;:33;;22447:51;:69;;;;-1:-1:-1;22503:13:0;;-1:-1:-1;;;22503:13:0;;;;22502:14;22447:69;22444:367;;;22548:14;;22536:9;:26;22591:12;;22581:7;:22;22622:30;22637:4;22642:2;22645:6;22622:14;:30::i;:::-;22689:13;;-1:-1:-1;;;;;22675:28:0;;;22689:13;;22675:28;22671:100;;-1:-1:-1;;;;;22728:18:0;;;;;;:14;:18;;;;;:23;;-1:-1:-1;;22728:23:0;22747:4;22728:23;;;22671:100;21679:2406;;;:::o;22444:367::-;22838:14;;-1:-1:-1;;;22838:14:0;;;;:31;;;;-1:-1:-1;22856:13:0;;-1:-1:-1;;;22856:13:0;;;;22838:31;22834:84;;;22885:13;:21;;-1:-1:-1;;;;22885:21:0;;;22834:84;15264:7;15291:6;-1:-1:-1;;;;;22942:15:0;;;15291:6;;22942:15;;;;:32;;-1:-1:-1;15264:7:0;15291:6;-1:-1:-1;;;;;22961:13:0;;;15291:6;;22961:13;;22942:32;22938:1097;;;23005:28;23036:24;23054:4;23036:9;:24::i;:::-;23080:6;;23005:55;;-1:-1:-1;;;;23080:6:0;;;;23079:7;:32;;;;-1:-1:-1;23098:13:0;;-1:-1:-1;;;;;23090:21:0;;;23098:13;;23090:21;;23079:32;:47;;;;-1:-1:-1;23115:11:0;;-1:-1:-1;;;23115:11:0;;;;23079:47;:75;;;;;23153:1;23130:20;:24;23079:75;23075:346;;;23175:38;23192:20;23175:16;:38::i;:::-;23261:21;23304:22;;23301:105;;23351:35;23364:21;23351:12;:35::i;:::-;23156:265;23075:346;23460:13;;-1:-1:-1;;;;;23452:21:0;;;23460:13;;23452:21;:55;;;;-1:-1:-1;23491:15:0;;-1:-1:-1;;;;;23477:30:0;;;23491:15;;23477:30;;23452:55;23449:162;;;23540:14;;23528:9;:26;23583:12;;23573:7;:22;23449:162;23641:13;;-1:-1:-1;;;;;23635:19:0;;;23641:13;;23635:19;:55;;;;-1:-1:-1;23674:15:0;;-1:-1:-1;;;;;23658:32:0;;;23674:15;;23658:32;;23635:55;23631:165;;;23723:15;;23711:9;:27;23767:13;;23757:7;:23;23631:165;-1:-1:-1;;;;;23829:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;23857:22:0;;;;;;:18;:22;;;;;;;;23829:50;23828:102;;;-1:-1:-1;23893:13:0;;-1:-1:-1;;;;;23885:21:0;;;23893:13;;23885:21;;;;:44;;-1:-1:-1;23916:13:0;;-1:-1:-1;;;;;23910:19:0;;;23916:13;;23910:19;;23885:44;23824:186;;;23963:1;23951:9;:13;;;23983:7;:11;23824:186;22976:1059;22938:1097;24047:30;24062:4;24067:2;24070:6;24047:14;:30::i;5549:192::-;5635:7;5671:12;5663:6;;;;5655:29;;;;-1:-1:-1;;;5655:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5695:9:0;5707:5;5711:1;5707;:5;:::i;:::-;5695:17;5549:192;-1:-1:-1;;;;;5549:192:0:o;24592:482::-;24649:17;24669:20;24687:1;24669:13;:6;24680:1;24669:10;:13::i;:::-;:17;;:20::i;:::-;24649:40;-1:-1:-1;24700:17:0;24720:20;24738:1;24720:13;:6;24731:1;24720:10;:13::i;:20::-;24700:40;-1:-1:-1;24751:21:0;24775:20;24793:1;24775:13;:6;24786:1;24775:10;:13::i;:20::-;24751:44;-1:-1:-1;24806:18:0;24827:55;24751:44;24827:36;24853:9;24827:36;:6;24838:9;24827:10;:21::i;:::-;:25;;:36::i;:55::-;24893:11;;:31;;24806:76;;-1:-1:-1;;;;;;24893:11:0;;:31;;;;;24914:9;;24893:11;:31;:11;:31;24914:9;24893:11;:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24935:17:0;;:37;;-1:-1:-1;;;;;24935:17:0;;;;:37;;;;;24962:9;;24935:17;:37;:17;:37;24962:9;24935:17;:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24983:15:0;;:39;;-1:-1:-1;;;;;24983:15:0;;;;:39;;;;;25008:13;;24983:15;:39;:15;:39;25008:13;24983:15;:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25033:12:0;;:33;;-1:-1:-1;;;;;25033:12:0;;;;:33;;;;;25055:10;;25033:12;:33;:12;:33;25055:10;25033:12;:33;;;;;;;;;;;;;;;;;;;;;24638:436;;;;24592:482;:::o;20876:254::-;20943:7;20982;;20971;:18;;20963:73;;;;-1:-1:-1;;;20963:73:0;;11622:2:1;20963:73:0;;;11604:21:1;11661:2;11641:18;;;11634:30;11700:34;11680:18;;;11673:62;-1:-1:-1;;;11751:18:1;;;11744:40;11801:19;;20963:73:0;11420:406:1;20963:73:0;21047:19;21070:10;:8;:10::i;:::-;21047:33;-1:-1:-1;21098:24:0;:7;21047:33;21098:11;:24::i;:::-;21091:31;20876:254;-1:-1:-1;;;20876:254:0:o;24093:483::-;18369:6;:13;;-1:-1:-1;;;;18369:13:0;-1:-1:-1;;;18369:13:0;;;24195:16:::1;::::0;;24209:1:::1;24195:16:::0;;;;;::::1;::::0;;-1:-1:-1;;24195:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24195:16:0::1;24171:40;;24240:4;24222;24227:1;24222:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24222:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24266:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;24266:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;24222:7;;24266:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24256:4;24261:1;24256:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24256:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;24331:15:::1;::::0;24299:62:::1;::::0;24316:4:::1;::::0;24331:15:::1;24349:11:::0;24299:8:::1;:62::i;:::-;24372:15;::::0;:196:::1;::::0;-1:-1:-1;;;24372:196:0;;-1:-1:-1;;;;;24372:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;24453:11;;24372:15:::1;::::0;24495:4;;24522::::1;::::0;24542:15:::1;::::0;24372:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18405:6:0;:14;;-1:-1:-1;;;;18405:14:0;;;-1:-1:-1;;;;24093:483:0:o;25086:146::-;25180:44;25198:6;25206:9;25217:6;25180:17;:44::i;6000:471::-;6058:7;6303:1;6308;6303:6;6299:47;;-1:-1:-1;6333:1:0;6326:8;;6299:47;6358:9;6370:5;6374:1;6370;:5;:::i;:::-;6358:17;-1:-1:-1;6403:1:0;6394:5;6398:1;6358:17;6394:5;:::i;:::-;:10;6386:56;;;;-1:-1:-1;;;6386:56:0;;13801:2:1;6386:56:0;;;13783:21:1;13840:2;13820:18;;;13813:30;13879:34;13859:18;;;13852:62;-1:-1:-1;;;13930:18:1;;;13923:31;13971:19;;6386:56:0;13599:397:1;6947:132:0;7005:7;7032:39;7036:1;7039;7032:39;;;;;;;;;;;;;;;;;:3;:39::i;5110:136::-;5168:7;5195:43;5199:1;5202;5195:43;;;;;;;;;;;;;;;;;:3;:43::i;27813:163::-;27854:7;27875:15;27892;27911:19;:17;:19::i;:::-;27874:56;;-1:-1:-1;27874:56:0;-1:-1:-1;27948:20:0;27874:56;;27948:11;:20::i;:::-;27941:27;;;;27813:163;:::o;26814:805::-;26912:19;26935:10;:8;:10::i;:::-;26912:33;;26956:23;26982:79;27031:29;27056:3;27031:20;27043:7;;27031;:11;;:20;;;;:::i;:29::-;26982:44;26994:31;27021:3;26994:22;27006:9;;26994:7;:11;;:22;;;;:::i;:31::-;26982:7;;:11;:44::i;:79::-;26956:105;-1:-1:-1;27072:15:0;27090:24;:7;27102:11;27090;:24::i;:::-;27072:42;;27125:12;27140:48;27176:11;27140:31;27167:3;27140:22;27152:9;;27140:7;:11;;:22;;;;:::i;:31::-;:35;;:48::i;:::-;27125:63;;27199:13;27215:46;27249:11;27215:29;27240:3;27215:20;27227:7;;27215;:11;;:20;;;;:::i;:46::-;27199:62;-1:-1:-1;27272:23:0;27298:28;27199:62;27298:17;:7;27310:4;27298:11;:17::i;:28::-;-1:-1:-1;;;;;27355:15:0;;;;;;:7;:15;;;;;;27272:54;;-1:-1:-1;27355:28:0;;27375:7;27355:19;:28::i;:::-;-1:-1:-1;;;;;27337:15:0;;;;;;;:7;:15;;;;;;:46;;;;27415:18;;;;;;;:39;;27438:15;27415:22;:39::i;:::-;-1:-1:-1;;;;;27394:18:0;;;;;;:7;:18;;;;;;:60;;;;27506:4;27490:22;;;;:33;;27517:5;27490:26;:33::i;:::-;27481:4;27465:22;;;;:7;:22;;;;;:58;27534:17;27546:4;27534:11;:17::i;:::-;27584:9;-1:-1:-1;;;;;27567:44:0;27576:6;-1:-1:-1;;;;;27567:44:0;;27595:15;27567:44;;;;1821:25:1;;1809:2;1794:18;;1675:177;27567:44:0;;;;;;;;26901:718;;;;;;26814:805;;;:::o;7575:278::-;7661:7;7696:12;7689:5;7681:28;;;;-1:-1:-1;;;7681:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7720:9:0;7732:5;7736:1;7732;:5;:::i;27984:262::-;28081:7;;28034;;;;17298:21;28155:20;28081:7;17298:21;28155:11;:20::i;:::-;28145:7;:30;28141:61;;;-1:-1:-1;;28185:7:0;;;17298:21;;-1:-1:-1;27984:262:0;-1:-1:-1;27984:262:0:o;28141:61::-;28221:7;;28230;;-1:-1:-1;27984:262:0;-1:-1:-1;27984:262:0:o;4646:181::-;4704:7;;4736:5;4740:1;4736;:5;:::i;:::-;4724:17;;4765:1;4760;:6;;4752:46;;;;-1:-1:-1;;;4752:46:0;;14203:2:1;4752:46:0;;;14185:21:1;14242:2;14222:18;;;14215:30;14281:29;14261:18;;;14254:57;14328:18;;4752:46:0;14001:351:1;27682:89:0;27746:7;;:17;;27758:4;27746:11;:17::i;:::-;27736:7;:27;-1:-1:-1;27682:89:0:o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1423:247::-;1482:6;1535:2;1523:9;1514:7;1510:23;1506:32;1503:52;;;1551:1;1548;1541:12;1503:52;1590:9;1577:23;1609:31;1634:5;1609:31;:::i;2091:456::-;2168:6;2176;2184;2237:2;2225:9;2216:7;2212:23;2208:32;2205:52;;;2253:1;2250;2243:12;2205:52;2292:9;2279:23;2311:31;2336:5;2311:31;:::i;:::-;2361:5;-1:-1:-1;2418:2:1;2403:18;;2390:32;2431:33;2390:32;2431:33;:::i;:::-;2091:456;;2483:7;;-1:-1:-1;;;2537:2:1;2522:18;;;;2509:32;;2091:456::o;2741:118::-;2827:5;2820:13;2813:21;2806:5;2803:32;2793:60;;2849:1;2846;2839:12;2864:382;2929:6;2937;2990:2;2978:9;2969:7;2965:23;2961:32;2958:52;;;3006:1;3003;2996:12;2958:52;3045:9;3032:23;3064:31;3089:5;3064:31;:::i;:::-;3114:5;-1:-1:-1;3171:2:1;3156:18;;3143:32;3184:30;3143:32;3184:30;:::i;:::-;3233:7;3223:17;;;2864:382;;;;;:::o;3251:241::-;3307:6;3360:2;3348:9;3339:7;3335:23;3331:32;3328:52;;;3376:1;3373;3366:12;3328:52;3415:9;3402:23;3434:28;3456:5;3434:28;:::i;3757:385::-;3843:6;3851;3859;3867;3920:3;3908:9;3899:7;3895:23;3891:33;3888:53;;;3937:1;3934;3927:12;3888:53;-1:-1:-1;;3960:23:1;;;4030:2;4015:18;;4002:32;;-1:-1:-1;4081:2:1;4066:18;;4053:32;;4132:2;4117:18;4104:32;;-1:-1:-1;3757:385:1;-1:-1:-1;3757:385:1:o;4147:269::-;4204:6;4257:2;4245:9;4236:7;4232:23;4228:32;4225:52;;;4273:1;4270;4263:12;4225:52;4312:9;4299:23;4362:4;4355:5;4351:16;4344:5;4341:27;4331:55;;4382:1;4379;4372:12;4421:750;4513:6;4521;4529;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;4638:9;4625:23;4667:18;4708:2;4700:6;4697:14;4694:34;;;4724:1;4721;4714:12;4694:34;4762:6;4751:9;4747:22;4737:32;;4807:7;4800:4;4796:2;4792:13;4788:27;4778:55;;4829:1;4826;4819:12;4778:55;4869:2;4856:16;4895:2;4887:6;4884:14;4881:34;;;4911:1;4908;4901:12;4881:34;4966:7;4959:4;4949:6;4946:1;4942:14;4938:2;4934:23;4930:34;4927:47;4924:67;;;4987:1;4984;4977:12;4924:67;5018:4;5010:13;;;;-1:-1:-1;5042:6:1;-1:-1:-1;;5083:20:1;;5070:34;5113:28;5070:34;5113:28;:::i;:::-;5160:5;5150:15;;;4421:750;;;;;:::o;5176:388::-;5244:6;5252;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5360:9;5347:23;5379:31;5404:5;5379:31;:::i;:::-;5429:5;-1:-1:-1;5486:2:1;5471:18;;5458:32;5499:33;5458:32;5499:33;:::i;5569:356::-;5771:2;5753:21;;;5790:18;;;5783:30;5849:34;5844:2;5829:18;;5822:62;5916:2;5901:18;;5569:356::o;6285:127::-;6346:10;6341:3;6337:20;6334:1;6327:31;6377:4;6374:1;6367:15;6401:4;6398:1;6391:15;6417:125;6482:9;;;6503:10;;;6500:36;;;6516:18;;:::i;6904:127::-;6965:10;6960:3;6956:20;6953:1;6946:31;6996:4;6993:1;6986:15;7020:4;7017:1;7010:15;7036:135;7075:3;7096:17;;;7093:43;;7116:18;;:::i;:::-;-1:-1:-1;7163:1:1;7152:13;;7036:135::o;7176:794::-;7398:2;7410:21;;;7383:18;;7466:22;;;7350:4;7545:6;7519:2;7504:18;;7350:4;7579:304;7593:6;7590:1;7587:13;7579:304;;;7668:6;7655:20;7688:31;7713:5;7688:31;:::i;:::-;-1:-1:-1;;;;;7744:31:1;7732:44;;7799:4;7858:15;;;;7823:12;;;;7772:1;7608:9;7579:304;;;7583:3;7900;7892:11;;;;7955:6;7948:14;7941:22;7934:4;7923:9;7919:20;7912:52;7176:794;;;;;;:::o;8254:245::-;8321:6;8374:2;8362:9;8353:7;8349:23;8345:32;8342:52;;;8390:1;8387;8380:12;8342:52;8422:9;8416:16;8441:28;8463:5;8441:28;:::i;11287:128::-;11354:9;;;11375:11;;;11372:37;;;11389:18;;:::i;11963:251::-;12033:6;12086:2;12074:9;12065:7;12061:23;12057:32;12054:52;;;12102:1;12099;12092:12;12054:52;12134:9;12128:16;12153:31;12178:5;12153:31;:::i;12219:980::-;12481:4;12529:3;12518:9;12514:19;12560:6;12549:9;12542:25;12586:2;12624:6;12619:2;12608:9;12604:18;12597:34;12667:3;12662:2;12651:9;12647:18;12640:31;12691:6;12726;12720:13;12757:6;12749;12742:22;12795:3;12784:9;12780:19;12773:26;;12834:2;12826:6;12822:15;12808:29;;12855:1;12865:195;12879:6;12876:1;12873:13;12865:195;;;12944:13;;-1:-1:-1;;;;;12940:39:1;12928:52;;13035:15;;;;13000:12;;;;12976:1;12894:9;12865:195;;;-1:-1:-1;;;;;;;13116:32:1;;;;13111:2;13096:18;;13089:60;-1:-1:-1;;;13180:3:1;13165:19;13158:35;13077:3;12219:980;-1:-1:-1;;;12219:980:1:o;13204:168::-;13277:9;;;13308;;13325:15;;;13319:22;;13305:37;13295:71;;13346:18;;:::i;13377:217::-;13417:1;13443;13433:132;;13487:10;13482:3;13478:20;13475:1;13468:31;13522:4;13519:1;13512:15;13550:4;13547:1;13540:15;13433:132;-1:-1:-1;13579:9:1;;13377:217::o

Swarm Source

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