ETH Price: $2,491.96 (-1.07%)

Token

HBZ (HBZ)
 

Overview

Max Total Supply

1,000,000,000 HBZ

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,998,999.000000000308854689 HBZ

Value
$0.00
0xf304686ebd40001ced79c232a4c35b6885d87e4e
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:
HBZ

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-23
*/

/**
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

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

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

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

interface IBEP20 {
    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 IBEP20Metadata is IBEP20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract BEP20 is Context, IBEP20, IBEP20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _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,
                "BEP20: 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,
                "BEP20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: 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), "BEP20: 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 _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 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 (uint256);

    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r,
                    bytes32 s) external;

    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out,
               uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

    function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired,
                          uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline)
                          external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin,
                             uint256 amountETHMin, address to, uint256 deadline)
                             external payable returns (uint256 amountToken, uint256 amountETH,
                             uint256 liquidity);

    function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin,
                             uint256 amountBMin, address to, uint256 deadline) 
                             external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin,
                                uint256 amountETHMin, address to, uint256 deadline) 
                                external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity,
                                       uint256 amountAMin, uint256 amountBMin, address to,
                                       uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                       external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin,
                                          uint256 amountETHMin, address to, uint256 deadline,
                                          bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                          external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) 
                   external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) 
                          external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
                         external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
                           external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
                          external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
        external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax,
        uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external;
}

contract HBZ is BEP20, Ownable { // 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 internal sellAmount = 0;
    uint256 internal buyAmount = 0;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; //
    address payable public devWallet; //

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public sellDevFee;

    bool public swapAndLiquifyEnabled = true;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = false; 
    uint256 private gasPriceLimit = 7 * 1 gwei; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public launchtimestamp; // FOR LAUNCH TIMESTAMP 
    uint256 public cooldowntimer = 5; // DEFAULT COOLDOWN TIMER

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event updateDevWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellBurnFee, uint256 buyMarketingFees,
                     uint256 buyBurnFee, uint256 buyDevFee, uint256 sellDevFee);

    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() BEP20("HBZ", "HBZ") { // 
        marketingWallet = payable(0x20B049785734fa8Bb50181Da71Eb898a218fa76c); // 
        devWallet = payable(0x20B049785734fa8Bb50181Da71Eb898a218fa76c); // 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        //INITIAL FEE VALUES HERE
        buyMarketingFees = 0;
        sellMarketingFees = 0;
        buyBurnFee = 0;
        sellBurnFee = 0;
        buyDevFee = 0;
        sellDevFee = 0;

        // TOTAL BUY AND TOTAL SELL FEE CALCS
        totalBuyFees = buyMarketingFees.add(buyDevFee);
        totalSellFees = sellMarketingFees.add(sellDevFee);

        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this), uniswapV2Router.WETH());

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 totalSupply = (1_000_000_000) * (10**18); // TOTAL SUPPLY IS SET HERE
        _mint(owner(), totalSupply); // only time internal mint function is ever called is to create supply
        maxWallet = _totalSupply / 50; // 2%
        swapTokensAtAmount = _totalSupply / 100; // 2%;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled);
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

    function setDevWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        devWallet = payable(wallet);
        emit updateDevWallet(wallet);
    }
    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    
    function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 100, "max wallet cannot be set to less than 1%");
        maxWallet = value;
    }

    // TAKES ALL BNB FROM THE CONTRACT ADDRESS AND SENDS IT TO OWNERS WALLET
    function Sweep() external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(msg.sender).transfer(amountBNB);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // THIS IS THE ONE YOU USE TO TRASNFER OWNER IF U EVER DO
    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell, uint256 devBuy, uint256 devSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;
        buyDevFee = devBuy;
        sellDevFee = devSell;

        totalSellFees = sellMarketingFees.add(sellDevFee);
        totalBuyFees = buyMarketingFees.add(buyDevFee);

        // 
        require(totalSellFees <= 99 && totalBuyFees <= 99, "t");

        emit UpdateFees(sellMarketingFees, sellBurnFee, sellDevFee, buyMarketingFees,
                        buyBurnFee, buyDevFee);
    }

    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), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");

        uint256 marketingFees;
        uint256 burnFee;
        uint256 devFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
                devFee = sellDevFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                burnFee = buyBurnFee;
                devFee = buyDevFee;

                if (limitsInEffect) {
                require(block.number > launchblock + 0,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferBlock[tx.origin] = block.number;
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
            }

            if (maxWalletEnabled) {
            uint256 contractBalanceRecipient = balanceOf(to);
            require(contractBalanceRecipient + amount <= maxWallet,
                    "Exceeds maximum wallet token amount." );
            }
            }

            uint256 totalFees = marketingFees.add(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && !automatedMarketMakerPairs[from]) {
                swapping = true;
             
                uint256 swapBalance = swapTokensAtAmount;
                swapAndSendDividends(swapBalance);
                buyAmount = 0;
                sellAmount = 0;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);
            uint256 burntokens = amount.mul(burnFee).div(100);

            amount = amount.sub(fees + burntokens);

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);

            if (burntokens > 0) {
                super._transfer(from, DEAD, burntokens);
                _totalSupply = _totalSupply.sub(burntokens);
            }
           
        }

        super._transfer(from, to, amount);
        
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    // TAX PAYOUT CODE 
    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);

        bool success = true;
        bool successOp1 = true;
        
        uint256 _marketDevTotal = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee);

        uint256 feePortions;
        if (_marketDevTotal > 0) {
            feePortions = address(this).balance.div(_marketDevTotal);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
        uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(marketingWallet).call{value: marketingPayout}("");
        }
        
        if (devPayout > 0) {
            (successOp1, ) = address(devWallet).call{value: devPayout}("");
        }

        emit SendDividends(
            marketingPayout,
            success && successOp1
        );
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","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":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","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":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","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":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","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":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","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":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","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":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"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":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260088054600161ff0160a01b03191661dead17905560006009819055600a556010805460ff199081166001908117909255601880548216909217909155601c805490911690556401a13b8600601d5560056022553480156200006557600080fd5b506040518060400160405280600381526020016224212d60e91b8152506040518060400160405280600381526020016224212d60e91b8152508160039080519060200190620000b692919062000643565b508051620000cc90600490602084019062000643565b5050506000620000e16200048160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d80547320b049785734fa8bb50181da71eb898a218fa76c6001600160a01b03199182168117909255600e805490911690911790556000601481905560128190556015819055601381905560168190556017819055737a250d5630b4cf539739df2c5dacb4c659f2488d90620001b3908062000485602090811b6200161017901c565b600c81905550620001d76017546012546200048560201b620016101790919060201c565b600b55600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025a9190620006e9565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e39190620006e9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003579190620006e9565b600780546001600160a01b0319166001600160a01b0392909216918217905562000383906001620004f3565b306000908152601960205260408082208054600160ff1991821681179092553384528284208054821683179055600d546001600160a01b0316845291909220805490911690911790556b033b2e3c9fd0803ce8000000620003f7620003f06005546001600160a01b031690565b8262000547565b603260025462000408919062000714565b600f556002546200041c9060649062000714565b6011556001601b6000620004386005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601b909252902080549091166001179055506200079a9050565b3390565b60008062000494838562000737565b905083811015620004ec5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b9392505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0382166200059f5760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004e3565b620005bb816002546200048560201b620016101790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620005ee9183906200161062000485821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b82805462000651906200075e565b90600052602060002090601f016020900481019282620006755760008555620006c0565b82601f106200069057805160ff1916838001178555620006c0565b82800160010185558215620006c0579182015b82811115620006c0578251825591602001919060010190620006a3565b50620006ce929150620006d2565b5090565b5b80821115620006ce5760008155600101620006d3565b600060208284031215620006fc57600080fd5b81516001600160a01b0381168114620004ec57600080fd5b6000826200073257634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200075957634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200077357607f821691505b6020821081036200079457634e487b7160e01b600052602260045260246000fd5b50919050565b6129a180620007aa6000396000f3fe60806040526004361061031e5760003560e01c806375f0a874116101ab578063a614ff75116100f7578063d5e3725111610095578063e71dc3f51161006f578063e71dc3f514610942578063f2fde38b14610958578063f8b45b0514610978578063fc6b151c1461098e57600080fd5b8063d5e37251146108c6578063dd62ed3e146108e6578063e2f456051461092c57600080fd5b8063b4942988116100d1578063b494298814610846578063b62496f51461085c578063b74e3b111461088c578063d045a329146108ac57600080fd5b8063a614ff75146107f0578063a9059cbb14610810578063adb873bd1461083057600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107845780639c3b4fdc146107a4578063a0d82dc5146107ba578063a457c2d7146107d057600080fd5b806395451c291461073957806395d89b411461074f578063992c58e41461076457600080fd5b806375f0a874146106905780637fdde05c146106b05780638a8c523c146106d05780638c3c82b2146106e55780638da5cb5b146106fb5780638ea5220f1461071957600080fd5b806349bd5a5e1161026a5780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461061057806370a0823114610625578063715018a61461065b57806375829def1461067057600080fd5b80635d098b38146105b05780635eee4bae146105d0578063679ca6e9146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b806318160ddd116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b806318160ddd1461041b5780631d7b1fb41461043a5780631f53ac021461045057600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab578063095ea7b3146103cb5780631694505e146103fb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b506103876103823660046123c0565b6109ae565b005b34801561039557600080fd5b5061039e610a7f565b60405161035e91906123d9565b3480156103b757600080fd5b506103876103c6366004612458565b610b11565b3480156103d757600080fd5b506103eb6103e636600461248d565b610b9a565b604051901515815260200161035e565b34801561040757600080fd5b5060065461034a906001600160a01b031681565b34801561042757600080fd5b506002545b60405190815260200161035e565b34801561044657600080fd5b5061042c60225481565b34801561045c57600080fd5b5061038761046b3660046124b9565b610bb1565b34801561047c57600080fd5b5061038761048b3660046125ac565b610c48565b34801561049c57600080fd5b506103eb6104ab36600461266e565b610da0565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b506103eb6104e736600461248d565b610e09565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601c546103eb9060ff1681565b34801561053257600080fd5b506018546103eb9060ff1681565b34801561054c57600080fd5b506008546103eb90600160a81b900460ff1681565b34801561056d57600080fd5b506103eb61057c3660046124b9565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105a657600080fd5b5061042c60145481565b3480156105bc57600080fd5b506103876105cb3660046124b9565b610e3f565b3480156105dc57600080fd5b506103876105eb3660046123c0565b610ecf565b3480156105fc57600080fd5b5061038761060b3660046126af565b610f11565b34801561061c57600080fd5b50610387610f4e565b34801561063157600080fd5b5061042c6106403660046124b9565b6001600160a01b031660009081526020819052604090205490565b34801561066757600080fd5b50610387610fab565b34801561067c57600080fd5b5061038761068b3660046124b9565b61101f565b34801561069c57600080fd5b50600d5461034a906001600160a01b031681565b3480156106bc57600080fd5b506103876106cb366004612458565b611090565b3480156106dc57600080fd5b506103876110e5565b3480156106f157600080fd5b5061042c60215481565b34801561070757600080fd5b506005546001600160a01b031661034a565b34801561072557600080fd5b50600e5461034a906001600160a01b031681565b34801561074557600080fd5b5061042c60125481565b34801561075b57600080fd5b5061039e61116c565b34801561077057600080fd5b5061038761077f3660046126ca565b61117b565b34801561079057600080fd5b5061038761079f366004612458565b611294565b3480156107b057600080fd5b5061042c60165481565b3480156107c657600080fd5b5061042c60175481565b3480156107dc57600080fd5b506103eb6107eb36600461248d565b6112c8565b3480156107fc57600080fd5b5061038761080b3660046126af565b611317565b34801561081c57600080fd5b506103eb61082b36600461248d565b611354565b34801561083c57600080fd5b5061042c60135481565b34801561085257600080fd5b5061042c60205481565b34801561086857600080fd5b506103eb6108773660046124b9565b601a6020526000908152604090205460ff1681565b34801561089857600080fd5b506103876108a73660046123c0565b611361565b3480156108b857600080fd5b506010546103eb9060ff1681565b3480156108d257600080fd5b506103876108e13660046126af565b6113f1565b3480156108f257600080fd5b5061042c61090136600461270d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093857600080fd5b5061042c60115481565b34801561094e57600080fd5b5061042c60155481565b34801561096457600080fd5b506103876109733660046124b9565b611473565b34801561098457600080fd5b5061042c600f5481565b34801561099a57600080fd5b506103876109a93660046123c0565b61155e565b6005546001600160a01b031633146109e15760405162461bcd60e51b81526004016109d890612746565b60405180910390fd5b6109f381670de0b6b3a7640000612791565b90506000610a0e600954600a5461161090919063ffffffff16565b90506000610a3182610a2b600a548661167690919063ffffffff16565b906116f8565b90506000610a4e83610a2b6009548761167690919063ffffffff16565b9050610a598461173a565b600a54610a6690836118eb565b600a55600954610a7690826118eb565b60095550505050565b606060038054610a8e906127b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906127b0565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b3b5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000610ba733848461192d565b5060015b92915050565b6005546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa91015b60405180910390a150565b6005546001600160a01b03163314610c725760405162461bcd60e51b81526004016109d890612746565b8051825114610cc35760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109d8565b60c882511115610d205760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109d8565b60005b8251811015610d9b576000838281518110610d4057610d406127ea565b602002602001015190506000838381518110610d5e57610d5e6127ea565b6020026020010151670de0b6b3a7640000610d799190612791565b9050610d86338383611a52565b50508080610d9390612800565b915050610d23565b505050565b6000610dad848484611bd5565b610dff8433610dfa856040518060600160405280602881526020016128f9602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121b2565b61192d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba7918590610dfa9086611610565b6005546001600160a01b03163314610e695760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610c3d565b6005546001600160a01b03163314610ef95760405162461bcd60e51b81526004016109d890612746565b610f0b81670de0b6b3a7640000612791565b60115550565b6005546001600160a01b03163314610f3b5760405162461bcd60e51b81526004016109d890612746565b601c805460ff1916911515919091179055565b6005546001600160a01b03163314610f785760405162461bcd60e51b81526004016109d890612746565b6040514790339082156108fc029083906000818181858888f19350505050158015610fa7573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b81526004016109d890612746565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110495760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b90935292208054909116909117905561108d81611473565b50565b6005546001600160a01b031633146110ba5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110f5760405162461bcd60e51b81526004016109d890612746565b600854600160a81b900460ff161561112657600080fd5b6008805460ff60a81b1916600160a81b17905543602055426021556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b606060048054610a8e906127b0565b6005546001600160a01b031633146111a55760405162461bcd60e51b81526004016109d890612746565b6014869055601584905560128590556013839055601682905560178190556111cd8582611610565b600b556016546014546111df91611610565b600c55600b546063108015906111f857506063600c5411155b6112285760405162461bcd60e51b81526020600482015260016024820152601d60fa1b60448201526064016109d8565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146112be5760405162461bcd60e51b81526004016109d890612746565b610fa782826121ec565b6000610ba73384610dfa85604051806060016040528060258152602001612947602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121b2565b6005546001600160a01b031633146113415760405162461bcd60e51b81526004016109d890612746565b6010805460ff1916911515919091179055565b6000610ba7338484611bd5565b6005546001600160a01b0316331461138b5760405162461bcd60e51b81526004016109d890612746565b61012c8111156113ec5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109d8565b602255565b6005546001600160a01b0316331461141b5760405162461bcd60e51b81526004016109d890612746565b60185481151560ff90911615150361143257600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610c3d565b6005546001600160a01b0316331461149d5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b0381166115025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115885760405162461bcd60e51b81526004016109d890612746565b61159a81670de0b6b3a7640000612791565b905060646002546115ab9190612819565b81101561160b5760405162461bcd60e51b815260206004820152602860248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015267207468616e20312560c01b60648201526084016109d8565b600f55565b60008061161d838561283b565b90508381101561166f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109d8565b9392505050565b60008260000361168857506000610bab565b60006116948385612791565b9050826116a18583612819565b1461166f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109d8565b600061166f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612240565b806000036117455750565b61174e8161226e565b60165460145460019182916000916117669190611610565b60175460125461177591611610565b61177f919061283b565b9050600081156117965761179347836116f8565b90505b6000816117b060125460145461161090919063ffffffff16565b6117ba9190612791565b90506000826117d660175460165461161090919063ffffffff16565b6117e09190612791565b9050811561184057600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611835576040519150601f19603f3d011682016040523d82523d6000602084013e61183a565b606091505b50909650505b801561189e57600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611893576040519150601f19603f3d011682016040523d82523d6000602084013e611898565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9828780156118ca5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061166f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b2565b6001600160a01b03831661198f5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0382166119f05760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ab65760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109d8565b6001600160a01b038216611b185760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109d8565b611b5581604051806060016040528060268152602001612921602691396001600160a01b03861660009081526020819052604090205491906121b2565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611b849082611610565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a45565b6001600160a01b038316611c3a5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6001600160a01b038216611c9c5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0383166000908152601b60205260408120548190819060ff16611d1957600854600160a81b900460ff16611d195760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109d8565b83600003611d3557611d2d86866000611a52565b505050505050565b600854600160a01b900460ff16158015611d6857506001600160a01b03861660009081526019602052604090205460ff16155b8015611d8d57506001600160a01b03851660009081526019602052604090205460ff16155b156121a7576001600160a01b0385166000908152601a602052604090205460ff168015611e4d57601254601354601754601c54929650909450925060ff1615611e4857602254326000908152601f6020526040902054611ded919061283b565b421015611e355760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601f602052604090204290555b612074565b601454601554601654601c54929650909450925060ff1615611fe757602054611e7790600061283b565b4311611eba5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109d8565b601d543a1115611f0c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109d8565b326000908152601e6020526040902054439003611f625760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109d8565b602254326000908152601f6020526040902054611f7f919061283b565b421015611fc75760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601e60209081526040808320439055601f90915290204290555b60105460ff1615612074576001600160a01b038616600090815260208190526040902054600f54612018878361283b565b11156120725760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109d8565b505b60006120808584611610565b3060009081526020819052604090205460115491925090811080159081906120c157506001600160a01b038a166000908152601a602052604090205460ff16155b156120fe576008805460ff60a01b1916600160a01b1790556011546120e58161173a565b506000600a8190556009556008805460ff60a01b191690555b600061210f6064610a2b8b87611676565b905060006121226064610a2b8c8b611676565b9050612138612131828461283b565b8b906118eb565b995085156121555760095461214d9083611610565b600955612166565b600a546121629083611610565b600a555b6121718c3084611a52565b80156121a05760085461218f908d906001600160a01b031683611a52565b60025461219c90826118eb565b6002555b5050505050505b611d2d868686611a52565b600081848411156121d65760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612853565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836122615760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612819565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122a3576122a36127ea565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612320919061286a565b81600181518110612333576123336127ea565b6001600160a01b039283166020918202929092010152600654612359913091168461192d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612392908590600090869030904290600401612887565b600060405180830381600087803b1580156123ac57600080fd5b505af1158015611d2d573d6000803e3d6000fd5b6000602082840312156123d257600080fd5b5035919050565b600060208083528351808285015260005b81811015612406578581018301518582016040015282016123ea565b81811115612418576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461108d57600080fd5b8035801515811461245357600080fd5b919050565b6000806040838503121561246b57600080fd5b82356124768161242e565b915061248460208401612443565b90509250929050565b600080604083850312156124a057600080fd5b82356124ab8161242e565b946020939093013593505050565b6000602082840312156124cb57600080fd5b813561166f8161242e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612515576125156124d6565b604052919050565b600067ffffffffffffffff821115612537576125376124d6565b5060051b60200190565b600082601f83011261255257600080fd5b813560206125676125628361251d565b6124ec565b82815260059290921b8401810191818101908684111561258657600080fd5b8286015b848110156125a1578035835291830191830161258a565b509695505050505050565b600080604083850312156125bf57600080fd5b823567ffffffffffffffff808211156125d757600080fd5b818501915085601f8301126125eb57600080fd5b813560206125fb6125628361251d565b82815260059290921b8401810191818101908984111561261a57600080fd5b948201945b838610156126415785356126328161242e565b8252948201949082019061261f565b9650508601359250508082111561265757600080fd5b5061266485828601612541565b9150509250929050565b60008060006060848603121561268357600080fd5b833561268e8161242e565b9250602084013561269e8161242e565b929592945050506040919091013590565b6000602082840312156126c157600080fd5b61166f82612443565b60008060008060008060c087890312156126e357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561272057600080fd5b823561272b8161242e565b9150602083013561273b8161242e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156127ab576127ab61277b565b500290565b600181811c908216806127c457607f821691505b6020821081036127e457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016128125761281261277b565b5060010190565b60008261283657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561284e5761284e61277b565b500190565b6000828210156128655761286561277b565b500390565b60006020828403121561287c57600080fd5b815161166f8161242e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d75784516001600160a01b0316835293830193918301916001016128b2565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122089e0b5e719eafedf4b4b85bdee61633f65e514a136eb434bde978f31755a325164736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806375f0a874116101ab578063a614ff75116100f7578063d5e3725111610095578063e71dc3f51161006f578063e71dc3f514610942578063f2fde38b14610958578063f8b45b0514610978578063fc6b151c1461098e57600080fd5b8063d5e37251146108c6578063dd62ed3e146108e6578063e2f456051461092c57600080fd5b8063b4942988116100d1578063b494298814610846578063b62496f51461085c578063b74e3b111461088c578063d045a329146108ac57600080fd5b8063a614ff75146107f0578063a9059cbb14610810578063adb873bd1461083057600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107845780639c3b4fdc146107a4578063a0d82dc5146107ba578063a457c2d7146107d057600080fd5b806395451c291461073957806395d89b411461074f578063992c58e41461076457600080fd5b806375f0a874146106905780637fdde05c146106b05780638a8c523c146106d05780638c3c82b2146106e55780638da5cb5b146106fb5780638ea5220f1461071957600080fd5b806349bd5a5e1161026a5780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461061057806370a0823114610625578063715018a61461065b57806375829def1461067057600080fd5b80635d098b38146105b05780635eee4bae146105d0578063679ca6e9146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b806318160ddd116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b806318160ddd1461041b5780631d7b1fb41461043a5780631f53ac021461045057600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab578063095ea7b3146103cb5780631694505e146103fb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b506103876103823660046123c0565b6109ae565b005b34801561039557600080fd5b5061039e610a7f565b60405161035e91906123d9565b3480156103b757600080fd5b506103876103c6366004612458565b610b11565b3480156103d757600080fd5b506103eb6103e636600461248d565b610b9a565b604051901515815260200161035e565b34801561040757600080fd5b5060065461034a906001600160a01b031681565b34801561042757600080fd5b506002545b60405190815260200161035e565b34801561044657600080fd5b5061042c60225481565b34801561045c57600080fd5b5061038761046b3660046124b9565b610bb1565b34801561047c57600080fd5b5061038761048b3660046125ac565b610c48565b34801561049c57600080fd5b506103eb6104ab36600461266e565b610da0565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b506103eb6104e736600461248d565b610e09565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601c546103eb9060ff1681565b34801561053257600080fd5b506018546103eb9060ff1681565b34801561054c57600080fd5b506008546103eb90600160a81b900460ff1681565b34801561056d57600080fd5b506103eb61057c3660046124b9565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105a657600080fd5b5061042c60145481565b3480156105bc57600080fd5b506103876105cb3660046124b9565b610e3f565b3480156105dc57600080fd5b506103876105eb3660046123c0565b610ecf565b3480156105fc57600080fd5b5061038761060b3660046126af565b610f11565b34801561061c57600080fd5b50610387610f4e565b34801561063157600080fd5b5061042c6106403660046124b9565b6001600160a01b031660009081526020819052604090205490565b34801561066757600080fd5b50610387610fab565b34801561067c57600080fd5b5061038761068b3660046124b9565b61101f565b34801561069c57600080fd5b50600d5461034a906001600160a01b031681565b3480156106bc57600080fd5b506103876106cb366004612458565b611090565b3480156106dc57600080fd5b506103876110e5565b3480156106f157600080fd5b5061042c60215481565b34801561070757600080fd5b506005546001600160a01b031661034a565b34801561072557600080fd5b50600e5461034a906001600160a01b031681565b34801561074557600080fd5b5061042c60125481565b34801561075b57600080fd5b5061039e61116c565b34801561077057600080fd5b5061038761077f3660046126ca565b61117b565b34801561079057600080fd5b5061038761079f366004612458565b611294565b3480156107b057600080fd5b5061042c60165481565b3480156107c657600080fd5b5061042c60175481565b3480156107dc57600080fd5b506103eb6107eb36600461248d565b6112c8565b3480156107fc57600080fd5b5061038761080b3660046126af565b611317565b34801561081c57600080fd5b506103eb61082b36600461248d565b611354565b34801561083c57600080fd5b5061042c60135481565b34801561085257600080fd5b5061042c60205481565b34801561086857600080fd5b506103eb6108773660046124b9565b601a6020526000908152604090205460ff1681565b34801561089857600080fd5b506103876108a73660046123c0565b611361565b3480156108b857600080fd5b506010546103eb9060ff1681565b3480156108d257600080fd5b506103876108e13660046126af565b6113f1565b3480156108f257600080fd5b5061042c61090136600461270d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093857600080fd5b5061042c60115481565b34801561094e57600080fd5b5061042c60155481565b34801561096457600080fd5b506103876109733660046124b9565b611473565b34801561098457600080fd5b5061042c600f5481565b34801561099a57600080fd5b506103876109a93660046123c0565b61155e565b6005546001600160a01b031633146109e15760405162461bcd60e51b81526004016109d890612746565b60405180910390fd5b6109f381670de0b6b3a7640000612791565b90506000610a0e600954600a5461161090919063ffffffff16565b90506000610a3182610a2b600a548661167690919063ffffffff16565b906116f8565b90506000610a4e83610a2b6009548761167690919063ffffffff16565b9050610a598461173a565b600a54610a6690836118eb565b600a55600954610a7690826118eb565b60095550505050565b606060038054610a8e906127b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906127b0565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b3b5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000610ba733848461192d565b5060015b92915050565b6005546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa91015b60405180910390a150565b6005546001600160a01b03163314610c725760405162461bcd60e51b81526004016109d890612746565b8051825114610cc35760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109d8565b60c882511115610d205760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109d8565b60005b8251811015610d9b576000838281518110610d4057610d406127ea565b602002602001015190506000838381518110610d5e57610d5e6127ea565b6020026020010151670de0b6b3a7640000610d799190612791565b9050610d86338383611a52565b50508080610d9390612800565b915050610d23565b505050565b6000610dad848484611bd5565b610dff8433610dfa856040518060600160405280602881526020016128f9602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121b2565b61192d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba7918590610dfa9086611610565b6005546001600160a01b03163314610e695760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610c3d565b6005546001600160a01b03163314610ef95760405162461bcd60e51b81526004016109d890612746565b610f0b81670de0b6b3a7640000612791565b60115550565b6005546001600160a01b03163314610f3b5760405162461bcd60e51b81526004016109d890612746565b601c805460ff1916911515919091179055565b6005546001600160a01b03163314610f785760405162461bcd60e51b81526004016109d890612746565b6040514790339082156108fc029083906000818181858888f19350505050158015610fa7573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b81526004016109d890612746565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110495760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b90935292208054909116909117905561108d81611473565b50565b6005546001600160a01b031633146110ba5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110f5760405162461bcd60e51b81526004016109d890612746565b600854600160a81b900460ff161561112657600080fd5b6008805460ff60a81b1916600160a81b17905543602055426021556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b606060048054610a8e906127b0565b6005546001600160a01b031633146111a55760405162461bcd60e51b81526004016109d890612746565b6014869055601584905560128590556013839055601682905560178190556111cd8582611610565b600b556016546014546111df91611610565b600c55600b546063108015906111f857506063600c5411155b6112285760405162461bcd60e51b81526020600482015260016024820152601d60fa1b60448201526064016109d8565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146112be5760405162461bcd60e51b81526004016109d890612746565b610fa782826121ec565b6000610ba73384610dfa85604051806060016040528060258152602001612947602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121b2565b6005546001600160a01b031633146113415760405162461bcd60e51b81526004016109d890612746565b6010805460ff1916911515919091179055565b6000610ba7338484611bd5565b6005546001600160a01b0316331461138b5760405162461bcd60e51b81526004016109d890612746565b61012c8111156113ec5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109d8565b602255565b6005546001600160a01b0316331461141b5760405162461bcd60e51b81526004016109d890612746565b60185481151560ff90911615150361143257600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610c3d565b6005546001600160a01b0316331461149d5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b0381166115025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115885760405162461bcd60e51b81526004016109d890612746565b61159a81670de0b6b3a7640000612791565b905060646002546115ab9190612819565b81101561160b5760405162461bcd60e51b815260206004820152602860248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015267207468616e20312560c01b60648201526084016109d8565b600f55565b60008061161d838561283b565b90508381101561166f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109d8565b9392505050565b60008260000361168857506000610bab565b60006116948385612791565b9050826116a18583612819565b1461166f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109d8565b600061166f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612240565b806000036117455750565b61174e8161226e565b60165460145460019182916000916117669190611610565b60175460125461177591611610565b61177f919061283b565b9050600081156117965761179347836116f8565b90505b6000816117b060125460145461161090919063ffffffff16565b6117ba9190612791565b90506000826117d660175460165461161090919063ffffffff16565b6117e09190612791565b9050811561184057600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611835576040519150601f19603f3d011682016040523d82523d6000602084013e61183a565b606091505b50909650505b801561189e57600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611893576040519150601f19603f3d011682016040523d82523d6000602084013e611898565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9828780156118ca5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061166f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b2565b6001600160a01b03831661198f5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0382166119f05760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ab65760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109d8565b6001600160a01b038216611b185760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109d8565b611b5581604051806060016040528060268152602001612921602691396001600160a01b03861660009081526020819052604090205491906121b2565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611b849082611610565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a45565b6001600160a01b038316611c3a5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6001600160a01b038216611c9c5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0383166000908152601b60205260408120548190819060ff16611d1957600854600160a81b900460ff16611d195760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109d8565b83600003611d3557611d2d86866000611a52565b505050505050565b600854600160a01b900460ff16158015611d6857506001600160a01b03861660009081526019602052604090205460ff16155b8015611d8d57506001600160a01b03851660009081526019602052604090205460ff16155b156121a7576001600160a01b0385166000908152601a602052604090205460ff168015611e4d57601254601354601754601c54929650909450925060ff1615611e4857602254326000908152601f6020526040902054611ded919061283b565b421015611e355760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601f602052604090204290555b612074565b601454601554601654601c54929650909450925060ff1615611fe757602054611e7790600061283b565b4311611eba5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109d8565b601d543a1115611f0c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109d8565b326000908152601e6020526040902054439003611f625760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109d8565b602254326000908152601f6020526040902054611f7f919061283b565b421015611fc75760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601e60209081526040808320439055601f90915290204290555b60105460ff1615612074576001600160a01b038616600090815260208190526040902054600f54612018878361283b565b11156120725760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109d8565b505b60006120808584611610565b3060009081526020819052604090205460115491925090811080159081906120c157506001600160a01b038a166000908152601a602052604090205460ff16155b156120fe576008805460ff60a01b1916600160a01b1790556011546120e58161173a565b506000600a8190556009556008805460ff60a01b191690555b600061210f6064610a2b8b87611676565b905060006121226064610a2b8c8b611676565b9050612138612131828461283b565b8b906118eb565b995085156121555760095461214d9083611610565b600955612166565b600a546121629083611610565b600a555b6121718c3084611a52565b80156121a05760085461218f908d906001600160a01b031683611a52565b60025461219c90826118eb565b6002555b5050505050505b611d2d868686611a52565b600081848411156121d65760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612853565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836122615760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612819565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122a3576122a36127ea565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612320919061286a565b81600181518110612333576123336127ea565b6001600160a01b039283166020918202929092010152600654612359913091168461192d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612392908590600090869030904290600401612887565b600060405180830381600087803b1580156123ac57600080fd5b505af1158015611d2d573d6000803e3d6000fd5b6000602082840312156123d257600080fd5b5035919050565b600060208083528351808285015260005b81811015612406578581018301518582016040015282016123ea565b81811115612418576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461108d57600080fd5b8035801515811461245357600080fd5b919050565b6000806040838503121561246b57600080fd5b82356124768161242e565b915061248460208401612443565b90509250929050565b600080604083850312156124a057600080fd5b82356124ab8161242e565b946020939093013593505050565b6000602082840312156124cb57600080fd5b813561166f8161242e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612515576125156124d6565b604052919050565b600067ffffffffffffffff821115612537576125376124d6565b5060051b60200190565b600082601f83011261255257600080fd5b813560206125676125628361251d565b6124ec565b82815260059290921b8401810191818101908684111561258657600080fd5b8286015b848110156125a1578035835291830191830161258a565b509695505050505050565b600080604083850312156125bf57600080fd5b823567ffffffffffffffff808211156125d757600080fd5b818501915085601f8301126125eb57600080fd5b813560206125fb6125628361251d565b82815260059290921b8401810191818101908984111561261a57600080fd5b948201945b838610156126415785356126328161242e565b8252948201949082019061261f565b9650508601359250508082111561265757600080fd5b5061266485828601612541565b9150509250929050565b60008060006060848603121561268357600080fd5b833561268e8161242e565b9250602084013561269e8161242e565b929592945050506040919091013590565b6000602082840312156126c157600080fd5b61166f82612443565b60008060008060008060c087890312156126e357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561272057600080fd5b823561272b8161242e565b9150602083013561273b8161242e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156127ab576127ab61277b565b500290565b600181811c908216806127c457607f821691505b6020821081036127e457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016128125761281261277b565b5060010190565b60008261283657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561284e5761284e61277b565b500190565b6000828210156128655761286561277b565b500390565b60006020828403121561287c57600080fd5b815161166f8161242e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d75784516001600160a01b0316835293830193918301916001016128b2565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122089e0b5e719eafedf4b4b85bdee61633f65e514a136eb434bde978f31755a325164736f6c634300080d0033

Deployed Bytecode Sourcemap

15362:14854:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15524:64;;;;;;;;;;-1:-1:-1;15524:64:0;;;;-1:-1:-1;;;;;15524:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;15524:64:0;;;;;;;;28143:443;;;;;;;;;;-1:-1:-1;28143:443:0;;;;;:::i;:::-;;:::i;:::-;;3245:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20071:181::-;;;;;;;;;;-1:-1:-1;20071:181:0;;;;;:::i;:::-;;:::i;4159:169::-;;;;;;;;;;-1:-1:-1;4159:169:0;;;;;:::i;:::-;;:::i;:::-;;;2115:14:1;;2108:22;2090:41;;2078:2;2063:18;4159:169:0;1950:187:1;15439:41:0;;;;;;;;;;-1:-1:-1;15439:41:0;;;;-1:-1:-1;;;;;15439:41:0;;;3566:108;;;;;;;;;;-1:-1:-1;3654:12:0;;3566:108;;;2523:25:1;;;2511:2;2496:18;3566:108:0;2377:177:1;16866:32:0;;;;;;;;;;;;;;;;19872:187;;;;;;;;;;-1:-1:-1;19872:187:0;;;;;:::i;:::-;;:::i;29652:561::-;;;;;;;;;;-1:-1:-1;29652:561:0;;;;;:::i;:::-;;:::i;4336:345::-;;;;;;;;;;-1:-1:-1;4336:345:0;;;;;:::i;:::-;;:::i;19277:93::-;;;;;;;;;;-1:-1:-1;19277:93:0;;19360:2;5901:36:1;;5889:2;5874:18;19277:93:0;5759:184:1;4689:218:0;;;;;;;;;;-1:-1:-1;4689:218:0;;;;;:::i;:::-;;:::i;15489:28::-;;;;;;;;;;-1:-1:-1;15489:28:0;;;;-1:-1:-1;;;;;15489:28:0;;;16475:34;;;;;;;;;;-1:-1:-1;16475:34:0;;;;;;;;16228:40;;;;;;;;;;-1:-1:-1;16228:40:0;;;;;;;;15623:34;;;;;;;;;;-1:-1:-1;15623:34:0;;;;-1:-1:-1;;;15623:34:0;;;;;;22991:126;;;;;;;;;;-1:-1:-1;22991:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23081:28:0;23057:4;23081:28;;;:19;:28;;;;;;;;;22991:126;16093:31;;;;;;;;;;;;;;;;19659:205;;;;;;;;;;-1:-1:-1;19659:205:0;;;;;:::i;:::-;;:::i;21279:120::-;;;;;;;;;;-1:-1:-1;21279:120:0;;;;;:::i;:::-;;:::i;20415:99::-;;;;;;;;;;-1:-1:-1;20415:99:0;;;;;:::i;:::-;;:::i;21125:146::-;;;;;;;;;;;;;:::i;3682:127::-;;;;;;;;;;-1:-1:-1;3682:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3783:18:0;3756:7;3783:18;;;;;;;;;;;;3682:127;7137:148;;;;;;;;;;;;;:::i;22030:212::-;;;;;;;;;;-1:-1:-1;22030:212:0;;;;;:::i;:::-;;:::i;15816:38::-;;;;;;;;;;-1:-1:-1;15816:38:0;;;;-1:-1:-1;;;;;15816:38:0;;;20260:147;;;;;;;;;;-1:-1:-1;20260:147:0;;;;;:::i;:::-;;:::i;19415:232::-;;;;;;;;;;;;;:::i;16804:30::-;;;;;;;;;;;;;;;;6923:79;;;;;;;;;;-1:-1:-1;6988:6:0;;-1:-1:-1;;;;;6988:6:0;6923:79;;15864:32;;;;;;;;;;-1:-1:-1;15864:32:0;;;;-1:-1:-1;;;;;15864:32:0;;;16021;;;;;;;;;;;;;;;;3353:104;;;;;;;;;;;;;:::i;22250:733::-;;;;;;;;;;-1:-1:-1;22250:733:0;;;;;:::i;:::-;;:::i;21623:140::-;;;;;;;;;;-1:-1:-1;21623:140:0;;;;;:::i;:::-;;:::i;16163:24::-;;;;;;;;;;;;;;;;16194:25;;;;;;;;;;;;;;;;4915:286;;;;;;;;;;-1:-1:-1;4915:286:0;;;;;:::i;:::-;;:::i;20522:103::-;;;;;;;;;;-1:-1:-1;20522:103:0;;;;;:::i;:::-;;:::i;3817:175::-;;;;;;;;;;-1:-1:-1;3817:175:0;;;;;:::i;:::-;;:::i;16060:26::-;;;;;;;;;;;;;;;;16753;;;;;;;;;;;;;;;;16336:57;;;;;;;;;;-1:-1:-1;16336:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20633:174;;;;;;;;;;-1:-1:-1;20633:174:0;;;;;:::i;:::-;;:::i;15939:35::-;;;;;;;;;;-1:-1:-1;15939:35:0;;;;;;;;21407:208;;;;;;;;;;-1:-1:-1;21407:208:0;;;;;:::i;:::-;;:::i;4000:151::-;;;;;;;;;;-1:-1:-1;4000:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4116:18:0;;;4089:7;4116:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4000:151;15981:33;;;;;;;;;;;;;;;;16131:25;;;;;;;;;;;;;;;;7293:244;;;;;;;;;;-1:-1:-1;7293:244:0;;;;;:::i;:::-;;:::i;15908:24::-;;;;;;;;;;;;;;;;20821:218;;;;;;;;;;-1:-1:-1;20821:218:0;;;;;:::i;:::-;;:::i;28143:443::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;;;;;;;;;28231:17:::1;:6:::0;28241::::1;28231:17;:::i;:::-;28222:26;;28259:19;28281:25;28295:10;;28281:9;;:13;;:25;;;;:::i;:::-;28259:47;;28317:15;28335:38;28361:11;28335:21;28346:9;;28335:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;28317:56;;28384:16;28403:39;28430:11;28403:22;28414:10;;28403:6;:10;;:22;;;;:::i;:39::-;28384:58;;28455:28;28476:6;28455:20;:28::i;:::-;28508:9;::::0;:22:::1;::::0;28522:7;28508:13:::1;:22::i;:::-;28496:9;:34:::0;28554:10:::1;::::0;:24:::1;::::0;28569:8;28554:14:::1;:24::i;:::-;28541:10;:37:::0;-1:-1:-1;;;;28143:443:0:o;3245:100::-;3299:13;3332:5;3325:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3245:100;:::o;20071:181::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20155:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20155:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20210:34;;2090:41:1;;;20210:34:0::1;::::0;2063:18:1;20210:34:0::1;;;;;;;20071:181:::0;;:::o;4159:169::-;4242:4;4259:39;183:10;4282:7;4291:6;4259:8;:39::i;:::-;-1:-1:-1;4316:4:0;4159:169;;;;;:::o;19872:187::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19940:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;19940:34:0::1;19970:4;19940:34;::::0;;19985:9:::1;:27:::0;;-1:-1:-1;;;;;;19985:27:0::1;::::0;::::1;::::0;;20028:23;;160:51:1;;;20028:23:0::1;::::0;133:18:1;20028:23:0::1;;;;;;;;19872:187:::0;:::o;29652:561::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;29824:6:::1;:13;29799:14;:21;:38;29791:81;;;::::0;-1:-1:-1;;;29791:81:0;;8531:2:1;29791:81:0::1;::::0;::::1;8513:21:1::0;8570:2;8550:18;;;8543:30;8609:32;8589:18;;;8582:60;8659:18;;29791:81:0::1;8329:354:1::0;29791:81:0::1;29916:3;29891:14;:21;:28;;29883:75;;;::::0;-1:-1:-1;;;29883:75:0;;8890:2:1;29883:75:0::1;::::0;::::1;8872:21:1::0;8929:2;8909:18;;;8902:30;8968:34;8948:18;;;8941:62;-1:-1:-1;;;9019:18:1;;;9012:32;9061:19;;29883:75:0::1;8688:398:1::0;29883:75:0::1;29974:9;29969:237;29993:14;:21;29989:1;:25;29969:237;;;30036:14;30053;30068:1;30053:17;;;;;;;;:::i;:::-;;;;;;;30036:34;;30085:21;30109:6;30116:1;30109:9;;;;;;;;:::i;:::-;;;;;;;30122:6;30109:20;;;;:::i;:::-;30085:44;;30144:50;30160:10;30172:6;30180:13;30144:15;:50::i;:::-;30021:185;;30016:3;;;;;:::i;:::-;;;;29969:237;;;;29652:561:::0;;:::o;4336:345::-;4449:4;4466:36;4476:6;4484:9;4495:6;4466:9;:36::i;:::-;4513:138;4522:6;183:10;4544:106;4582:6;4544:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4544:19:0;;;;;;:11;:19;;;;;;;;183:10;4544:33;;;;;;;;;;:37;:106::i;:::-;4513:8;:138::i;:::-;-1:-1:-1;4669:4:0;4336:345;;;;;:::o;4689:218::-;183:10;4777:4;4826:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4826:34:0;;;;;;;;;;4777:4;;4794:83;;4817:7;;4826:50;;4865:10;4826:38;:50::i;19659:205::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19733:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;19733:34:0::1;19763:4;19733:34;::::0;;19778:15:::1;:33:::0;;-1:-1:-1;;;;;;19778:33:0::1;::::0;::::1;::::0;;19827:29;;160:51:1;;;19827:29:0::1;::::0;133:18:1;19827:29:0::1;14:203:1::0;21279:120:0;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;21374:17:::1;:6:::0;21384::::1;21374:17;:::i;:::-;21353:18;:38:::0;-1:-1:-1;21279:120:0:o;20415:99::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;20484:14:::1;:22:::0;;-1:-1:-1;;20484:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20415:99::o;21125:146::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;21224:39:::1;::::0;21192:21:::1;::::0;21232:10:::1;::::0;21224:39;::::1;;;::::0;21192:21;;21172:17:::1;21224:39:::0;21172:17;21224:39;21192:21;21232:10;21224:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21161:110;21125:146::o:0;7137:148::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;7228:6:::1;::::0;7207:40:::1;::::0;7244:1:::1;::::0;-1:-1:-1;;;;;7228:6:0::1;::::0;7207:40:::1;::::0;7244:1;;7207:40:::1;7258:6;:19:::0;;-1:-1:-1;;;;;;7258:19:0::1;::::0;;7137:148::o;22030:212::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22099:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:36;;22131:4:::1;-1:-1:-1::0;;22099:36:0;;::::1;::::0;::::1;::::0;;;22146:33:::1;:43:::0;;;;;:50;;;;::::1;::::0;;::::1;::::0;;22207:27:::1;22099:29:::0;22207:17:::1;:27::i;:::-;22030:212:::0;:::o;20260:147::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20349:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;20349:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20260:147::o;19415:232::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;19479:14:::1;::::0;-1:-1:-1;;;19479:14:0;::::1;;;19478:15;19470:24;;;::::0;::::1;;19505:14;:21:::0;;-1:-1:-1;;;;19505:21:0::1;-1:-1:-1::0;;;19505:21:0::1;::::0;;19551:12:::1;19537:11;:26:::0;19592:15:::1;19574;:33:::0;19623:16:::1;::::0;::::1;::::0;19505:21;;19623:16:::1;19415:232::o:0;3353:104::-;3409:13;3442:7;3435:14;;;;;:::i;22250:733::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;22438:16:::1;:31:::0;;;22480:10:::1;:20:::0;;;22511:17:::1;:33:::0;;;22555:11:::1;:22:::0;;;22588:9:::1;:18:::0;;;22617:10:::1;:20:::0;;;22666:33:::1;22531:13:::0;22630:7;22666:21:::1;:33::i;:::-;22650:13;:49:::0;22746:9:::1;::::0;22725:16:::1;::::0;:31:::1;::::0;:20:::1;:31::i;:::-;22710:12;:46:::0;22790:13:::1;::::0;22807:2:::1;-1:-1:-1::0;22790:19:0;::::1;::::0;:41:::1;;;22829:2;22813:12;;:18;;22790:41;22782:55;;;::::0;-1:-1:-1;;;22782:55:0;;9565:2:1;22782:55:0::1;::::0;::::1;9547:21:1::0;9604:1;9584:18;;;9577:29;-1:-1:-1;;;9622:18:1;;;9615:31;9663:18;;22782:55:0::1;9363:324:1::0;22782:55:0::1;22866:17;::::0;22885:11:::1;::::0;22898:10:::1;::::0;22910:16:::1;::::0;22953:10:::1;::::0;22965:9:::1;::::0;22855:120:::1;::::0;;9979:25:1;;;10035:2;10020:18;;10013:34;;;;10063:18;;;10056:34;;;;10121:2;10106:18;;10099:34;10164:3;10149:19;;10142:35;10208:3;10193:19;;10186:35;22855:120:0::1;::::0;9966:3:1;9951:19;22855:120:0::1;;;;;;;22250:733:::0;;;;;;:::o;21623:140::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;21714:41:::1;21743:4;21749:5;21714:28;:41::i;4915:286::-:0;5008:4;5025:146;183:10;5048:7;5057:113;5096:15;5057:113;;;;;;;;;;;;;;;;;183:10;5057:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5057:34:0;;;;;;;;;;;;:38;:113::i;20522:103::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;20593:16:::1;:24:::0;;-1:-1:-1;;20593:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20522:103::o;3817:175::-;3903:4;3920:42;183:10;3944:9;3955:6;3920:9;:42::i;20633:174::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;20721:3:::1;20712:5;:12;;20704:63;;;::::0;-1:-1:-1;;;20704:63:0;;10434:2:1;20704:63:0::1;::::0;::::1;10416:21:1::0;10473:2;10453:18;;;10446:30;10512:34;10492:18;;;10485:62;-1:-1:-1;;;10563:18:1;;;10556:36;10609:19;;20704:63:0::1;10232:402:1::0;20704:63:0::1;20778:13;:21:::0;20633:174::o;21407:208::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;21487:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;21479:41:::1;;;::::0;::::1;;21531:21;:31:::0;;-1:-1:-1;;21531:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21578:29:::1;::::0;2090:41:1;;;21578:29:0::1;::::0;2078:2:1;2063:18;21578:29:0::1;1950:187:1::0;7293:244:0;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7382:22:0;::::1;7374:73;;;::::0;-1:-1:-1;;;7374:73:0;;10841:2:1;7374:73:0::1;::::0;::::1;10823:21:1::0;10880:2;10860:18;;;10853:30;10919:34;10899:18;;;10892:62;-1:-1:-1;;;10970:18:1;;;10963:36;11016:19;;7374:73:0::1;10639:402:1::0;7374:73:0::1;7484:6;::::0;7463:38:::1;::::0;-1:-1:-1;;;;;7463:38:0;;::::1;::::0;7484:6:::1;::::0;7463:38:::1;::::0;7484:6:::1;::::0;7463:38:::1;7512:6;:17:::0;;-1:-1:-1;;;;;;7512:17:0::1;-1:-1:-1::0;;;;;7512:17:0;;;::::1;::::0;;;::::1;::::0;;7293:244::o;20821:218::-;7050:6;;-1:-1:-1;;;;;7050:6:0;183:10;7050:22;7042:67;;;;-1:-1:-1;;;7042:67:0;;;;;;;:::i;:::-;20896:16:::1;:5:::0;20905:6:::1;20896:16;:::i;:::-;20888:24;;20955:3;20940:12;;:18;;;;:::i;:::-;20931:5;:27;;20923:80;;;::::0;-1:-1:-1;;;20923:80:0;;11470:2:1;20923:80:0::1;::::0;::::1;11452:21:1::0;11509:2;11489:18;;;11482:30;11548:34;11528:18;;;11521:62;-1:-1:-1;;;11599:18:1;;;11592:38;11647:19;;20923:80:0::1;11268:404:1::0;20923:80:0::1;21014:9;:17:::0;20821:218::o;479:179::-;537:7;;569:5;573:1;569;:5;:::i;:::-;557:17;;598:1;593;:6;;585:46;;;;-1:-1:-1;;;585:46:0;;12012:2:1;585:46:0;;;11994:21:1;12051:2;12031:18;;;12024:30;12090:29;12070:18;;;12063:57;12137:18;;585:46:0;11810:351:1;585:46:0;649:1;479:179;-1:-1:-1;;;479:179:0:o;1008:248::-;1066:7;1090:1;1095;1090:6;1086:47;;-1:-1:-1;1120:1:0;1113:8;;1086:47;1145:9;1157:5;1161:1;1157;:5;:::i;:::-;1145:17;-1:-1:-1;1190:1:0;1181:5;1185:1;1145:17;1181:5;:::i;:::-;:10;1173:56;;;;-1:-1:-1;;;1173:56:0;;12368:2:1;1173:56:0;;;12350:21:1;12407:2;12387:18;;;12380:30;12446:34;12426:18;;;12419:62;-1:-1:-1;;;12497:18:1;;;12490:31;12538:19;;1173:56:0;12166:397:1;1264:132:0;1322:7;1349:39;1353:1;1356;1349:39;;;;;;;;;;;;;;;;;:3;:39::i;28619:1025::-;28688:6;28698:1;28688:11;28684:50;;28619:1025;:::o;28684:50::-;28744:24;28761:6;28744:16;:24::i;:::-;28937:9;;28916:16;;28796:4;;;;28781:12;;28916:31;;:16;:20;:31::i;:::-;28902:10;;28880:17;;:33;;:21;:33::i;:::-;:67;;;;:::i;:::-;28854:93;-1:-1:-1;28960:19:0;28994;;28990:108;;29044:42;:21;29070:15;29044:25;:42::i;:::-;29030:56;;28990:108;29108:23;29176:11;29134:39;29155:17;;29134:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;29108:79;;29198:17;29246:11;29218:25;29232:10;;29218:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;29198:59;-1:-1:-1;29282:19:0;;29278:123;;29340:15;;29332:57;;-1:-1:-1;;;;;29340:15:0;;;;29369;;29332:57;;;;29369:15;29340;29332:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29318:71:0;;-1:-1:-1;;29278:123:0;29425:13;;29421:108;;29480:9;;29472:45;;-1:-1:-1;;;;;29480:9:0;;;;29503;;29472:45;;;;29503:9;29480;29472:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29455:62:0;;-1:-1:-1;;29421:108:0;29546:90;29574:15;29604:7;:21;;;;;29615:10;29604:21;29546:90;;;12946:25:1;;;13014:14;;13007:22;13002:2;12987:18;;12980:50;12919:18;29546:90:0;;;;;;;28673:971;;;;;;28619:1025;:::o;666:136::-;724:7;751:43;755:1;758;751:43;;;;;;;;;;;;;;;;;:3;:43::i;6141:346::-;-1:-1:-1;;;;;6243:19:0;;6235:68;;;;-1:-1:-1;;;6235:68:0;;13243:2:1;6235:68:0;;;13225:21:1;13282:2;13262:18;;;13255:30;13321:34;13301:18;;;13294:62;-1:-1:-1;;;13372:18:1;;;13365:34;13416:19;;6235:68:0;13041:400:1;6235:68:0;-1:-1:-1;;;;;6322:21:0;;6314:68;;;;-1:-1:-1;;;6314:68:0;;13648:2:1;6314:68:0;;;13630:21:1;13687:2;13667:18;;;13660:30;13726:34;13706:18;;;13699:62;-1:-1:-1;;;13777:18:1;;;13770:32;13819:19;;6314:68:0;13446:398:1;6314:68:0;-1:-1:-1;;;;;6395:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6447:32;;2523:25:1;;;6447:32:0;;2496:18:1;6447:32:0;;;;;;;;6141:346;;;:::o;5209:538::-;-1:-1:-1;;;;;5315:20:0;;5307:70;;;;-1:-1:-1;;;5307:70:0;;14051:2:1;5307:70:0;;;14033:21:1;14090:2;14070:18;;;14063:30;14129:34;14109:18;;;14102:62;-1:-1:-1;;;14180:18:1;;;14173:35;14225:19;;5307:70:0;13849:401:1;5307:70:0;-1:-1:-1;;;;;5396:23:0;;5388:71;;;;-1:-1:-1;;;5388:71:0;;14457:2:1;5388:71:0;;;14439:21:1;14496:2;14476:18;;;14469:30;14535:34;14515:18;;;14508:62;-1:-1:-1;;;14586:18:1;;;14579:33;14629:19;;5388:71:0;14255:399:1;5388:71:0;5552:70;5574:6;5552:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5552:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;5532:17:0;;;:9;:17;;;;;;;;;;;:90;;;;5656:20;;;;;;;:32;;5681:6;5656:24;:32::i;:::-;-1:-1:-1;;;;;5633:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;5704:35;2523:25:1;;;5633:20:0;;5704:35;;;;;;2496:18:1;5704:35:0;2377:177:1;23125:3494:0;-1:-1:-1;;;;;23225:18:0;;23217:69;;;;-1:-1:-1;;;23217:69:0;;14861:2:1;23217:69:0;;;14843:21:1;14900:2;14880:18;;;14873:30;14939:34;14919:18;;;14912:62;-1:-1:-1;;;14990:18:1;;;14983:36;15036:19;;23217:69:0;14659:402:1;23217:69:0;-1:-1:-1;;;;;23305:16:0;;23297:65;;;;-1:-1:-1;;;23297:65:0;;15268:2:1;23297:65:0;;;15250:21:1;15307:2;15287:18;;;15280:30;15346:34;15326:18;;;15319:62;-1:-1:-1;;;15397:18:1;;;15390:34;15441:19;;23297:65:0;15066:400:1;23297:65:0;-1:-1:-1;;;;;23465:39:0;;23375:21;23465:39;;;:33;:39;;;;;;23375:21;;;;23465:39;;23460:142;;23529:14;;-1:-1:-1;;;23529:14:0;;;;23521:59;;;;-1:-1:-1;;;23521:59:0;;15673:2:1;23521:59:0;;;15655:21:1;;;15692:18;;;15685:30;15751:34;15731:18;;;15724:62;15803:18;;23521:59:0;15471:356:1;23521:59:0;23618:6;23628:1;23618:11;23614:2942;;23646:28;23662:4;23668:2;23672:1;23646:15;:28::i;:::-;23689:7;;;23125:3494;;;:::o;23614:2942::-;23752:8;;-1:-1:-1;;;23752:8:0;;;;23751:9;:39;;;;-1:-1:-1;;;;;;23765:25:0;;;;;;:19;:25;;;;;;;;23764:26;23751:39;:67;;;;-1:-1:-1;;;;;;23795:23:0;;;;;;:19;:23;;;;;;;;23794:24;23751:67;23733:2823;;;-1:-1:-1;;;;;23862:29:0;;23845:14;23862:29;;;:25;:29;;;;;;;;23906:1494;;;;23956:17;;24002:11;;24041:10;;24076:14;;23956:17;;-1:-1:-1;24002:11:0;;-1:-1:-1;24041:10:0;-1:-1:-1;24076:14:0;;24072:269;;;24180:13;;24167:9;24138:39;;;;:28;:39;;;;;;:55;;24180:13;24138:55;:::i;:::-;24119:15;:74;;24111:134;;;;-1:-1:-1;;;24111:134:0;;16034:2:1;24111:134:0;;;16016:21:1;16073:2;16053:18;;;16046:30;-1:-1:-1;;;16092:18:1;;;16085:52;16154:18;;24111:134:0;15832:346:1;24111:134:0;24293:9;24264:39;;;;:28;:39;;;;;24306:15;24264:57;;24072:269;23906:1494;;;24425:16;;24470:10;;24508:9;;24542:14;;24425:16;;-1:-1:-1;24470:10:0;;-1:-1:-1;24508:9:0;-1:-1:-1;24542:14:0;;24538:598;;;24600:11;;:15;;24614:1;24600:15;:::i;:::-;24585:12;:30;24577:60;;;;-1:-1:-1;;;24577:60:0;;16385:2:1;24577:60:0;;;16367:21:1;16424:2;16404:18;;;16397:30;-1:-1:-1;;;16443:18:1;;;16436:48;16501:18;;24577:60:0;16183:342:1;24577:60:0;24679:13;;24664:11;:28;;24656:64;;;;-1:-1:-1;;;24656:64:0;;16732:2:1;24656:64:0;;;16714:21:1;16771:2;16751:18;;;16744:30;16810:26;16790:18;;;16783:54;16854:18;;24656:64:0;16530:348:1;24656:64:0;24772:9;24747:35;;;;:24;:35;;;;;;24786:12;24747:51;;24739:83;;;;-1:-1:-1;;;24739:83:0;;17085:2:1;24739:83:0;;;17067:21:1;17124:2;17104:18;;;17097:30;-1:-1:-1;;;17143:18:1;;;17136:50;17203:18;;24739:83:0;16883:344:1;24739:83:0;24910:13;;24897:9;24868:39;;;;:28;:39;;;;;;:55;;24910:13;24868:55;:::i;:::-;24849:15;:74;;24841:134;;;;-1:-1:-1;;;24841:134:0;;16034:2:1;24841:134:0;;;16016:21:1;16073:2;16053:18;;;16046:30;-1:-1:-1;;;16092:18:1;;;16085:52;16154:18;;24841:134:0;15832:346:1;24841:134:0;25019:9;24994:35;;;;:24;:35;;;;;;;;25032:12;24994:50;;25063:28;:39;;;;;25105:15;25063:57;;24538:598;25156:16;;;;25152:233;;;-1:-1:-1;;;;;3783:18:0;;25189:32;3783:18;;;;;;;;;;;25297:9;;25260:33;25287:6;3783:18;25260:33;:::i;:::-;:46;;25252:117;;;;-1:-1:-1;;;25252:117:0;;17434:2:1;25252:117:0;;;17416:21:1;17473:2;17453:18;;;17446:30;17512:34;17492:18;;;17485:62;-1:-1:-1;;;17563:18:1;;;17556:34;17607:19;;25252:117:0;17232:400:1;25252:117:0;25174:211;25152:233;25416:17;25436:25;:13;25454:6;25436:17;:25::i;:::-;25527:4;25478:28;3783:18;;;;;;;;;;;25589;;25416:45;;-1:-1:-1;3783:18:0;25565:42;;;;;;;25628:43;;-1:-1:-1;;;;;;25640:31:0;;;;;;:25;:31;;;;;;;;25639:32;25628:43;25624:325;;;25692:8;:15;;-1:-1:-1;;;;25692:15:0;-1:-1:-1;;;25692:15:0;;;25763:18;;25800:33;25763:18;25800:20;:33::i;:::-;-1:-1:-1;25864:1:0;25852:9;:13;;;25884:10;:14;25917:8;:16;;-1:-1:-1;;;;25917:16:0;;;25624:325;25965:12;25980:30;26006:3;25980:21;:6;25991:9;25980:10;:21::i;:30::-;25965:45;-1:-1:-1;26025:18:0;26046:28;26070:3;26046:19;:6;26057:7;26046:10;:19::i;:28::-;26025:49;-1:-1:-1;26100:29:0;26111:17;26025:49;26111:4;:17;:::i;:::-;26100:6;;:10;:29::i;:::-;26091:38;;26150:9;26146:155;;;26193:10;;:20;;26208:4;26193:14;:20::i;:::-;26180:10;:33;26146:155;;;26266:9;;:19;;26280:4;26266:13;:19::i;:::-;26254:9;:31;26146:155;26317:42;26333:4;26347;26354;26317:15;:42::i;:::-;26380:14;;26376:156;;26437:4;;26415:39;;26431:4;;-1:-1:-1;;;;;26437:4:0;26443:10;26415:15;:39::i;:::-;26488:12;;:28;;26505:10;26488:16;:28::i;:::-;26473:12;:43;26376:156;23830:2726;;;;;;23733:2823;26568:33;26584:4;26590:2;26594:6;26568:15;:33::i;810:190::-;896:7;932:12;924:6;;;;916:29;;;;-1:-1:-1;;;916:29:0;;;;;;;;:::i;:::-;-1:-1:-1;956:9:0;968:5;972:1;968;:5;:::i;:::-;956:17;810:190;-1:-1:-1;;;;;810:190:0:o;21771:188::-;-1:-1:-1;;;;;21854:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21854:39:0;;;;;;;;;;21911:40;;21854:39;;:31;21911:40;;;21771:188;;:::o;1404:189::-;1490:7;1525:12;1518:5;1510:28;;;;-1:-1:-1;;;1510:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1549:9:0;1561:5;1565:1;1561;:5;:::i;27115:499::-;27205:16;;;27219:1;27205:16;;;;;;;;27181:21;;27205:16;;;;;;;;;;-1:-1:-1;27205:16:0;27181:40;;27250:4;27232;27237:1;27232:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27232:23:0;;;:7;;;;;;;;;;:23;;;;27276:15;;:22;;;-1:-1:-1;;;27276:22:0;;;;:15;;;;;:20;;:22;;;;;27232:7;;27276:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27266:4;27271:1;27266:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27266:32:0;;;:7;;;;;;;;;:32;27341:15;;27309:62;;27326:4;;27341:15;27359:11;27309:8;:62::i;:::-;27382:15;;:224;;-1:-1:-1;;;27382:224:0;;-1:-1:-1;;;;;27382:15:0;;;;:66;;:224;;27463:11;;27382:15;;27533:4;;27560;;27580:15;;27382:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;222:180:1;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:597::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;845:6;842:1;839:13;836:91;;;915:1;910:2;901:6;890:9;886:22;882:31;875:42;836:91;-1:-1:-1;988:2:1;967:15;-1:-1:-1;;963:29:1;948:45;;;;995:2;944:54;;407:597;-1:-1:-1;;;407:597:1:o;1009:131::-;-1:-1:-1;;;;;1084:31:1;;1074:42;;1064:70;;1130:1;1127;1120:12;1145:160;1210:20;;1266:13;;1259:21;1249:32;;1239:60;;1295:1;1292;1285:12;1239:60;1145:160;;;:::o;1310:315::-;1375:6;1383;1436:2;1424:9;1415:7;1411:23;1407:32;1404:52;;;1452:1;1449;1442:12;1404:52;1491:9;1478:23;1510:31;1535:5;1510:31;:::i;:::-;1560:5;-1:-1:-1;1584:35:1;1615:2;1600:18;;1584:35;:::i;:::-;1574:45;;1310:315;;;;;:::o;1630:::-;1698:6;1706;1759:2;1747:9;1738:7;1734:23;1730:32;1727:52;;;1775:1;1772;1765:12;1727:52;1814:9;1801:23;1833:31;1858:5;1833:31;:::i;:::-;1883:5;1935:2;1920:18;;;;1907:32;;-1:-1:-1;;;1630:315:1:o;2559:247::-;2618:6;2671:2;2659:9;2650:7;2646:23;2642:32;2639:52;;;2687:1;2684;2677:12;2639:52;2726:9;2713:23;2745:31;2770:5;2745:31;:::i;2811:127::-;2872:10;2867:3;2863:20;2860:1;2853:31;2903:4;2900:1;2893:15;2927:4;2924:1;2917:15;2943:275;3014:2;3008:9;3079:2;3060:13;;-1:-1:-1;;3056:27:1;3044:40;;3114:18;3099:34;;3135:22;;;3096:62;3093:88;;;3161:18;;:::i;:::-;3197:2;3190:22;2943:275;;-1:-1:-1;2943:275:1:o;3223:183::-;3283:4;3316:18;3308:6;3305:30;3302:56;;;3338:18;;:::i;:::-;-1:-1:-1;3383:1:1;3379:14;3395:4;3375:25;;3223:183::o;3411:662::-;3465:5;3518:3;3511:4;3503:6;3499:17;3495:27;3485:55;;3536:1;3533;3526:12;3485:55;3572:6;3559:20;3598:4;3622:60;3638:43;3678:2;3638:43;:::i;:::-;3622:60;:::i;:::-;3716:15;;;3802:1;3798:10;;;;3786:23;;3782:32;;;3747:12;;;;3826:15;;;3823:35;;;3854:1;3851;3844:12;3823:35;3890:2;3882:6;3878:15;3902:142;3918:6;3913:3;3910:15;3902:142;;;3984:17;;3972:30;;4022:12;;;;3935;;3902:142;;;-1:-1:-1;4062:5:1;3411:662;-1:-1:-1;;;;;;3411:662:1:o;4078:1215::-;4196:6;4204;4257:2;4245:9;4236:7;4232:23;4228:32;4225:52;;;4273:1;4270;4263:12;4225:52;4313:9;4300:23;4342:18;4383:2;4375:6;4372:14;4369:34;;;4399:1;4396;4389:12;4369:34;4437:6;4426:9;4422:22;4412:32;;4482:7;4475:4;4471:2;4467:13;4463:27;4453:55;;4504:1;4501;4494:12;4453:55;4540:2;4527:16;4562:4;4586:60;4602:43;4642:2;4602:43;:::i;4586:60::-;4680:15;;;4762:1;4758:10;;;;4750:19;;4746:28;;;4711:12;;;;4786:19;;;4783:39;;;4818:1;4815;4808:12;4783:39;4842:11;;;;4862:217;4878:6;4873:3;4870:15;4862:217;;;4958:3;4945:17;4975:31;5000:5;4975:31;:::i;:::-;5019:18;;4895:12;;;;5057;;;;4862:217;;;5098:5;-1:-1:-1;;5141:18:1;;5128:32;;-1:-1:-1;;5172:16:1;;;5169:36;;;5201:1;5198;5191:12;5169:36;;5224:63;5279:7;5268:8;5257:9;5253:24;5224:63;:::i;:::-;5214:73;;;4078:1215;;;;;:::o;5298:456::-;5375:6;5383;5391;5444:2;5432:9;5423:7;5419:23;5415:32;5412:52;;;5460:1;5457;5450:12;5412:52;5499:9;5486:23;5518:31;5543:5;5518:31;:::i;:::-;5568:5;-1:-1:-1;5625:2:1;5610:18;;5597:32;5638:33;5597:32;5638:33;:::i;:::-;5298:456;;5690:7;;-1:-1:-1;;;5744:2:1;5729:18;;;;5716:32;;5298:456::o;5948:180::-;6004:6;6057:2;6045:9;6036:7;6032:23;6028:32;6025:52;;;6073:1;6070;6063:12;6025:52;6096:26;6112:9;6096:26;:::i;6357:523::-;6461:6;6469;6477;6485;6493;6501;6554:3;6542:9;6533:7;6529:23;6525:33;6522:53;;;6571:1;6568;6561:12;6522:53;-1:-1:-1;;6594:23:1;;;6664:2;6649:18;;6636:32;;-1:-1:-1;6715:2:1;6700:18;;6687:32;;6766:2;6751:18;;6738:32;;-1:-1:-1;6817:3:1;6802:19;;6789:33;;-1:-1:-1;6869:3:1;6854:19;6841:33;;-1:-1:-1;6357:523:1;-1:-1:-1;6357:523:1:o;6885:388::-;6953:6;6961;7014:2;7002:9;6993:7;6989:23;6985:32;6982:52;;;7030:1;7027;7020:12;6982:52;7069:9;7056:23;7088:31;7113:5;7088:31;:::i;:::-;7138:5;-1:-1:-1;7195:2:1;7180:18;;7167:32;7208:33;7167:32;7208:33;:::i;:::-;7260:7;7250:17;;;6885:388;;;;;:::o;7278:356::-;7480:2;7462:21;;;7499:18;;;7492:30;7558:34;7553:2;7538:18;;7531:62;7625:2;7610:18;;7278:356::o;7639:127::-;7700:10;7695:3;7691:20;7688:1;7681:31;7731:4;7728:1;7721:15;7755:4;7752:1;7745:15;7771:168;7811:7;7877:1;7873;7869:6;7865:14;7862:1;7859:21;7854:1;7847:9;7840:17;7836:45;7833:71;;;7884:18;;:::i;:::-;-1:-1:-1;7924:9:1;;7771:168::o;7944:380::-;8023:1;8019:12;;;;8066;;;8087:61;;8141:4;8133:6;8129:17;8119:27;;8087:61;8194:2;8186:6;8183:14;8163:18;8160:38;8157:161;;8240:10;8235:3;8231:20;8228:1;8221:31;8275:4;8272:1;8265:15;8303:4;8300:1;8293:15;8157:161;;7944:380;;;:::o;9091:127::-;9152:10;9147:3;9143:20;9140:1;9133:31;9183:4;9180:1;9173:15;9207:4;9204:1;9197:15;9223:135;9262:3;9283:17;;;9280:43;;9303:18;;:::i;:::-;-1:-1:-1;9350:1:1;9339:13;;9223:135::o;11046:217::-;11086:1;11112;11102:132;;11156:10;11151:3;11147:20;11144:1;11137:31;11191:4;11188:1;11181:15;11219:4;11216:1;11209:15;11102:132;-1:-1:-1;11248:9:1;;11046:217::o;11677:128::-;11717:3;11748:1;11744:6;11741:1;11738:13;11735:39;;;11754:18;;:::i;:::-;-1:-1:-1;11790:9:1;;11677:128::o;17637:125::-;17677:4;17705:1;17702;17699:8;17696:34;;;17710:18;;:::i;:::-;-1:-1:-1;17747:9:1;;17637:125::o;17767:251::-;17837:6;17890:2;17878:9;17869:7;17865:23;17861:32;17858:52;;;17906:1;17903;17896:12;17858:52;17938:9;17932:16;17957:31;17982:5;17957:31;:::i;18023:980::-;18285:4;18333:3;18322:9;18318:19;18364:6;18353:9;18346:25;18390:2;18428:6;18423:2;18412:9;18408:18;18401:34;18471:3;18466:2;18455:9;18451:18;18444:31;18495:6;18530;18524:13;18561:6;18553;18546:22;18599:3;18588:9;18584:19;18577:26;;18638:2;18630:6;18626:15;18612:29;;18659:1;18669:195;18683:6;18680:1;18677:13;18669:195;;;18748:13;;-1:-1:-1;;;;;18744:39:1;18732:52;;18839:15;;;;18804:12;;;;18780:1;18698:9;18669:195;;;-1:-1:-1;;;;;;;18920:32:1;;;;18915:2;18900:18;;18893:60;-1:-1:-1;;;18984:3:1;18969:19;18962:35;18881:3;18023:980;-1:-1:-1;;;18023:980:1:o

Swarm Source

ipfs://89e0b5e719eafedf4b4b85bdee61633f65e514a136eb434bde978f31755a3251
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.