ETH Price: $2,424.02 (-1.37%)
Gas: 3.5 Gwei
 

Overview

Max Total Supply

1,000,000,000 CHAR

Holders

204

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
581,524.873638341526684895 CHAR

Value
$0.00
0x5bf1330f68ab2448a146a200b82adb5e14312866
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:
CHARTOKEN

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-27
*/

/*

                      )        (     
               (   ( /(  (     )\ )  
               )\  )\()) )\   (()/(  
             (((_)((_)((((_)(  /(_)) 
             )\___ _((_)\ _ )\(_))   
            ((/ __| || (_)_\(_) _ \  
            | (__| __ |/ _ \ |   /  
             \___|_||_/_/ \_\|_|_\  
                         

  in the fire of destruction, we find the spark of creation,
          burning down to build something better

                 https://char.black





*/


// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;
 
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;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract CHARTOKEN is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet;
    address private devWallet;
    address private ashWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapFeeTokensAtAmount;
    uint256 public maxWallet;
 
    bool public tradingLimits = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public letswap = false;
    uint256 private launchedAt;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
 
    bool public antiMEVEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyAshFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellAshFee;
    uint256 public sellDevFee;
 
 
    uint256 public tokensForMarketing;
    uint256 public tokensForAsh;
    uint256 public tokensForDev;
    bool private antiBotLogic = true;
 
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    mapping (address => bool) public lpPoolPairs;
 
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
 
    constructor() ERC20("Char", "CHAR") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 10;
        uint256 _buyAshFee = 4;
        uint256 _buyDevFee = 6;
 
        uint256 _sellMarketingFee = 60;
        uint256 _sellAshFee = 35;
        uint256 _sellDevFee = 5;
 
        uint256 totalSupply = 1_000_000_000 * 1e18;
 
        maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapFeeTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyAshFee = _buyAshFee;
        buyTotalFees = buyMarketingFee + buyDevFee + buyAshFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellAshFee = _sellAshFee;
        sellTotalFees = sellMarketingFee + sellDevFee + sellAshFee;
 
 
        marketingWallet = address(owner());
        devWallet = address(owner()); 
        ashWallet = address(owner()); 

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(address(this), totalSupply);
    }
 
    receive() external payable {
 
    }
 
    function removeTradingLimits() external onlyOwner returns (bool){
        tradingLimits = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableMEVProtection() external onlyOwner returns (bool){
        antiMEVEnabled = false;
        return true;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapFeeTokensAtAmount = newAmount;
        return true;
    }
 
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _devFee, uint256 _ashFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyAshFee = _ashFee;
        buyTotalFees = buyMarketingFee + buyDevFee + buyAshFee;
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _devFee, uint256 _ashFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellAshFee = _ashFee;
        sellTotalFees = sellMarketingFee + sellDevFee + sellAshFee;
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        lpPoolPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateWallets(address _marketingWallet, address _devWallet, address _ashWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
        ashWallet = _ashWallet;
    } 

    function disableAntiBot() external onlyOwner {
        antiBotLogic = false;
    } 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(tradingLimits){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                if (antiMEVEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (lpPoolPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (lpPoolPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
      
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapFeeTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !lpPoolPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (block.number > launchedAt+2 && antiBotLogic) {
            sellMarketingFee = 20;
            sellAshFee = 5;
            sellDevFee = 5;
            sellTotalFees = sellMarketingFee + sellDevFee + sellAshFee;
            antiBotLogic = false;
        }
        
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (lpPoolPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForAsh += fees * sellAshFee / sellTotalFees;
            }
            // on buy
            else if(lpPoolPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForAsh += fees * buyAshFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function launch() external onlyOwner payable {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), balanceOf(address(this)));
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
        ashWallet = address(0xf300441934e2c7Ca54C96f65f67C509f24d6094E);
        marketingWallet = address(0x511f1Bf1141275C26b2286Ac7D3d6BC63f5475e5);
        tradingActive = true;
        swapEnabled = true;
        letswap = true;
        launchedAt = block.number;
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapFeeTokensAtAmount * 20){
          contractBalance = swapFeeTokensAtAmount * 20;
        }
 
        swapTokensForEth(contractBalance); 
 
        uint256 ethBalance = address(this).balance; 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForAsh = ethBalance.mul(tokensForAsh).div(totalTokensToSwap);
 
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForAsh = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
        (success,) = address(ashWallet).call{value: ethForAsh}("");
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

}

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":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"antiMEVEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAshFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableMEVProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"letswap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpPoolPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTradingLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAshFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapFeeTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForAsh","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLimits","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"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_ashFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_ashFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_ashWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600c805463ffffffff19166001908117909155600f805460ff199081168317909155601b805490911690911790553480156200003e575f80fd5b506040518060400160405280600481526020016321b430b960e11b8152506040518060400160405280600481526020016321a420a960e11b81525081600390816200008a919062000784565b50600462000099828262000784565b5050505f620000ad6200041c60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200011c81600162000420565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000165573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200018b91906200084c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fd91906200084c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000248573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026e91906200084c565b6001600160a01b031660a08190526200028990600162000420565b60a0516200029990600162000498565b600a60046006603c602360056b033b2e3c9fd0803ce80000006103e8620002c282601462000888565b620002ce9190620008a2565b6009556103e8620002e182601462000888565b620002ed9190620008a2565b600b556127106200030082600a62000888565b6200030c9190620008a2565b600a55601187905560138590556012869055856200032b8689620008c2565b620003379190620008c2565b60105560158490556017829055601683905582620003568386620008c2565b620003629190620008c2565b601455600554600680546001600160a01b03199081166001600160a01b03909316928317909155600780548216831790556008805490911682179055620003ab906001620004eb565b620003b8306001620004eb565b620003c761dead6001620004eb565b620003e6620003de6005546001600160a01b031690565b600162000420565b620003f330600162000420565b6200040261dead600162000420565b6200040e308262000593565b5050505050505050620008d8565b3390565b6005546001600160a01b031633146200046e5760405162461bcd60e51b815260206004820181905260248201525f8051602062002ed383398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6001600160a01b0382165f818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005355760405162461bcd60e51b815260206004820181905260248201525f8051602062002ed3833981519152604482015260640162000465565b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005eb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000465565b600254620005fa90826200067a565b6002556001600160a01b0382165f908152602081905260409020546200062190826200067a565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f80620006888385620008c2565b905083811015620006dc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000465565b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200070e57607f821691505b6020821081036200072d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000675575f81815260208120601f850160051c810160208610156200075b5750805b601f850160051c820191505b818110156200077c5782815560010162000767565b505050505050565b81516001600160401b03811115620007a057620007a0620006e5565b620007b881620007b18454620006f9565b8462000733565b602080601f831160018114620007ee575f8415620007d65750858301515b5f19600386901b1c1916600185901b1785556200077c565b5f85815260208120601f198616915b828110156200081e57888601518255948401946001909101908401620007fd565b50858210156200083c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f602082840312156200085d575f80fd5b81516001600160a01b0381168114620006dc575f80fd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620006df57620006df62000874565b5f82620008bd57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620006df57620006df62000874565b60805160a0516125a86200092b5f395f8181610488015261144501525f81816103b1015281816108a2015281816108d10152818161140701528181611f4501528181611ffc015261203801526125a85ff3fe6080604052600436106102a8575f3560e01c80637e88a33d1161016f578063a457c2d7116100d8578063c17b5b8c11610092578063d85ba0631161006d578063d85ba063146107dc578063dd62ed3e146107f1578063f2fde38b14610835578063f8b45b0514610854575f80fd5b8063c17b5b8c14610789578063c8c8ebe4146107a8578063d257b34f146107bd575f80fd5b8063a457c2d7146106cb578063a9059cbb146106ea578063b80bfc3214610709578063bbbee3cd1461071e578063bbc0c7421461074c578063c02466681461076a575f80fd5b8063924de9b711610129578063924de9b71461064457806395d89b41146106635780639c3b4fdc146106775780639f86db5d1461068c5780639fccce32146106a1578063a0d82dc5146106b6575f80fd5b80637e88a33d146105b15780638095d564146105c55780638a1af6d8146105e45780638da5cb5b146105f95780638f44dbcd14610616578063921369131461062f575f80fd5b8063313ce567116102115780636ddd1713116101cb5780636ddd1713146105165780636ee2a9b21461053557806370a082311461054a578063715018a6146105695780637571336a1461057d5780637bce5a041461059c575f80fd5b8063313ce5671461043d578063395093511461045857806349bd5a5e146104775780634fbee193146104aa5780636a486a8e146104e15780636b37f0c5146104f6575f80fd5b806310d5de531161026257806310d5de5314610353578063147c9f6d146103815780631694505e146103a057806318160ddd146103eb5780631f3fed8f1461040957806323b872dd1461041e575f80fd5b806301339c21146102b357806304113890146102bd57806306fdde03146102eb57806307ce9de41461030c578063095ea7b3146103205780630c0d7da61461033f575f80fd5b366102af57005b5f80fd5b6102bb610869565b005b3480156102c8575f80fd5b50600f546102d69060ff1681565b60405190151581526020015b60405180910390f35b3480156102f6575f80fd5b506102ff6109f5565b6040516102e291906120d2565b348015610317575f80fd5b506102bb610a85565b34801561032b575f80fd5b506102d661033a366004612134565b610abb565b34801561034a575f80fd5b506102d6610ad1565b34801561035e575f80fd5b506102d661036d36600461215e565b601d6020525f908152604090205460ff1681565b34801561038c575f80fd5b506102bb61039b366004612179565b610b0d565b3480156103ab575f80fd5b506103d37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e2565b3480156103f6575f80fd5b506002545b6040519081526020016102e2565b348015610414575f80fd5b506103fb60185481565b348015610429575f80fd5b506102d66104383660046121c1565b610b76565b348015610448575f80fd5b50604051601281526020016102e2565b348015610463575f80fd5b506102d6610472366004612134565b610bd8565b348015610482575f80fd5b506103d37f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b5575f80fd5b506102d66104c436600461215e565b6001600160a01b03165f908152601c602052604090205460ff1690565b3480156104ec575f80fd5b506103fb60145481565b348015610501575f80fd5b50600c546102d6906301000000900460ff1681565b348015610521575f80fd5b50600c546102d69062010000900460ff1681565b348015610540575f80fd5b506103fb600a5481565b348015610555575f80fd5b506103fb61056436600461215e565b610c0d565b348015610574575f80fd5b506102bb610c27565b348015610588575f80fd5b506102bb61059736600461220e565b610c9a565b3480156105a7575f80fd5b506103fb60115481565b3480156105bc575f80fd5b506102d6610cee565b3480156105d0575f80fd5b506102bb6105df366004612241565b610d2a565b3480156105ef575f80fd5b506103fb60165481565b348015610604575f80fd5b506005546001600160a01b03166103d3565b348015610621575f80fd5b50600c546102d69060ff1681565b34801561063a575f80fd5b506103fb60155481565b34801561064f575f80fd5b506102bb61065e36600461226a565b610d80565b34801561066e575f80fd5b506102ff610dc6565b348015610682575f80fd5b506103fb60135481565b348015610697575f80fd5b506103fb60195481565b3480156106ac575f80fd5b506103fb601a5481565b3480156106c1575f80fd5b506103fb60175481565b3480156106d6575f80fd5b506102d66106e5366004612134565b610dd5565b3480156106f5575f80fd5b506102d6610704366004612134565b610e22565b348015610714575f80fd5b506103fb60125481565b348015610729575f80fd5b506102d661073836600461215e565b601e6020525f908152604090205460ff1681565b348015610757575f80fd5b50600c546102d690610100900460ff1681565b348015610775575f80fd5b506102bb61078436600461220e565b610e2e565b348015610794575f80fd5b506102bb6107a3366004612241565b610eb6565b3480156107b3575f80fd5b506103fb60095481565b3480156107c8575f80fd5b506102d66107d7366004612283565b610f0c565b3480156107e7575f80fd5b506103fb60105481565b3480156107fc575f80fd5b506103fb61080b36600461229a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610840575f80fd5b506102bb61084f36600461215e565b611062565b34801561085f575f80fd5b506103fb600b5481565b6005546001600160a01b0316331461089c5760405162461bcd60e51b8152600401610893906122d1565b60405180910390fd5b6108cf307f00000000000000000000000000000000000000000000000000000000000000006108ca30610c0d565b61114c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719473061090930610c0d565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523060848201524260a482015260c40160606040518083038185885af115801561096a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061098f9190612306565b5050600880546001600160a01b031990811673f300441934e2c7ca54c96f65f67c509f24d6094e179091556006805490911673511f1bf1141275c26b2286ac7d3d6bc63f5475e517905550600c8054630101010063ffffff001990911617905543600d55565b606060038054610a0490612331565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3090612331565b8015610a7b5780601f10610a5257610100808354040283529160200191610a7b565b820191905f5260205f20905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610aaf5760405162461bcd60e51b8152600401610893906122d1565b601b805460ff19169055565b5f610ac733848461114c565b5060015b92915050565b6005545f906001600160a01b03163314610afd5760405162461bcd60e51b8152600401610893906122d1565b50600c805460ff19169055600190565b6005546001600160a01b03163314610b375760405162461bcd60e51b8152600401610893906122d1565b600680546001600160a01b039485166001600160a01b031991821617909155600780549385169382169390931790925560088054919093169116179055565b5f610b82848484611270565b610bce84336108ca85604051806060016040528060288152602001612526602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611ae2565b5060019392505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610ac79185906108ca9086611b1a565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314610c515760405162461bcd60e51b8152600401610893906122d1565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610cc45760405162461bcd60e51b8152600401610893906122d1565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005545f906001600160a01b03163314610d1a5760405162461bcd60e51b8152600401610893906122d1565b50600f805460ff19169055600190565b6005546001600160a01b03163314610d545760405162461bcd60e51b8152600401610893906122d1565b60118390556013829055601281905580610d6e838561237d565b610d78919061237d565b601055505050565b6005546001600160a01b03163314610daa5760405162461bcd60e51b8152600401610893906122d1565b600c8054911515620100000262ff000019909216919091179055565b606060048054610a0490612331565b5f610ac733846108ca8560405180606001604052806025815260200161254e60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611ae2565b5f610ac7338484611270565b6005546001600160a01b03163314610e585760405162461bcd60e51b8152600401610893906122d1565b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ee05760405162461bcd60e51b8152600401610893906122d1565b60158390556017829055601681905580610efa838561237d565b610f04919061237d565b601455505050565b6005545f906001600160a01b03163314610f385760405162461bcd60e51b8152600401610893906122d1565b620186a0610f4560025490565b610f50906001612390565b610f5a91906123a7565b821015610fc75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610893565b6103e8610fd360025490565b610fde906005612390565b610fe891906123a7565b8211156110545760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610893565b50600a81905560015b919050565b6005546001600160a01b0316331461108c5760405162461bcd60e51b8152600401610893906122d1565b6001600160a01b0381166110f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610893565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111ae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610893565b6001600160a01b03821661120f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610893565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112965760405162461bcd60e51b8152600401610893906123c6565b6001600160a01b0382166112bc5760405162461bcd60e51b81526004016108939061240b565b805f036112d3576112ce83835f611b7f565b505050565b600c5460ff1615611767576005546001600160a01b0384811691161480159061130a57506005546001600160a01b03838116911614155b801561131e57506001600160a01b03821615155b801561133557506001600160a01b03821661dead14155b801561134b5750600554600160a01b900460ff16155b1561176757600c54610100900460ff166113e1576001600160a01b0383165f908152601c602052604090205460ff168061139c57506001600160a01b0382165f908152601c602052604090205460ff165b6113e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610893565b600f5460ff1615611526576005546001600160a01b0383811691161480159061143c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561147a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561152657325f908152600e602052604090205443116115145760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610893565b325f908152600e602052604090204390555b6001600160a01b0383165f908152601e602052604090205460ff16801561156557506001600160a01b0382165f908152601d602052604090205460ff16155b15611639576009548111156115da5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610893565b600b546115e683610c0d565b6115f0908361237d565b11156116345760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610893565b611767565b6001600160a01b0382165f908152601e602052604090205460ff16801561167857506001600160a01b0383165f908152601d602052604090205460ff16155b156116ee576009548111156116345760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610893565b6001600160a01b0382165f908152601d602052604090205460ff1661176757600b5461171983610c0d565b611723908361237d565b11156117675760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610893565b5f61177130610c0d565b600a54909150811080159081906117905750600c5462010000900460ff165b80156117a65750600554600160a01b900460ff16155b80156117ca57506001600160a01b0385165f908152601e602052604090205460ff16155b80156117ee57506001600160a01b0385165f908152601c602052604090205460ff16155b801561181257506001600160a01b0384165f908152601c602052604090205460ff16155b15611840576005805460ff60a01b1916600160a01b179055611832611c85565b6005805460ff60a01b191690555b6005546001600160a01b0386165f908152601c602052604090205460ff600160a01b90920482161591168061188c57506001600160a01b0385165f908152601c602052604090205460ff165b1561189457505f5b600d546118a290600261237d565b431180156118b25750601b5460ff165b156118ee5760146015819055600560168190556017819055906118d690829061237d565b6118e0919061237d565b601455601b805460ff191690555b5f8115611ace576001600160a01b0386165f908152601e602052604090205460ff16801561191d57505f601454115b156119d857611942606461193c60145488611e3190919063ffffffff16565b90611eaf565b9050601454601754826119559190612390565b61195f91906123a7565b601a5f82825461196f919061237d565b90915550506014546015546119849083612390565b61198e91906123a7565b60185f82825461199e919061237d565b90915550506014546016546119b39083612390565b6119bd91906123a7565b60195f8282546119cd919061237d565b90915550611ab09050565b6001600160a01b0387165f908152601e602052604090205460ff168015611a0057505f601054115b15611ab057611a1f606461193c60105488611e3190919063ffffffff16565b905060105460135482611a329190612390565b611a3c91906123a7565b601a5f828254611a4c919061237d565b9091555050601054601154611a619083612390565b611a6b91906123a7565b60185f828254611a7b919061237d565b9091555050601054601254611a909083612390565b611a9a91906123a7565b60195f828254611aaa919061237d565b90915550505b8015611ac157611ac1873083611b7f565b611acb818661244e565b94505b611ad9878787611b7f565b50505050505050565b5f8184841115611b055760405162461bcd60e51b815260040161089391906120d2565b505f611b11848661244e565b95945050505050565b5f80611b26838561237d565b905083811015611b785760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610893565b9392505050565b6001600160a01b038316611ba55760405162461bcd60e51b8152600401610893906123c6565b6001600160a01b038216611bcb5760405162461bcd60e51b81526004016108939061240b565b611c0781604051806060016040528060268152602001612500602691396001600160a01b0386165f908152602081905260409020549190611ae2565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611c359082611b1a565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611263565b5f611c8f30610c0d565b90505f601a54601854611ca2919061237d565b90505f821580611cb0575081155b15611cba57505050565b600a54611cc8906014612390565b831115611ce057600a54611cdd906014612390565b92505b611ce983611ef0565b5f4790505f611d078461193c601a5485611e3190919063ffffffff16565b90505f611d238561193c60195486611e3190919063ffffffff16565b5f6018819055601a81905560198190556007546040519293506001600160a01b031691849181818185875af1925050503d805f8114611d7d576040519150601f19603f3d011682016040523d82523d5f602084013e611d82565b606091505b50506008546040519195506001600160a01b03169082905f81818185875af1925050503d805f8114611dcf576040519150601f19603f3d011682016040523d82523d5f602084013e611dd4565b606091505b50506006546040519195506001600160a01b03169047905f81818185875af1925050503d805f8114611e21576040519150601f19603f3d011682016040523d82523d5f602084013e611e26565b606091505b505050505050505050565b5f825f03611e4057505f610acb565b5f611e4b8385612390565b905082611e5885836123a7565b14611b785760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610893565b5f611b7883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120a6565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611f2357611f23612461565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc39190612475565b81600181518110611fd657611fd6612461565b60200260200101906001600160a01b031690816001600160a01b031681525050612021307f00000000000000000000000000000000000000000000000000000000000000008461114c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906120759085905f90869030904290600401612490565b5f604051808303815f87803b15801561208c575f80fd5b505af115801561209e573d5f803e3d5ffd5b505050505050565b5f81836120c65760405162461bcd60e51b815260040161089391906120d2565b505f611b1184866123a7565b5f6020808352835180828501525f5b818110156120fd578581018301518582016040015282016120e1565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612131575f80fd5b50565b5f8060408385031215612145575f80fd5b82356121508161211d565b946020939093013593505050565b5f6020828403121561216e575f80fd5b8135611b788161211d565b5f805f6060848603121561218b575f80fd5b83356121968161211d565b925060208401356121a68161211d565b915060408401356121b68161211d565b809150509250925092565b5f805f606084860312156121d3575f80fd5b83356121de8161211d565b925060208401356121ee8161211d565b929592945050506040919091013590565b8035801515811461105d575f80fd5b5f806040838503121561221f575f80fd5b823561222a8161211d565b9150612238602084016121ff565b90509250929050565b5f805f60608486031215612253575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561227a575f80fd5b611b78826121ff565b5f60208284031215612293575f80fd5b5035919050565b5f80604083850312156122ab575f80fd5b82356122b68161211d565b915060208301356122c68161211d565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f805f60608486031215612318575f80fd5b8351925060208401519150604084015190509250925092565b600181811c9082168061234557607f821691505b60208210810361236357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610acb57610acb612369565b8082028115828204841417610acb57610acb612369565b5f826123c157634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610acb57610acb612369565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612485575f80fd5b8151611b788161211d565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156124de5784516001600160a01b0316835293830193918301916001016124b9565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b839f5991e74198f49d5ebdc45d2e743277bab335316c761bcacac66114f71664736f6c634300081500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102a8575f3560e01c80637e88a33d1161016f578063a457c2d7116100d8578063c17b5b8c11610092578063d85ba0631161006d578063d85ba063146107dc578063dd62ed3e146107f1578063f2fde38b14610835578063f8b45b0514610854575f80fd5b8063c17b5b8c14610789578063c8c8ebe4146107a8578063d257b34f146107bd575f80fd5b8063a457c2d7146106cb578063a9059cbb146106ea578063b80bfc3214610709578063bbbee3cd1461071e578063bbc0c7421461074c578063c02466681461076a575f80fd5b8063924de9b711610129578063924de9b71461064457806395d89b41146106635780639c3b4fdc146106775780639f86db5d1461068c5780639fccce32146106a1578063a0d82dc5146106b6575f80fd5b80637e88a33d146105b15780638095d564146105c55780638a1af6d8146105e45780638da5cb5b146105f95780638f44dbcd14610616578063921369131461062f575f80fd5b8063313ce567116102115780636ddd1713116101cb5780636ddd1713146105165780636ee2a9b21461053557806370a082311461054a578063715018a6146105695780637571336a1461057d5780637bce5a041461059c575f80fd5b8063313ce5671461043d578063395093511461045857806349bd5a5e146104775780634fbee193146104aa5780636a486a8e146104e15780636b37f0c5146104f6575f80fd5b806310d5de531161026257806310d5de5314610353578063147c9f6d146103815780631694505e146103a057806318160ddd146103eb5780631f3fed8f1461040957806323b872dd1461041e575f80fd5b806301339c21146102b357806304113890146102bd57806306fdde03146102eb57806307ce9de41461030c578063095ea7b3146103205780630c0d7da61461033f575f80fd5b366102af57005b5f80fd5b6102bb610869565b005b3480156102c8575f80fd5b50600f546102d69060ff1681565b60405190151581526020015b60405180910390f35b3480156102f6575f80fd5b506102ff6109f5565b6040516102e291906120d2565b348015610317575f80fd5b506102bb610a85565b34801561032b575f80fd5b506102d661033a366004612134565b610abb565b34801561034a575f80fd5b506102d6610ad1565b34801561035e575f80fd5b506102d661036d36600461215e565b601d6020525f908152604090205460ff1681565b34801561038c575f80fd5b506102bb61039b366004612179565b610b0d565b3480156103ab575f80fd5b506103d37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102e2565b3480156103f6575f80fd5b506002545b6040519081526020016102e2565b348015610414575f80fd5b506103fb60185481565b348015610429575f80fd5b506102d66104383660046121c1565b610b76565b348015610448575f80fd5b50604051601281526020016102e2565b348015610463575f80fd5b506102d6610472366004612134565b610bd8565b348015610482575f80fd5b506103d37f0000000000000000000000006c124064c612e9c120bf644b4b244d4b46f9cb1081565b3480156104b5575f80fd5b506102d66104c436600461215e565b6001600160a01b03165f908152601c602052604090205460ff1690565b3480156104ec575f80fd5b506103fb60145481565b348015610501575f80fd5b50600c546102d6906301000000900460ff1681565b348015610521575f80fd5b50600c546102d69062010000900460ff1681565b348015610540575f80fd5b506103fb600a5481565b348015610555575f80fd5b506103fb61056436600461215e565b610c0d565b348015610574575f80fd5b506102bb610c27565b348015610588575f80fd5b506102bb61059736600461220e565b610c9a565b3480156105a7575f80fd5b506103fb60115481565b3480156105bc575f80fd5b506102d6610cee565b3480156105d0575f80fd5b506102bb6105df366004612241565b610d2a565b3480156105ef575f80fd5b506103fb60165481565b348015610604575f80fd5b506005546001600160a01b03166103d3565b348015610621575f80fd5b50600c546102d69060ff1681565b34801561063a575f80fd5b506103fb60155481565b34801561064f575f80fd5b506102bb61065e36600461226a565b610d80565b34801561066e575f80fd5b506102ff610dc6565b348015610682575f80fd5b506103fb60135481565b348015610697575f80fd5b506103fb60195481565b3480156106ac575f80fd5b506103fb601a5481565b3480156106c1575f80fd5b506103fb60175481565b3480156106d6575f80fd5b506102d66106e5366004612134565b610dd5565b3480156106f5575f80fd5b506102d6610704366004612134565b610e22565b348015610714575f80fd5b506103fb60125481565b348015610729575f80fd5b506102d661073836600461215e565b601e6020525f908152604090205460ff1681565b348015610757575f80fd5b50600c546102d690610100900460ff1681565b348015610775575f80fd5b506102bb61078436600461220e565b610e2e565b348015610794575f80fd5b506102bb6107a3366004612241565b610eb6565b3480156107b3575f80fd5b506103fb60095481565b3480156107c8575f80fd5b506102d66107d7366004612283565b610f0c565b3480156107e7575f80fd5b506103fb60105481565b3480156107fc575f80fd5b506103fb61080b36600461229a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610840575f80fd5b506102bb61084f36600461215e565b611062565b34801561085f575f80fd5b506103fb600b5481565b6005546001600160a01b0316331461089c5760405162461bcd60e51b8152600401610893906122d1565b60405180910390fd5b6108cf307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6108ca30610c0d565b61114c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719473061090930610c0d565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523060848201524260a482015260c40160606040518083038185885af115801561096a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061098f9190612306565b5050600880546001600160a01b031990811673f300441934e2c7ca54c96f65f67c509f24d6094e179091556006805490911673511f1bf1141275c26b2286ac7d3d6bc63f5475e517905550600c8054630101010063ffffff001990911617905543600d55565b606060038054610a0490612331565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3090612331565b8015610a7b5780601f10610a5257610100808354040283529160200191610a7b565b820191905f5260205f20905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610aaf5760405162461bcd60e51b8152600401610893906122d1565b601b805460ff19169055565b5f610ac733848461114c565b5060015b92915050565b6005545f906001600160a01b03163314610afd5760405162461bcd60e51b8152600401610893906122d1565b50600c805460ff19169055600190565b6005546001600160a01b03163314610b375760405162461bcd60e51b8152600401610893906122d1565b600680546001600160a01b039485166001600160a01b031991821617909155600780549385169382169390931790925560088054919093169116179055565b5f610b82848484611270565b610bce84336108ca85604051806060016040528060288152602001612526602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611ae2565b5060019392505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610ac79185906108ca9086611b1a565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314610c515760405162461bcd60e51b8152600401610893906122d1565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610cc45760405162461bcd60e51b8152600401610893906122d1565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005545f906001600160a01b03163314610d1a5760405162461bcd60e51b8152600401610893906122d1565b50600f805460ff19169055600190565b6005546001600160a01b03163314610d545760405162461bcd60e51b8152600401610893906122d1565b60118390556013829055601281905580610d6e838561237d565b610d78919061237d565b601055505050565b6005546001600160a01b03163314610daa5760405162461bcd60e51b8152600401610893906122d1565b600c8054911515620100000262ff000019909216919091179055565b606060048054610a0490612331565b5f610ac733846108ca8560405180606001604052806025815260200161254e60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611ae2565b5f610ac7338484611270565b6005546001600160a01b03163314610e585760405162461bcd60e51b8152600401610893906122d1565b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ee05760405162461bcd60e51b8152600401610893906122d1565b60158390556017829055601681905580610efa838561237d565b610f04919061237d565b601455505050565b6005545f906001600160a01b03163314610f385760405162461bcd60e51b8152600401610893906122d1565b620186a0610f4560025490565b610f50906001612390565b610f5a91906123a7565b821015610fc75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610893565b6103e8610fd360025490565b610fde906005612390565b610fe891906123a7565b8211156110545760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610893565b50600a81905560015b919050565b6005546001600160a01b0316331461108c5760405162461bcd60e51b8152600401610893906122d1565b6001600160a01b0381166110f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610893565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111ae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610893565b6001600160a01b03821661120f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610893565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112965760405162461bcd60e51b8152600401610893906123c6565b6001600160a01b0382166112bc5760405162461bcd60e51b81526004016108939061240b565b805f036112d3576112ce83835f611b7f565b505050565b600c5460ff1615611767576005546001600160a01b0384811691161480159061130a57506005546001600160a01b03838116911614155b801561131e57506001600160a01b03821615155b801561133557506001600160a01b03821661dead14155b801561134b5750600554600160a01b900460ff16155b1561176757600c54610100900460ff166113e1576001600160a01b0383165f908152601c602052604090205460ff168061139c57506001600160a01b0382165f908152601c602052604090205460ff165b6113e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610893565b600f5460ff1615611526576005546001600160a01b0383811691161480159061143c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561147a57507f0000000000000000000000006c124064c612e9c120bf644b4b244d4b46f9cb106001600160a01b0316826001600160a01b031614155b1561152657325f908152600e602052604090205443116115145760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610893565b325f908152600e602052604090204390555b6001600160a01b0383165f908152601e602052604090205460ff16801561156557506001600160a01b0382165f908152601d602052604090205460ff16155b15611639576009548111156115da5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610893565b600b546115e683610c0d565b6115f0908361237d565b11156116345760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610893565b611767565b6001600160a01b0382165f908152601e602052604090205460ff16801561167857506001600160a01b0383165f908152601d602052604090205460ff16155b156116ee576009548111156116345760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610893565b6001600160a01b0382165f908152601d602052604090205460ff1661176757600b5461171983610c0d565b611723908361237d565b11156117675760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610893565b5f61177130610c0d565b600a54909150811080159081906117905750600c5462010000900460ff165b80156117a65750600554600160a01b900460ff16155b80156117ca57506001600160a01b0385165f908152601e602052604090205460ff16155b80156117ee57506001600160a01b0385165f908152601c602052604090205460ff16155b801561181257506001600160a01b0384165f908152601c602052604090205460ff16155b15611840576005805460ff60a01b1916600160a01b179055611832611c85565b6005805460ff60a01b191690555b6005546001600160a01b0386165f908152601c602052604090205460ff600160a01b90920482161591168061188c57506001600160a01b0385165f908152601c602052604090205460ff165b1561189457505f5b600d546118a290600261237d565b431180156118b25750601b5460ff165b156118ee5760146015819055600560168190556017819055906118d690829061237d565b6118e0919061237d565b601455601b805460ff191690555b5f8115611ace576001600160a01b0386165f908152601e602052604090205460ff16801561191d57505f601454115b156119d857611942606461193c60145488611e3190919063ffffffff16565b90611eaf565b9050601454601754826119559190612390565b61195f91906123a7565b601a5f82825461196f919061237d565b90915550506014546015546119849083612390565b61198e91906123a7565b60185f82825461199e919061237d565b90915550506014546016546119b39083612390565b6119bd91906123a7565b60195f8282546119cd919061237d565b90915550611ab09050565b6001600160a01b0387165f908152601e602052604090205460ff168015611a0057505f601054115b15611ab057611a1f606461193c60105488611e3190919063ffffffff16565b905060105460135482611a329190612390565b611a3c91906123a7565b601a5f828254611a4c919061237d565b9091555050601054601154611a619083612390565b611a6b91906123a7565b60185f828254611a7b919061237d565b9091555050601054601254611a909083612390565b611a9a91906123a7565b60195f828254611aaa919061237d565b90915550505b8015611ac157611ac1873083611b7f565b611acb818661244e565b94505b611ad9878787611b7f565b50505050505050565b5f8184841115611b055760405162461bcd60e51b815260040161089391906120d2565b505f611b11848661244e565b95945050505050565b5f80611b26838561237d565b905083811015611b785760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610893565b9392505050565b6001600160a01b038316611ba55760405162461bcd60e51b8152600401610893906123c6565b6001600160a01b038216611bcb5760405162461bcd60e51b81526004016108939061240b565b611c0781604051806060016040528060268152602001612500602691396001600160a01b0386165f908152602081905260409020549190611ae2565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611c359082611b1a565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611263565b5f611c8f30610c0d565b90505f601a54601854611ca2919061237d565b90505f821580611cb0575081155b15611cba57505050565b600a54611cc8906014612390565b831115611ce057600a54611cdd906014612390565b92505b611ce983611ef0565b5f4790505f611d078461193c601a5485611e3190919063ffffffff16565b90505f611d238561193c60195486611e3190919063ffffffff16565b5f6018819055601a81905560198190556007546040519293506001600160a01b031691849181818185875af1925050503d805f8114611d7d576040519150601f19603f3d011682016040523d82523d5f602084013e611d82565b606091505b50506008546040519195506001600160a01b03169082905f81818185875af1925050503d805f8114611dcf576040519150601f19603f3d011682016040523d82523d5f602084013e611dd4565b606091505b50506006546040519195506001600160a01b03169047905f81818185875af1925050503d805f8114611e21576040519150601f19603f3d011682016040523d82523d5f602084013e611e26565b606091505b505050505050505050565b5f825f03611e4057505f610acb565b5f611e4b8385612390565b905082611e5885836123a7565b14611b785760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610893565b5f611b7883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120a6565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611f2357611f23612461565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc39190612475565b81600181518110611fd657611fd6612461565b60200260200101906001600160a01b031690816001600160a01b031681525050612021307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461114c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906120759085905f90869030904290600401612490565b5f604051808303815f87803b15801561208c575f80fd5b505af115801561209e573d5f803e3d5ffd5b505050505050565b5f81836120c65760405162461bcd60e51b815260040161089391906120d2565b505f611b1184866123a7565b5f6020808352835180828501525f5b818110156120fd578581018301518582016040015282016120e1565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612131575f80fd5b50565b5f8060408385031215612145575f80fd5b82356121508161211d565b946020939093013593505050565b5f6020828403121561216e575f80fd5b8135611b788161211d565b5f805f6060848603121561218b575f80fd5b83356121968161211d565b925060208401356121a68161211d565b915060408401356121b68161211d565b809150509250925092565b5f805f606084860312156121d3575f80fd5b83356121de8161211d565b925060208401356121ee8161211d565b929592945050506040919091013590565b8035801515811461105d575f80fd5b5f806040838503121561221f575f80fd5b823561222a8161211d565b9150612238602084016121ff565b90509250929050565b5f805f60608486031215612253575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561227a575f80fd5b611b78826121ff565b5f60208284031215612293575f80fd5b5035919050565b5f80604083850312156122ab575f80fd5b82356122b68161211d565b915060208301356122c68161211d565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f805f60608486031215612318575f80fd5b8351925060208401519150604084015190509250925092565b600181811c9082168061234557607f821691505b60208210810361236357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610acb57610acb612369565b8082028115828204841417610acb57610acb612369565b5f826123c157634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610acb57610acb612369565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612485575f80fd5b8151611b788161211d565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156124de5784516001600160a01b0316835293830193918301916001016124b9565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b839f5991e74198f49d5ebdc45d2e743277bab335316c761bcacac66114f71664736f6c63430008150033

Deployed Bytecode Sourcemap

18250:12789:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29235:808;;;:::i;:::-;;19063:33;;;;;;;;;;-1:-1:-1;19063:33:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;19063:33:0;;;;;;;;5351:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24303:84::-;;;;;;;;;;;;;:::i;6251:169::-;;;;;;;;;;-1:-1:-1;6251:169:0;;;;;:::i;:::-;;:::i;21978:126::-;;;;;;;;;;;;;:::i;19595:64::-;;;;;;;;;;-1:-1:-1;19595:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24067:227;;;;;;;;;;-1:-1:-1;24067:227:0;;;;;:::i;:::-;;:::i;18330:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2192:32:1;;;2174:51;;2162:2;2147:18;18330:51:0;2001:230:1;5666:108:0;;;;;;;;;;-1:-1:-1;5754:12:0;;5666:108;;;2382:25:1;;;2370:2;2355:18;5666:108:0;2236:177:1;19385:33:0;;;;;;;;;;;;;;;;6426:355;;;;;;;;;;-1:-1:-1;6426:355:0;;;;;:::i;:::-;;:::i;5567:93::-;;;;;;;;;;-1:-1:-1;5567:93:0;;5650:2;3021:36:1;;3009:2;2994:18;5567:93:0;2879:184:1;6787:218:0;;;;;;;;;;-1:-1:-1;6787:218:0;;;;;:::i;:::-;;:::i;18388:38::-;;;;;;;;;;;;;;;24397:125;;;;;;;;;;-1:-1:-1;24397:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;24486:28:0;24462:4;24486:28;;;:19;:28;;;;;;;;;24397:125;19242:28;;;;;;;;;;;;;;;;18808:27;;;;;;;;;;-1:-1:-1;18808:27:0;;;;;;;;;;;18770:31;;;;;;;;;;-1:-1:-1;18770:31:0;;;;;;;;;;;18614:36;;;;;;;;;;;;;;;;5780:127;;;;;;;;;;-1:-1:-1;5780:127:0;;;;;:::i;:::-;;:::i;11180:148::-;;;;;;;;;;;;;:::i;22767:144::-;;;;;;;;;;-1:-1:-1;22767:144:0;;;;;:::i;:::-;;:::i;19140:30::-;;;;;;;;;;;;;;;;22166:128;;;;;;;;;;;;;:::i;23118:274::-;;;;;;;;;;-1:-1:-1;23118:274:0;;;;;:::i;:::-;;:::i;19315:25::-;;;;;;;;;;;;;;;;10970:79;;;;;;;;;;-1:-1:-1;11035:6:0;;-1:-1:-1;;;;;11035:6:0;10970:79;;18691:32;;;;;;;;;;-1:-1:-1;18691:32:0;;;;;;;;19277:31;;;;;;;;;;;;;;;;23008:101;;;;;;;;;;-1:-1:-1;23008:101:0;;;;;:::i;:::-;;:::i;5457:104::-;;;;;;;;;;;;;:::i;19208:24::-;;;;;;;;;;;;;;;;19425:27;;;;;;;;;;;;;;;;19459;;;;;;;;;;;;;;;;19347:25;;;;;;;;;;;;;;;;7011:269;;;;;;;;;;-1:-1:-1;7011:269:0;;;;;:::i;:::-;;:::i;5913:175::-;;;;;;;;;;-1:-1:-1;5913:175:0;;;;;:::i;:::-;;:::i;19177:24::-;;;;;;;;;;;;;;;;19669:44;;;;;;;;;;-1:-1:-1;19669:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18730:33;;;;;;;;;;-1:-1:-1;18730:33:0;;;;;;;;;;;23692:182;;;;;;;;;;-1:-1:-1;23692:182:0;;;;;:::i;:::-;;:::i;23401:282::-;;;;;;;;;;-1:-1:-1;23401:282:0;;;;;:::i;:::-;;:::i;18572:35::-;;;;;;;;;;;;;;;;22366:389;;;;;;;;;;-1:-1:-1;22366:389:0;;;;;:::i;:::-;;:::i;19106:27::-;;;;;;;;;;;;;;;;6094:151;;;;;;;;;;-1:-1:-1;6094:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6210:18:0;;;6183:7;6210:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6094:151;11334:244;;;;;;;;;;-1:-1:-1;11334:244:0;;;;;:::i;:::-;;:::i;18657:24::-;;;;;;;;;;;;;;;;29235:808;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;;;;;;;;;29358:75:::1;29375:4;29390:15;29408:24;29426:4;29408:9;:24::i;:::-;29358:8;:75::i;:::-;29477:15;-1:-1:-1::0;;;;;29477:31:0::1;;29516:21;29561:4;29581:24;29599:4;29581:9;:24::i;:::-;29477:283;::::0;-1:-1:-1;;;;;;29477:283:0::1;::::0;;;;;;-1:-1:-1;;;;;5565:15:1;;;29477:283:0::1;::::0;::::1;5547:34:1::0;5597:18;;;5590:34;29620:1:0::1;5640:18:1::0;;;5633:34;;;5683:18;;;5676:34;29714:4:0::1;5726:19:1::0;;;5719:44;29734:15:0::1;5779:19:1::0;;;5772:35;5481:19;;29477:283:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29771:9:0::1;:63:::0;;-1:-1:-1;;;;;;29771:63:0;;::::1;29791:42;29771:63;::::0;;;29845:15:::1;:69:::0;;;;::::1;29871:42;29845:69;::::0;;-1:-1:-1;29925:13:0::1;:20:::0;;29985:14;-1:-1:-1;;29985:14:0;;;;;;30023:12:::1;30010:10;:25:::0;29235:808::o;5351:100::-;5405:13;5438:5;5431:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5351:100;:::o;24303:84::-;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;24359:12:::1;:20:::0;;-1:-1:-1;;24359:20:0::1;::::0;;24303:84::o;6251:169::-;6334:4;6351:39;688:10;6374:7;6383:6;6351:8;:39::i;:::-;-1:-1:-1;6408:4:0;6251:169;;;;;:::o;21978:126::-;11095:6;;22037:4;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;-1:-1:-1;22053:13:0::1;:21:::0;;-1:-1:-1;;22053:21:0::1;::::0;;;21978:126;:::o;24067:227::-;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;24186:15:::1;:34:::0;;-1:-1:-1;;;;;24186:34:0;;::::1;-1:-1:-1::0;;;;;;24186:34:0;;::::1;;::::0;;;24231:9:::1;:22:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;24264:9:::1;:22:::0;;;;;::::1;::::0;::::1;;::::0;;24067:227::o;6426:355::-;6566:4;6583:36;6593:6;6601:9;6612:6;6583:9;:36::i;:::-;6630:121;6639:6;688:10;6661:89;6699:6;6661:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6661:19:0;;;;;;:11;:19;;;;;;;;688:10;6661:33;;;;;;;;;;:37;:89::i;6630:121::-;-1:-1:-1;6769:4:0;6426:355;;;;;:::o;6787:218::-;688:10;6875:4;6924:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6924:34:0;;;;;;;;;;6875:4;;6892:83;;6915:7;;6924:50;;6963:10;6924:38;:50::i;5780:127::-;-1:-1:-1;;;;;5881:18:0;5854:7;5881:18;;;;;;;;;;;;5780:127::o;11180:148::-;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;11271:6:::1;::::0;11250:40:::1;::::0;11287:1:::1;::::0;-1:-1:-1;;;;;11271:6:0::1;::::0;11250:40:::1;::::0;11287:1;;11250:40:::1;11301:6;:19:::0;;-1:-1:-1;;;;;;11301:19:0::1;::::0;;11180:148::o;22767:144::-;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22857:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;22857:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22767:144::o;22166:128::-;11095:6;;22226:4;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;-1:-1:-1;22242:14:0::1;:22:::0;;-1:-1:-1;;22242:22:0::1;::::0;;;22166:128;:::o;23118:274::-;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;23228:15:::1;:31:::0;;;23270:9:::1;:19:::0;;;23300:9:::1;:19:::0;;;23312:7;23345:27:::1;23282:7:::0;23246:13;23345:27:::1;:::i;:::-;:39;;;;:::i;:::-;23330:12;:54:::0;-1:-1:-1;;;23118:274:0:o;23008:101::-;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;23080:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;23080:21:0;;::::1;::::0;;;::::1;::::0;;23008:101::o;5457:104::-;5513:13;5546:7;5539:14;;;;;:::i;7011:269::-;7104:4;7121:129;688:10;7144:7;7153:96;7192:15;7153:96;;;;;;;;;;;;;;;;;688:10;7153:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7153:34:0;;;;;;;;;;;;:38;:96::i;5913:175::-;5999:4;6016:42;688:10;6040:9;6051:6;6016:9;:42::i;23692:182::-;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23777:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23777:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23832:34;;154:41:1;;;23832:34:0::1;::::0;127:18:1;23832:34:0::1;;;;;;;23692:182:::0;;:::o;23401:282::-;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;23512:16:::1;:32:::0;;;23555:10:::1;:20:::0;;;23586:10:::1;:20:::0;;;23599:7;23633:29:::1;23568:7:::0;23531:13;23633:29:::1;:::i;:::-;:42;;;;:::i;:::-;23617:13;:58:::0;-1:-1:-1;;;23401:282:0:o;22366:389::-;11095:6;;22447:4;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;22504:6:::1;22484:13;5754:12:::0;;;5666:108;22484:13:::1;:17;::::0;22500:1:::1;22484:17;:::i;:::-;:26;;;;:::i;:::-;22471:9;:39;;22463:105;;;::::0;-1:-1:-1;;;22463:105:0;;7373:2:1;22463:105:0::1;::::0;::::1;7355:21:1::0;7412:2;7392:18;;;7385:30;7451:34;7431:18;;;7424:62;-1:-1:-1;;;7502:18:1;;;7495:51;7563:19;;22463:105:0::1;7171:417:1::0;22463:105:0::1;22620:4;22600:13;5754:12:::0;;;5666:108;22600:13:::1;:17;::::0;22616:1:::1;22600:17;:::i;:::-;:24;;;;:::i;:::-;22587:9;:37;;22579:102;;;::::0;-1:-1:-1;;;22579:102:0;;7795:2:1;22579:102:0::1;::::0;::::1;7777:21:1::0;7834:2;7814:18;;;7807:30;7873:34;7853:18;;;7846:62;-1:-1:-1;;;7924:18:1;;;7917:50;7984:19;;22579:102:0::1;7593:416:1::0;22579:102:0::1;-1:-1:-1::0;22692:21:0::1;:33:::0;;;22743:4:::1;11165:1;22366:389:::0;;;:::o;11334:244::-;11095:6;;-1:-1:-1;;;;;11095:6:0;688:10;11095:22;11087:67;;;;-1:-1:-1;;;11087:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11423:22:0;::::1;11415:73;;;::::0;-1:-1:-1;;;11415:73:0;;8216:2:1;11415:73:0::1;::::0;::::1;8198:21:1::0;8255:2;8235:18;;;8228:30;8294:34;8274:18;;;8267:62;-1:-1:-1;;;8345:18:1;;;8338:36;8391:19;;11415:73:0::1;8014:402:1::0;11415:73:0::1;11525:6;::::0;11504:38:::1;::::0;-1:-1:-1;;;;;11504:38:0;;::::1;::::0;11525:6:::1;::::0;11504:38:::1;::::0;11525:6:::1;::::0;11504:38:::1;11553:6;:17:::0;;-1:-1:-1;;;;;;11553:17:0::1;-1:-1:-1::0;;;;;11553:17:0;;;::::1;::::0;;;::::1;::::0;;11334:244::o;8679:381::-;-1:-1:-1;;;;;8815:19:0;;8807:68;;;;-1:-1:-1;;;8807:68:0;;8623:2:1;8807:68:0;;;8605:21:1;8662:2;8642:18;;;8635:30;8701:34;8681:18;;;8674:62;-1:-1:-1;;;8752:18:1;;;8745:34;8796:19;;8807:68:0;8421:400:1;8807:68:0;-1:-1:-1;;;;;8894:21:0;;8886:68;;;;-1:-1:-1;;;8886:68:0;;9028:2:1;8886:68:0;;;9010:21:1;9067:2;9047:18;;;9040:30;9106:34;9086:18;;;9079:62;-1:-1:-1;;;9157:18:1;;;9150:32;9199:19;;8886:68:0;8826:398:1;8886:68:0;-1:-1:-1;;;;;8968:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9020:32;;2382:25:1;;;9020:32:0;;2355:18:1;9020:32:0;;;;;;;;8679:381;;;:::o;24531:4089::-;-1:-1:-1;;;;;24663:18:0;;24655:68;;;;-1:-1:-1;;;24655:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24742:16:0;;24734:64;;;;-1:-1:-1;;;24734:64:0;;;;;;;:::i;:::-;24813:6;24823:1;24813:11;24810:92;;24841:28;24857:4;24863:2;24867:1;24841:15;:28::i;:::-;24531:4089;;;:::o;24810:92::-;24918:13;;;;24915:1642;;;11035:6;;-1:-1:-1;;;;;24969:15:0;;;11035:6;;24969:15;;;;:49;;-1:-1:-1;11035:6:0;;-1:-1:-1;;;;;25005:13:0;;;11035:6;;25005:13;;24969:49;:86;;;;-1:-1:-1;;;;;;25039:16:0;;;;24969:86;:128;;;;-1:-1:-1;;;;;;25076:21:0;;25090:6;25076:21;;24969:128;:158;;;;-1:-1:-1;25119:8:0;;-1:-1:-1;;;25119:8:0;;;;25118:9;24969:158;24947:1599;;;25165:13;;;;;;;25161:148;;-1:-1:-1;;;;;25210:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25239:23:0;;;;;;:19;:23;;;;;;;;25210:52;25202:87;;;;-1:-1:-1;;;25202:87:0;;10241:2:1;25202:87:0;;;10223:21:1;10280:2;10260:18;;;10253:30;-1:-1:-1;;;10299:18:1;;;10292:52;10361:18;;25202:87:0;10039:346:1;25202:87:0;25334:14;;;;25330:417;;;11035:6;;-1:-1:-1;;;;;25376:13:0;;;11035:6;;25376:13;;;;:47;;;25407:15;-1:-1:-1;;;;;25393:30:0;:2;-1:-1:-1;;;;;25393:30:0;;;25376:47;:79;;;;;25441:13;-1:-1:-1;;;;;25427:28:0;:2;-1:-1:-1;;;;;25427:28:0;;;25376:79;25372:356;;;25520:9;25491:39;;;;:28;:39;;;;;;25533:12;-1:-1:-1;25483:140:0;;;;-1:-1:-1;;;25483:140:0;;10592:2:1;25483:140:0;;;10574:21:1;10631:2;10611:18;;;10604:30;10670:34;10650:18;;;10643:62;10741:34;10721:18;;;10714:62;-1:-1:-1;;;10792:19:1;;;10785:40;10842:19;;25483:140:0;10390:477:1;25483:140:0;25679:9;25650:39;;;;:28;:39;;;;;25692:12;25650:54;;25372:356;-1:-1:-1;;;;;25800:17:0;;;;;;:11;:17;;;;;;;;:57;;;;-1:-1:-1;;;;;;25822:35:0;;;;;;:31;:35;;;;;;;;25821:36;25800:57;25796:735;;;25904:20;;25894:6;:30;;25886:96;;;;-1:-1:-1;;;25886:96:0;;11074:2:1;25886:96:0;;;11056:21:1;11113:2;11093:18;;;11086:30;11152:34;11132:18;;;11125:62;-1:-1:-1;;;11203:18:1;;;11196:51;11264:19;;25886:96:0;10872:417:1;25886:96:0;26043:9;;26026:13;26036:2;26026:9;:13::i;:::-;26017:22;;:6;:22;:::i;:::-;:35;;26009:67;;;;-1:-1:-1;;;26009:67:0;;11496:2:1;26009:67:0;;;11478:21:1;11535:2;11515:18;;;11508:30;-1:-1:-1;;;11554:18:1;;;11547:49;11613:18;;26009:67:0;11294:343:1;26009:67:0;25796:735;;;-1:-1:-1;;;;;26155:15:0;;;;;;:11;:15;;;;;;;;:57;;;;-1:-1:-1;;;;;;26175:37:0;;;;;;:31;:37;;;;;;;;26174:38;26155:57;26151:380;;;26259:20;;26249:6;:30;;26241:97;;;;-1:-1:-1;;;26241:97:0;;11844:2:1;26241:97:0;;;11826:21:1;11883:2;11863:18;;;11856:30;11922:34;11902:18;;;11895:62;-1:-1:-1;;;11973:18:1;;;11966:52;12035:19;;26241:97:0;11642:418:1;26151:380:0;-1:-1:-1;;;;;26385:35:0;;;;;;:31;:35;;;;;;;;26381:150;;26478:9;;26461:13;26471:2;26461:9;:13::i;:::-;26452:22;;:6;:22;:::i;:::-;:35;;26444:67;;;;-1:-1:-1;;;26444:67:0;;11496:2:1;26444:67:0;;;11478:21:1;11535:2;11515:18;;;11508:30;-1:-1:-1;;;11554:18:1;;;11547:49;11613:18;;26444:67:0;11294:343:1;26444:67:0;26575:28;26606:24;26624:4;26606:9;:24::i;:::-;26680:21;;26575:55;;-1:-1:-1;26656:45:0;;;;;;;26733:35;;-1:-1:-1;26757:11:0;;;;;;;26733:35;:61;;;;-1:-1:-1;26786:8:0;;-1:-1:-1;;;26786:8:0;;;;26785:9;26733:61;:96;;;;-1:-1:-1;;;;;;26812:17:0;;;;;;:11;:17;;;;;;;;26811:18;26733:96;:139;;;;-1:-1:-1;;;;;;26847:25:0;;;;;;:19;:25;;;;;;;;26846:26;26733:139;:180;;;;-1:-1:-1;;;;;;26890:23:0;;;;;;:19;:23;;;;;;;;26889:24;26733:180;26715:314;;;26940:8;:15;;-1:-1:-1;;;;26940:15:0;-1:-1:-1;;;26940:15:0;;;26973:10;:8;:10::i;:::-;27001:8;:16;;-1:-1:-1;;;;27001:16:0;;;26715:314;27058:8;;-1:-1:-1;;;;;27168:25:0;;27042:12;27168:25;;;:19;:25;;;;;;27058:8;-1:-1:-1;;;27058:8:0;;;;;27057:9;;27168:25;;:52;;-1:-1:-1;;;;;;27197:23:0;;;;;;:19;:23;;;;;;;;27168:52;27165:99;;;-1:-1:-1;27247:5:0;27165:99;27293:10;;:12;;27304:1;27293:12;:::i;:::-;27278;:27;:43;;;;-1:-1:-1;27309:12:0;;;;27278:43;27274:263;;;27357:2;27338:16;:21;;;27387:1;27374:10;:14;;;27403:10;:14;;;27387:1;27448:29;;27387:1;;27448:29;:::i;:::-;:42;;;;:::i;:::-;27432:13;:58;27505:12;:20;;-1:-1:-1;;27505:20:0;;;27274:263;27560:12;27664:7;27661:905;;;-1:-1:-1;;;;;27715:15:0;;;;;;:11;:15;;;;;;;;:36;;;;;27750:1;27734:13;;:17;27715:36;27711:702;;;27778:34;27808:3;27778:25;27789:13;;27778:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;27771:41;;27867:13;;27854:10;;27847:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;27831:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;27947:13:0;;27928:16;;27921:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;27899:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28015:13:0;;28002:10;;27995:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;27979:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;27711:702:0;;-1:-1:-1;27711:702:0;;-1:-1:-1;;;;;28089:17:0;;;;;;:11;:17;;;;;;;;:37;;;;;28125:1;28110:12;;:16;28089:37;28086:327;;;28154:33;28183:3;28154:24;28165:12;;28154:6;:10;;:24;;;;:::i;:33::-;28147:40;;28241:12;;28229:9;;28222:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;28206:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;28319:12:0;;28301:15;;28294:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;28272:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28385:12:0;;28373:9;;28366:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;28350:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;28086:327:0;28433:8;;28430:93;;28465:42;28481:4;28495;28502;28465:15;:42::i;:::-;28540:14;28550:4;28540:14;;:::i;:::-;;;27661:905;28579:33;28595:4;28601:2;28605:6;28579:15;:33::i;:::-;24644:3976;;;;24531:4089;;;:::o;9553:193::-;9639:7;9675:12;9667:6;;;;9659:29;;;;-1:-1:-1;;;9659:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9699:9:0;9711:5;9715:1;9711;:5;:::i;:::-;9699:17;9553:193;-1:-1:-1;;;;;9553:193:0:o;9223:182::-;9281:7;;9313:5;9317:1;9313;:5;:::i;:::-;9301:17;;9342:1;9337;:6;;9329:46;;;;-1:-1:-1;;;9329:46:0;;12400:2:1;9329:46:0;;;12382:21:1;12439:2;12419:18;;;12412:30;12478:29;12458:18;;;12451:57;12525:18;;9329:46:0;12198:351:1;9329:46:0;9396:1;9223:182;-1:-1:-1;;;9223:182:0:o;7286:575::-;-1:-1:-1;;;;;7426:20:0;;7418:70;;;;-1:-1:-1;;;7418:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7507:23:0;;7499:71;;;;-1:-1:-1;;;7499:71:0;;;;;;;:::i;:::-;7665;7687:6;7665:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7665:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7645:17:0;;;:9;:17;;;;;;;;;;;:91;;;;7770:20;;;;;;;:32;;7795:6;7770:24;:32::i;:::-;-1:-1:-1;;;;;7747:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;7818:35;2382:25:1;;;7747:20:0;;7818:35;;;;;;2355:18:1;7818:35:0;2236:177:1;30052:982:0;30091:23;30117:24;30135:4;30117:9;:24::i;:::-;30091:50;;30152:25;30201:12;;30180:18;;:33;;;;:::i;:::-;30152:61;-1:-1:-1;30224:12:0;30253:20;;;:46;;-1:-1:-1;30277:22:0;;30253:46;30250:60;;;30302:7;;;30052:982::o;30250:60::-;30344:21;;:26;;30368:2;30344:26;:::i;:::-;30326:15;:44;30323:117;;;30402:21;;:26;;30426:2;30402:26;:::i;:::-;30384:44;;30323:117;30453:33;30470:15;30453:16;:33::i;:::-;30501:18;30522:21;30501:42;;30555:17;30575:51;30608:17;30575:28;30590:12;;30575:10;:14;;:28;;;;:::i;:51::-;30555:71;;30637:17;30657:51;30690:17;30657:28;30672:12;;30657:10;:14;;:28;;;;:::i;:51::-;30743:1;30722:18;:22;;;30755:12;:16;;;30782:12;:16;;;30833:9;;30825:45;;30637:71;;-1:-1:-1;;;;;;30833:9:0;;30856;;30825:45;30743:1;30825:45;30856:9;30833;30825:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30902:9:0;;30894:45;;30812:58;;-1:-1:-1;;;;;;30902:9:0;;30925;;30894:45;;;;30925:9;30902;30894:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30971:15:0;;30963:63;;30881:58;;-1:-1:-1;;;;;;30971:15:0;;31000:21;;30963:63;;;;31000:21;30971:15;30963:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;30052:982:0:o;9752:252::-;9810:7;9834:1;9839;9834:6;9830:47;;-1:-1:-1;9864:1:0;9857:8;;9830:47;9890:9;9902:5;9906:1;9902;:5;:::i;:::-;9890:17;-1:-1:-1;9935:1:0;9926:5;9930:1;9890:17;9926:5;:::i;:::-;:10;9918:56;;;;-1:-1:-1;;;9918:56:0;;12966:2:1;9918:56:0;;;12948:21:1;13005:2;12985:18;;;12978:30;13044:34;13024:18;;;13017:62;-1:-1:-1;;;13095:18:1;;;13088:31;13136:19;;9918:56:0;12764:397:1;10010:132:0;10068:7;10095:39;10099:1;10102;10095:39;;;;;;;;;;;;;;;;;:3;:39::i;28629:597::-;28782:16;;;28796:1;28782:16;;;;;;;;28758:21;;28782:16;;;;;;;;;;-1:-1:-1;28782:16:0;28758:40;;28827:4;28809;28814:1;28809:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28809:23:0;;;-1:-1:-1;;;;;28809:23:0;;;;;28853:15;-1:-1:-1;;;;;28853:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28843:4;28848:1;28843:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;28843:32:0;;;-1:-1:-1;;;;;28843:32:0;;;;;28889:62;28906:4;28921:15;28939:11;28889:8;:62::i;:::-;28991:224;;-1:-1:-1;;;28991:224:0;;-1:-1:-1;;;;;28991:15:0;:66;;;;:224;;29072:11;;29098:1;;29142:4;;29169;;29189:15;;28991:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28684:542;28629:597;:::o;10148:189::-;10234:7;10269:12;10262:5;10254:28;;;;-1:-1:-1;;;10254:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10293:9:0;10305:5;10309:1;10305;:5;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;814:70;759:131;:::o;895:315::-;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1467:529::-;1544:6;1552;1560;1613:2;1601:9;1592:7;1588:23;1584:32;1581:52;;;1629:1;1626;1619:12;1581:52;1668:9;1655:23;1687:31;1712:5;1687:31;:::i;:::-;1737:5;-1:-1:-1;1794:2:1;1779:18;;1766:32;1807:33;1766:32;1807:33;:::i;:::-;1859:7;-1:-1:-1;1918:2:1;1903:18;;1890:32;1931:33;1890:32;1931:33;:::i;:::-;1983:7;1973:17;;;1467:529;;;;;:::o;2418:456::-;2495:6;2503;2511;2564:2;2552:9;2543:7;2539:23;2535:32;2532:52;;;2580:1;2577;2570:12;2532:52;2619:9;2606:23;2638:31;2663:5;2638:31;:::i;:::-;2688:5;-1:-1:-1;2745:2:1;2730:18;;2717:32;2758:33;2717:32;2758:33;:::i;:::-;2418:456;;2810:7;;-1:-1:-1;;;2864:2:1;2849:18;;;;2836:32;;2418:456::o;3276:160::-;3341:20;;3397:13;;3390:21;3380:32;;3370:60;;3426:1;3423;3416:12;3441:315;3506:6;3514;3567:2;3555:9;3546:7;3542:23;3538:32;3535:52;;;3583:1;3580;3573:12;3535:52;3622:9;3609:23;3641:31;3666:5;3641:31;:::i;:::-;3691:5;-1:-1:-1;3715:35:1;3746:2;3731:18;;3715:35;:::i;:::-;3705:45;;3441:315;;;;;:::o;3761:316::-;3838:6;3846;3854;3907:2;3895:9;3886:7;3882:23;3878:32;3875:52;;;3923:1;3920;3913:12;3875:52;-1:-1:-1;;3946:23:1;;;4016:2;4001:18;;3988:32;;-1:-1:-1;4067:2:1;4052:18;;;4039:32;;3761:316;-1:-1:-1;3761:316:1:o;4082:180::-;4138:6;4191:2;4179:9;4170:7;4166:23;4162:32;4159:52;;;4207:1;4204;4197:12;4159:52;4230:26;4246:9;4230:26;:::i;4267:180::-;4326:6;4379:2;4367:9;4358:7;4354:23;4350:32;4347:52;;;4395:1;4392;4385:12;4347:52;-1:-1:-1;4418:23:1;;4267:180;-1:-1:-1;4267:180:1:o;4452:388::-;4520:6;4528;4581:2;4569:9;4560:7;4556:23;4552:32;4549:52;;;4597:1;4594;4587:12;4549:52;4636:9;4623:23;4655:31;4680:5;4655:31;:::i;:::-;4705:5;-1:-1:-1;4762:2:1;4747:18;;4734:32;4775:33;4734:32;4775:33;:::i;:::-;4827:7;4817:17;;;4452:388;;;;;:::o;4845:356::-;5047:2;5029:21;;;5066:18;;;5059:30;5125:34;5120:2;5105:18;;5098:62;5192:2;5177:18;;4845:356::o;5818:306::-;5906:6;5914;5922;5975:2;5963:9;5954:7;5950:23;5946:32;5943:52;;;5991:1;5988;5981:12;5943:52;6020:9;6014:16;6004:26;;6070:2;6059:9;6055:18;6049:25;6039:35;;6114:2;6103:9;6099:18;6093:25;6083:35;;5818:306;;;;;:::o;6129:380::-;6208:1;6204:12;;;;6251;;;6272:61;;6326:4;6318:6;6314:17;6304:27;;6272:61;6379:2;6371:6;6368:14;6348:18;6345:38;6342:161;;6425:10;6420:3;6416:20;6413:1;6406:31;6460:4;6457:1;6450:15;6488:4;6485:1;6478:15;6342:161;;6129:380;;;:::o;6514:127::-;6575:10;6570:3;6566:20;6563:1;6556:31;6606:4;6603:1;6596:15;6630:4;6627:1;6620:15;6646:125;6711:9;;;6732:10;;;6729:36;;;6745:18;;:::i;6776:168::-;6849:9;;;6880;;6897:15;;;6891:22;;6877:37;6867:71;;6918:18;;:::i;6949:217::-;6989:1;7015;7005:132;;7059:10;7054:3;7050:20;7047:1;7040:31;7094:4;7091:1;7084:15;7122:4;7119:1;7112:15;7005:132;-1:-1:-1;7151:9:1;;6949:217::o;9229:401::-;9431:2;9413:21;;;9470:2;9450:18;;;9443:30;9509:34;9504:2;9489:18;;9482:62;-1:-1:-1;;;9575:2:1;9560:18;;9553:35;9620:3;9605:19;;9229:401::o;9635:399::-;9837:2;9819:21;;;9876:2;9856:18;;;9849:30;9915:34;9910:2;9895:18;;9888:62;-1:-1:-1;;;9981:2:1;9966:18;;9959:33;10024:3;10009:19;;9635:399::o;12065:128::-;12132:9;;;12153:11;;;12150:37;;;12167:18;;:::i;13298:127::-;13359:10;13354:3;13350:20;13347:1;13340:31;13390:4;13387:1;13380:15;13414:4;13411:1;13404:15;13430:251;13500:6;13553:2;13541:9;13532:7;13528:23;13524:32;13521:52;;;13569:1;13566;13559:12;13521:52;13601:9;13595:16;13620:31;13645:5;13620:31;:::i;13686:980::-;13948:4;13996:3;13985:9;13981:19;14027:6;14016:9;14009:25;14053:2;14091:6;14086:2;14075:9;14071:18;14064:34;14134:3;14129:2;14118:9;14114:18;14107:31;14158:6;14193;14187:13;14224:6;14216;14209:22;14262:3;14251:9;14247:19;14240:26;;14301:2;14293:6;14289:15;14275:29;;14322:1;14332:195;14346:6;14343:1;14340:13;14332:195;;;14411:13;;-1:-1:-1;;;;;14407:39:1;14395:52;;14502:15;;;;14467:12;;;;14443:1;14361:9;14332:195;;;-1:-1:-1;;;;;;;14583:32:1;;;;14578:2;14563:18;;14556:60;-1:-1:-1;;;14647:3:1;14632:19;14625:35;14544:3;13686:980;-1:-1:-1;;;13686:980:1:o

Swarm Source

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