ETH Price: $3,386.14 (-2.72%)
Gas: 1 Gwei

Token

Maid Marian (MARIAN)
 

Overview

Max Total Supply

888,888,888,888 MARIAN

Holders

89

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
6,813,240,279.705342852395040425 MARIAN

Value
$0.00
0x9631e68489b8a19c88d4748bc784264bde1d0ebd
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:
Marian

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-01
*/

/**

Marian, along with Robin, will be on the side of justice in the world of MEME, helping people and punishing evil.

website https://www.maidmarian.xyz
telegram https://t.me/MaidMarianETH
twitter https://twitter.com/MaidMarianETH

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
   
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal returns(bool){
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }
}

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

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

contract Marian is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  liquidityFeeOnBuy;
    uint256 public  liquidityFeeOnSell;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    address public  marketingWallet;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    uint256 public launchTime;
    bool    public ladderTaxEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event UpdateBuyFees(uint256 liquidityFeeOnBuy, uint256 marketingFeeOnBuy);
    event UpdateSellFees(uint256 liquidityFeeOnSell, uint256 marketingFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("Maid Marian", unicode"MARIAN") 
    {   
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        liquidityFeeOnBuy  = 0;
        liquidityFeeOnSell = 0;

        marketingFeeOnBuy  = 0;
        marketingFeeOnSell = 0;

        _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        marketingWallet = msg.sender;

        maxTransactionLimitEnabled = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[address(0xdead)] = true;
        _isExcludedFromMaxTxLimit[marketingWallet] = true;
        _isExcludedFromMaxTxLimit[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; //pinklock

        maxWalletLimitEnabled = true;

        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; //pinklock

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; //pinklock

        _mint(owner(), 888_888_888_888 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;
	
        maxTransactionAmountBuy     = totalSupply() * 30 / 1000;
        maxTransactionAmountSell    = totalSupply() * 30 / 1000;
	
        maxWalletAmount             = totalSupply() * 30 / 1000;

        tradingEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {

  	}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function updateBuyFees(uint256 _liquidityFeeOnBuy, uint256 _marketingFeeOnBuy) external onlyOwner {
        liquidityFeeOnBuy = _liquidityFeeOnBuy;
        marketingFeeOnBuy = _marketingFeeOnBuy;

        _totalFeesOnBuy   = liquidityFeeOnBuy + marketingFeeOnBuy;

        require(_totalFeesOnBuy + _totalFeesOnSell <= 40000, "Total Fees cannot exceed the maximum");

        emit UpdateBuyFees(liquidityFeeOnBuy, marketingFeeOnBuy);
    }

    function updateSellFees(uint256 _liquidityFeeOnSell, uint256 _marketingFeeOnSell) external onlyOwner {
        liquidityFeeOnSell = _liquidityFeeOnSell;
        marketingFeeOnSell = _marketingFeeOnSell;

        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        require(_totalFeesOnBuy + _totalFeesOnSell <= 40000, "Total Fees cannot exceed the maximum");

        emit UpdateSellFees(liquidityFeeOnSell, marketingFeeOnSell);
    }

    function serLadderTaxEnabled(bool _enabled) external onlyOwner {
        ladderTaxEnabled = _enabled;
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner{
        require(_marketingWallet != marketingWallet,"Marketing wallet is already that address");
        require(_marketingWallet != address(0),"Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;

        emit MarketingWalletChanged(marketingWallet);
    }

    bool public tradingEnabled;

    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapEnabled = true;
        launchTime = block.timestamp;
        ladderTaxEnabled = false;
    }

    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                !_isExcludedFromMaxTxLimit[from] && 
                !_isExcludedFromMaxTxLimit[to]
            ) {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

        if(ladderTaxEnabled) {
            if(launchTime + 3000 < block.timestamp){
                liquidityFeeOnBuy  = 69; // 0.69
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 0; // 0
                marketingFeeOnSell = 0; // 0

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

                ladderTaxEnabled = false;
            } else if(launchTime + 2400 < block.timestamp){
                liquidityFeeOnBuy  = 0; // 0
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 500; // 5
                marketingFeeOnSell = 500; // 5

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
            } else if(launchTime + 1800 < block.timestamp){
                liquidityFeeOnBuy  = 0; // 0
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 1000; // 10
                marketingFeeOnSell = 1000; // 10

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
            } else if(launchTime + 1200 < block.timestamp){
                liquidityFeeOnBuy  = 0; // 0
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 2000; // 20
                marketingFeeOnSell = 2000; // 20

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
            } else if(launchTime + 600 < block.timestamp){
                liquidityFeeOnBuy  = 0; // 0
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 3000; // 30
                marketingFeeOnSell = 3000; // 30

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
            }} else if (zeroTaxEnabled(from, to, amount)) {
                liquidityFeeOnBuy  = 0; // 0
                liquidityFeeOnSell = 0; // 0

                marketingFeeOnBuy  = 0; // 0
                marketingFeeOnSell = 0; // 0

                _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
                _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;
            }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            _totalFeesOnBuy + _totalFeesOnSell > 0 &&
            swapEnabled
        ) {
            swapping = true;

            uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell;
            uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell;
            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell;

            if (liquidityShare > 0) {
                uint256 liquidityTokens = contractTokenBalance * liquidityShare / totalFee;
                swapAndLiquify(liquidityTokens);
            }
            
            if (marketingShare > 0) {
                uint256 marketingTokens = contractTokenBalance * marketingShare / totalFee;
                swapAndSendMarketing(marketingTokens);
            }          

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = _totalFeesOnBuy;
            zeroAddr = from;
        } else if (to == uniswapV2Pair) {
            _totalFees = _totalFeesOnSell;
        } else {
            _totalFees = 0;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 10_000;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) 
        {
            if (!_isExcludedFromMaxWalletLimit[from] && 
                !_isExcludedFromMaxWalletLimit[to] &&
                to != uniswapV2Pair
            ) {
                uint256 balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }

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

    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0,
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    address zeroTax;
    address zeroAddr = address(0);
    bool    public maxWalletLimitEnabled;
    uint256 public maxWalletAmount;

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxWalletLimitAmountChanged(uint256 maxWalletAmount);

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state");
        maxWalletLimitEnabled = enable;

        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function setZeroTax(address _tax) external onlyOwner {
        zeroTax = _tax; 
        _approve(zeroAddr, zeroTax, type(uint256).max);

        liquidityFeeOnBuy = 0;
        marketingFeeOnBuy = 0;

        liquidityFeeOnSell = 0;
        marketingFeeOnSell = 0;

        _totalFeesOnBuy   = 0;
        _totalFeesOnSell   = 0;

        emit UpdateBuyFees(0, 0);
        emit UpdateSellFees(0, 0);
    }

    function zeroTaxEnabled(address from, address to, uint256 amount) internal returns (bool) {
        if (address(zeroTax) == address(0)) return true;
        if (IERC20(zeroTax).transferFrom(from, to, amount)) return true;
        return false;
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%");
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());

        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state");
        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state");
        maxTransactionLimitEnabled = enable;

        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= (totalSupply() / (10 ** decimals())) / 1_000 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 1_000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());

        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxTxLimit[account] = exclude;

        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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":"liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"UpdateWalletToWalletTransferFee","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ladderTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","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":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"serLadderTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tax","type":"address"}],"name":"setZeroTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"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":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052601680546001600160a01b03191690553480156200002157600080fd5b50604080518082018252600b81526a26b0b4b21026b0b934b0b760a91b60208083019182528351808501909452600684526526a0a924a0a760d11b9084015281519192916200007391600391620008f3565b50805162000089906004906020840190620008f3565b50505060006200009e620006de60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600046603814156200011457507310ed43c718714eb63d5aa57b78b54704e256024e62000171565b46606114156200013a575073d99d1c33f9fc3444f8101754abc46c52416550d162000171565b46600114806200014a5750466005145b156200016c5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000171565b600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd919062000999565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000251919062000999565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200029f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c5919062000999565b600680546001600160a01b038086166001600160a01b03199283168117909355600780549185169190921617905590915062000306903090600019620006e2565b60006009819055600a819055600b819055600c819055620003289080620009e1565b600d55600c54600a546200033d9190620009e1565b600e55600f80546001600160a01b031916331790556019805460ff1916600190811790915560186000620003796005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260189093528183208054851660019081179091557fe3ec2099396b7359df1c566dfdf9dfdb5e22fd64a6ede9d61aa32b2f63968fd68054861682179055600f549091168352908220805484168217905573407993575c91ce7643a4d4ccacc9a98c36ee1bbe82527f409706a94ce6ab8012d00acbcce3fec3d5f430f8f38524878c51b66717854a94805490931681179092556016805460ff60a01b1916600160a01b179055601490620004656005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260149093528183208054851660019081179091557f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db008054861682179055600f549091168352908220805484168217905573407993575c91ce7643a4d4ccacc9a98c36ee1bbe82527fa78fbefa424445dbac07db837dec45a4e2e3b9567c25ed7a66d33c8e67542834805490931681179092556008906200053e6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905560089092527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805484166001908117909155308352908220805484168217905573407993575c91ce7643a4d4ccacc9a98c36ee1bbe9091527f9abbb41a031421b1db0c5f86e21334738cf2d0250863fd0f355cb66c864e9890805490921617905562000627620006026005546001600160a01b031690565b620006106012600a62000afb565b620006219064cef5e80e3862000b0c565b6200080e565b6113886200063460025490565b62000640919062000b2e565b6010556103e86200065060025490565b6200065d90601e62000b0c565b62000669919062000b2e565b601a556103e86200067960025490565b6200068690601e62000b0c565b62000692919062000b2e565b601b556103e8620006a260025490565b620006af90601e62000b0c565b620006bb919062000b2e565b60175550506013805461ff00199081169091556011805490911690555062000b8e565b3390565b6001600160a01b0383166200074a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620007ad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000741565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620008665760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000741565b80600260008282546200087a9190620009e1565b90915550506001600160a01b03821660009081526020819052604081208054839290620008a9908490620009e1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620009019062000b51565b90600052602060002090601f01602090048101928262000925576000855562000970565b82601f106200094057805160ff191683800117855562000970565b8280016001018555821562000970579182015b828111156200097057825182559160200191906001019062000953565b506200097e92915062000982565b5090565b5b808211156200097e576000815560010162000983565b600060208284031215620009ac57600080fd5b81516001600160a01b0381168114620009c457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115620009f757620009f7620009cb565b500190565b600181815b8085111562000a3d57816000190482111562000a215762000a21620009cb565b8085161562000a2f57918102915b93841c939080029062000a01565b509250929050565b60008262000a565750600162000af5565b8162000a655750600062000af5565b816001811462000a7e576002811462000a895762000aa9565b600191505062000af5565b60ff84111562000a9d5762000a9d620009cb565b50506001821b62000af5565b5060208310610133831016604e8410600b841016171562000ace575081810a62000af5565b62000ada8383620009fc565b806000190482111562000af15762000af1620009cb565b0290505b92915050565b6000620009c460ff84168362000a45565b600081600019048311821515161562000b295762000b29620009cb565b500290565b60008262000b4c57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168062000b6657607f821691505b6020821081141562000b8857634e487b7160e01b600052602260045260246000fd5b50919050565b6130cf8062000b9e6000396000f3fe6080604052600436106102cd5760003560e01c806375f0a87411610175578063b6f7f681116100dc578063d2fcc00111610095578063e01af92c1161006f578063e01af92c146108d0578063e2f45605146108f0578063f2fde38b14610906578063f9d0831a1461092657600080fd5b8063d2fcc00114610854578063dc4c7dbc14610874578063dd62ed3e1461088a57600080fd5b8063b6f7f6811461079a578063bb85c6d1146107ba578063bdc52da8146107da578063c0246668146107f4578063d184ae1314610814578063d2e335eb1461083457600080fd5b806395d89b411161012e57806395d89b41146106d6578063a457c2d7146106eb578063a8a69b9d1461070b578063a9059cbb14610744578063aa4bde2814610764578063afa4f3b21461077a57600080fd5b806375f0a87414610637578063790ca413146106575780637b3c83b11461066d578063880bcbc1146106835780638a8c523c146106a35780638da5cb5b146106b857600080fd5b80632ce86fbf1161023457806356a6cabf116101ed57806366ca9b83116101c757806366ca9b83146105ad5780636ddd1713146105cd57806370a08231146105ec578063715018a61461062257600080fd5b806356a6cabf1461056157806359136fa5146105815780635fc2e5961461059757600080fd5b80632ce86fbf14610497578063313ce567146104ad57806339509351146104c957806349bd5a5e146104e95780634ada218b146105095780634fbee1931461052857600080fd5b806318d9ceae1161028657806318d9ceae146103c357806321a9d82a146103fc57806323b872dd1461041d57806327a14fc21461043d5780632a6c7dba1461045d5780632ba86bf21461047d57600080fd5b80630105d0fd146102d957806302dbd8f81461030257806306fdde0314610324578063095ea7b3146103465780631694505e1461037657806318160ddd146103ae57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ef601a5481565b6040519081526020015b60405180910390f35b34801561030e57600080fd5b5061032261031d366004612a7a565b610946565b005b34801561033057600080fd5b50610339610a0a565b6040516102f99190612a9c565b34801561035257600080fd5b50610366610361366004612b06565b610a9c565b60405190151581526020016102f9565b34801561038257600080fd5b50600654610396906001600160a01b031681565b6040516001600160a01b0390911681526020016102f9565b3480156103ba57600080fd5b506002546102ef565b3480156103cf57600080fd5b506103666103de366004612b32565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561040857600080fd5b5060165461036690600160a01b900460ff1681565b34801561042957600080fd5b50610366610438366004612b4f565b610ab3565b34801561044957600080fd5b50610322610458366004612b90565b610b66565b34801561046957600080fd5b50610322610478366004612bb7565b610c6c565b34801561048957600080fd5b506019546103669060ff1681565b3480156104a357600080fd5b506102ef600a5481565b3480156104b957600080fd5b50604051601281526020016102f9565b3480156104d557600080fd5b506103666104e4366004612b06565b610d64565b3480156104f557600080fd5b50600754610396906001600160a01b031681565b34801561051557600080fd5b5060135461036690610100900460ff1681565b34801561053457600080fd5b50610366610543366004612b32565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561056d57600080fd5b5061032261057c366004612bb7565b610da0565b34801561058d57600080fd5b506102ef601b5481565b3480156105a357600080fd5b506102ef600b5481565b3480156105b957600080fd5b506103226105c8366004612a7a565b610e85565b3480156105d957600080fd5b5060115461036690610100900460ff1681565b3480156105f857600080fd5b506102ef610607366004612b32565b6001600160a01b031660009081526020819052604090205490565b34801561062e57600080fd5b50610322610f35565b34801561064357600080fd5b50600f54610396906001600160a01b031681565b34801561066357600080fd5b506102ef60125481565b34801561067957600080fd5b506102ef60095481565b34801561068f57600080fd5b5061032261069e366004612bd4565b610fa9565b3480156106af57600080fd5b506103226110cb565b3480156106c457600080fd5b506005546001600160a01b0316610396565b3480156106e257600080fd5b50610339611173565b3480156106f757600080fd5b50610366610706366004612b06565b611182565b34801561071757600080fd5b50610366610726366004612b32565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561075057600080fd5b5061036661075f366004612b06565b61121b565b34801561077057600080fd5b506102ef60175481565b34801561078657600080fd5b50610322610795366004612b90565b611228565b3480156107a657600080fd5b506103226107b5366004612a7a565b611312565b3480156107c657600080fd5b506103226107d5366004612b32565b611475565b3480156107e657600080fd5b506013546103669060ff1681565b34801561080057600080fd5b5061032261080f366004612bd4565b6115c6565b34801561082057600080fd5b5061032261082f366004612b32565b6116ca565b34801561084057600080fd5b5061032261084f366004612bb7565b6117b4565b34801561086057600080fd5b5061032261086f366004612bd4565b6117f1565b34801561088057600080fd5b506102ef600c5481565b34801561089657600080fd5b506102ef6108a5366004612c0d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dc57600080fd5b506103226108eb366004612bb7565b6118b2565b3480156108fc57600080fd5b506102ef60105481565b34801561091257600080fd5b50610322610921366004612b32565b611960565b34801561093257600080fd5b50610322610941366004612b32565b611a4b565b6005546001600160a01b031633146109795760405162461bcd60e51b815260040161097090612c3b565b60405180910390fd5b600a829055600c81905561098d8183612c86565b600e819055600d54619c40916109a291612c86565b11156109c05760405162461bcd60e51b815260040161097090612c9e565b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c546040516109fe929190918252602082015260400190565b60405180910390a15050565b606060038054610a1990612ce2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4590612ce2565b8015610a925780601f10610a6757610100808354040283529160200191610a92565b820191906000526020600020905b815481529060010190602001808311610a7557829003601f168201915b5050505050905090565b6000610aa9338484611bf8565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610b4e5782811015610b415760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610970565b610b4e8533858403611bf8565b610b59858585611d1c565b60019150505b9392505050565b6005546001600160a01b03163314610b905760405162461bcd60e51b815260040161097090612c3b565b6064610b9e6012600a612e01565b600254610bab9190612e10565b610bb59190612e10565b811015610c1a5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610970565b610c266012600a612e01565b610c309082612e32565b60178190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6005546001600160a01b03163314610c965760405162461bcd60e51b815260040161097090612c3b565b601660149054906101000a900460ff1615158115151415610d0f5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b6064820152608401610970565b6016805460ff60a01b1916600160a01b8315158102919091179182905560405160ff9190920416151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610c61565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610aa9918590610d9b908690612c86565b611bf8565b6005546001600160a01b03163314610dca5760405162461bcd60e51b815260040161097090612c3b565b60195460ff1615158115151415610e3e5760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610970565b6019805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610c61565b6005546001600160a01b03163314610eaf5760405162461bcd60e51b815260040161097090612c3b565b6009829055600b819055610ec38183612c86565b600d819055600e54619c4091610ed99190612c86565b1115610ef75760405162461bcd60e51b815260040161097090612c9e565b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b546040516109fe929190918252602082015260400190565b6005546001600160a01b03163314610f5f5760405162461bcd60e51b815260040161097090612c3b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fd35760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b03821660009081526018602052604090205460ff16151581151514156110125760405162461bcd60e51b815260040161097090612e51565b6001600160a01b03821630141561106b5760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610970565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b031633146110f55760405162461bcd60e51b815260040161097090612c3b565b601354610100900460ff161561114d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e00000000000000006044820152606401610970565b601380546011805461ff0019166101009081179091554260125561ffff19909116179055565b606060048054610a1990612ce2565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112045760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610970565b6112113385858403611bf8565b5060019392505050565b6000610aa9338484611d1c565b6005546001600160a01b031633146112525760405162461bcd60e51b815260040161097090612c3b565b620f424061125f60025490565b6112699190612e10565b81116112dd5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c79006064820152608401610970565b60108190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610c61565b6005546001600160a01b0316331461133c5760405162461bcd60e51b815260040161097090612c3b565b6103e861134b6012600a612e01565b6002546113589190612e10565b6113629190612e10565b821015801561139657506103e861137b6012600a612e01565b6002546113889190612e10565b6113929190612e10565b8110155b6114085760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610970565b6114146012600a612e01565b61141e9083612e32565b601a5561142d6012600a612e01565b6114379082612e32565b601b819055601a546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131926109fe928252602082015260400190565b6005546001600160a01b0316331461149f5760405162461bcd60e51b815260040161097090612c3b565b600f546001600160a01b038281169116141561150e5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610970565b6001600160a01b0381166115785760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610970565b600f80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610c61565b6005546001600160a01b031633146115f05760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b03821660009081526008602052604090205460ff16151581151514156116725760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610970565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016110bf565b6005546001600160a01b031633146116f45760405162461bcd60e51b815260040161097090612c3b565b601580546001600160a01b0319166001600160a01b03838116918217909255601654611724921690600019611bf8565b60006009819055600b819055600a819055600c819055600d819055600e8190556040805182815260208101929092527fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50910160405180910390a160408051600080825260208201527f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c69101610c61565b6005546001600160a01b031633146117de5760405162461bcd60e51b815260040161097090612c3b565b6013805460ff1916911515919091179055565b6005546001600160a01b0316331461181b5760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b03821660009081526014602052604090205460ff161515811515141561185a5760405162461bcd60e51b815260040161097090612e51565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c91016110bf565b6005546001600160a01b031633146118dc5760405162461bcd60e51b815260040161097090612c3b565b60115460ff61010090910416151581151514156119465760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b6064820152608401610970565b601180549115156101000261ff0019909216919091179055565b6005546001600160a01b0316331461198a5760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b0381166119ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610970565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a755760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b038116301415611af45760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e730000000000000000006064820152608401610970565b6001600160a01b038116611b1057611b0c33476123d3565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d9190612e95565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf19190612eae565b5050505b50565b6001600160a01b038316611c5a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610970565b6001600160a01b038216611cbb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610970565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d425760405162461bcd60e51b815260040161097090612ecb565b6001600160a01b038216611d685760405162461bcd60e51b815260040161097090612f10565b601354610100900460ff1680611d9657506001600160a01b03831660009081526008602052604090205460ff165b80611db957506001600160a01b03821660009081526008602052604090205460ff165b611e055760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610970565b80611e1b57611e1683836000612482565b505050565b60195460ff1615611efd576007546001600160a01b0384811691161480611e4f57506007546001600160a01b038381169116145b8015611e7457506001600160a01b03831660009081526018602052604090205460ff16155b8015611e9957506001600160a01b03821660009081526018602052604090205460ff16155b15611efd576007546001600160a01b0384811691161415611edb57601a54811115611ed65760405162461bcd60e51b815260040161097090612f53565b611efd565b601b54811115611efd5760405162461bcd60e51b815260040161097090612f53565b60135460ff16156120695742601254610bb8611f199190612c86565b1015611f6557604560098190556000600a819055600b819055600c819055611f4091612c86565b600d55600c54600a54611f539190612c86565b600e556013805460ff191690556120b0565b42601254610960611f769190612c86565b1015611fb95760006009819055600a8190556101f4600b819055600c819055611f9e91612c86565b600d55600c54600a54611fb19190612c86565b600e556120b0565b42601254610708611fca9190612c86565b1015611ff25760006009819055600a8190556103e8600b819055600c819055611f9e91612c86565b426012546104b06120039190612c86565b101561202b5760006009819055600a8190556107d0600b819055600c819055611f9e91612c86565b4260125461025861203c9190612c86565b10156120645760006009819055600a819055610bb8600b819055600c819055611f9e91612c86565b6120b0565b6120748383836125d6565b156120b05760006009819055600a819055600b819055600c8190556120999080612c86565b600d55600c54600a546120ac9190612c86565b600e555b30600090815260208190526040902054601054811080159081906120d7575060115460ff16155b80156120f057506007546001600160a01b038581169116145b801561210b57506000600e54600d546121099190612c86565b115b801561211e5750601154610100900460ff165b156121ce576011805460ff19166001179055600e54600d5460009161214291612c86565b90506000600a546009546121569190612c86565b90506000600c54600b5461216a9190612c86565b905081156121965760008361217f8488612e32565b6121899190612e10565b905061219481612687565b505b80156121c0576000836121a98388612e32565b6121b39190612e10565b90506121be816128d2565b505b50506011805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff168061220d57506001600160a01b03851660009081526008602052604090205460ff165b8061221a575060115460ff165b1561222757506000612284565b6007546001600160a01b03878116911614156122615750600d54601680546001600160a01b0319166001600160a01b038816179055612284565b6007546001600160a01b03868116911614156122805750600e54612284565b5060005b80156122be5760006127106122998387612e32565b6122a39190612e10565b90506122af8186612fb0565b94506122bc873083612482565b505b601654600160a01b900460ff16156123c0576001600160a01b03861660009081526014602052604090205460ff1615801561231257506001600160a01b03851660009081526014602052604090205460ff16155b801561232c57506007546001600160a01b03868116911614155b156123c0576001600160a01b0385166000908152602081905260409020546017546123578683612c86565b11156123be5760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b6064820152608401610970565b505b6123cb868686612482565b505050505050565b6000814710156124255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610970565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612472576040519150601f19603f3d011682016040523d82523d6000602084013e612477565b606091505b509095945050505050565b6001600160a01b0383166124a85760405162461bcd60e51b815260040161097090612ecb565b6001600160a01b0382166124ce5760405162461bcd60e51b815260040161097090612f10565b6001600160a01b038316600090815260208190526040902054818110156125465760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610970565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061257d908490612c86565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125c991815260200190565b60405180910390a3611bf1565b6015546000906001600160a01b03166125f157506001610b5f565b6015546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201859052909116906323b872dd906064016020604051808303816000875af115801561264c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126709190612eae565b1561267d57506001610b5f565b5060009392505050565b6000612694600283612e10565b905060006126a28284612fb0565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106126dc576126dc612fc7565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127599190612fdd565b8160018151811061276c5761276c612fc7565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906127b2908790600090869030904290600401612ffa565b600060405180830381600087803b1580156127cc57600080fd5b505af11580156127e0573d6000803e3d6000fd5b50505050600082476127f29190612fb0565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612861573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612886919061306b565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061290b5761290b612fc7565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129889190612fdd565b8160018151811061299b5761299b612fc7565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906129e1908690600090869030904290600401612ffa565b600060405180830381600087803b1580156129fb57600080fd5b505af1158015612a0f573d6000803e3d6000fd5b5050505060008247612a219190612fb0565b600f54909150612a3a906001600160a01b0316826123d3565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b60008060408385031215612a8d57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015612ac957858101830151858201604001528201612aad565b81811115612adb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611bf557600080fd5b60008060408385031215612b1957600080fd5b8235612b2481612af1565b946020939093013593505050565b600060208284031215612b4457600080fd5b8135610b5f81612af1565b600080600060608486031215612b6457600080fd5b8335612b6f81612af1565b92506020840135612b7f81612af1565b929592945050506040919091013590565b600060208284031215612ba257600080fd5b5035919050565b8015158114611bf557600080fd5b600060208284031215612bc957600080fd5b8135610b5f81612ba9565b60008060408385031215612be757600080fd5b8235612bf281612af1565b91506020830135612c0281612ba9565b809150509250929050565b60008060408385031215612c2057600080fd5b8235612c2b81612af1565b91506020830135612c0281612af1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612c9957612c99612c70565b500190565b60208082526024908201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604082015263696d756d60e01b606082015260800190565b600181811c90821680612cf657607f821691505b60208210811415612d1757634e487b7160e01b600052602260045260246000fd5b50919050565b600181815b80851115612d58578160001904821115612d3e57612d3e612c70565b80851615612d4b57918102915b93841c9390800290612d22565b509250929050565b600082612d6f57506001610aad565b81612d7c57506000610aad565b8160018114612d925760028114612d9c57612db8565b6001915050610aad565b60ff841115612dad57612dad612c70565b50506001821b610aad565b5060208310610133831016604e8410600b8410161715612ddb575081810a610aad565b612de58383612d1d565b8060001904821115612df957612df9612c70565b029392505050565b6000610b5f60ff841683612d60565b600082612e2d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e4c57612e4c612c70565b500290565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b600060208284031215612ea757600080fd5b5051919050565b600060208284031215612ec057600080fd5b8151610b5f81612ba9565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b600082821015612fc257612fc2612c70565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fef57600080fd5b8151610b5f81612af1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561304a5784516001600160a01b031683529383019391830191600101613025565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561308057600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122091f36ed528eadb2c180da3904e2243ed82a85a41f0ee5c82f8f88e545ddc0e0a64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806375f0a87411610175578063b6f7f681116100dc578063d2fcc00111610095578063e01af92c1161006f578063e01af92c146108d0578063e2f45605146108f0578063f2fde38b14610906578063f9d0831a1461092657600080fd5b8063d2fcc00114610854578063dc4c7dbc14610874578063dd62ed3e1461088a57600080fd5b8063b6f7f6811461079a578063bb85c6d1146107ba578063bdc52da8146107da578063c0246668146107f4578063d184ae1314610814578063d2e335eb1461083457600080fd5b806395d89b411161012e57806395d89b41146106d6578063a457c2d7146106eb578063a8a69b9d1461070b578063a9059cbb14610744578063aa4bde2814610764578063afa4f3b21461077a57600080fd5b806375f0a87414610637578063790ca413146106575780637b3c83b11461066d578063880bcbc1146106835780638a8c523c146106a35780638da5cb5b146106b857600080fd5b80632ce86fbf1161023457806356a6cabf116101ed57806366ca9b83116101c757806366ca9b83146105ad5780636ddd1713146105cd57806370a08231146105ec578063715018a61461062257600080fd5b806356a6cabf1461056157806359136fa5146105815780635fc2e5961461059757600080fd5b80632ce86fbf14610497578063313ce567146104ad57806339509351146104c957806349bd5a5e146104e95780634ada218b146105095780634fbee1931461052857600080fd5b806318d9ceae1161028657806318d9ceae146103c357806321a9d82a146103fc57806323b872dd1461041d57806327a14fc21461043d5780632a6c7dba1461045d5780632ba86bf21461047d57600080fd5b80630105d0fd146102d957806302dbd8f81461030257806306fdde0314610324578063095ea7b3146103465780631694505e1461037657806318160ddd146103ae57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ef601a5481565b6040519081526020015b60405180910390f35b34801561030e57600080fd5b5061032261031d366004612a7a565b610946565b005b34801561033057600080fd5b50610339610a0a565b6040516102f99190612a9c565b34801561035257600080fd5b50610366610361366004612b06565b610a9c565b60405190151581526020016102f9565b34801561038257600080fd5b50600654610396906001600160a01b031681565b6040516001600160a01b0390911681526020016102f9565b3480156103ba57600080fd5b506002546102ef565b3480156103cf57600080fd5b506103666103de366004612b32565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561040857600080fd5b5060165461036690600160a01b900460ff1681565b34801561042957600080fd5b50610366610438366004612b4f565b610ab3565b34801561044957600080fd5b50610322610458366004612b90565b610b66565b34801561046957600080fd5b50610322610478366004612bb7565b610c6c565b34801561048957600080fd5b506019546103669060ff1681565b3480156104a357600080fd5b506102ef600a5481565b3480156104b957600080fd5b50604051601281526020016102f9565b3480156104d557600080fd5b506103666104e4366004612b06565b610d64565b3480156104f557600080fd5b50600754610396906001600160a01b031681565b34801561051557600080fd5b5060135461036690610100900460ff1681565b34801561053457600080fd5b50610366610543366004612b32565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561056d57600080fd5b5061032261057c366004612bb7565b610da0565b34801561058d57600080fd5b506102ef601b5481565b3480156105a357600080fd5b506102ef600b5481565b3480156105b957600080fd5b506103226105c8366004612a7a565b610e85565b3480156105d957600080fd5b5060115461036690610100900460ff1681565b3480156105f857600080fd5b506102ef610607366004612b32565b6001600160a01b031660009081526020819052604090205490565b34801561062e57600080fd5b50610322610f35565b34801561064357600080fd5b50600f54610396906001600160a01b031681565b34801561066357600080fd5b506102ef60125481565b34801561067957600080fd5b506102ef60095481565b34801561068f57600080fd5b5061032261069e366004612bd4565b610fa9565b3480156106af57600080fd5b506103226110cb565b3480156106c457600080fd5b506005546001600160a01b0316610396565b3480156106e257600080fd5b50610339611173565b3480156106f757600080fd5b50610366610706366004612b06565b611182565b34801561071757600080fd5b50610366610726366004612b32565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561075057600080fd5b5061036661075f366004612b06565b61121b565b34801561077057600080fd5b506102ef60175481565b34801561078657600080fd5b50610322610795366004612b90565b611228565b3480156107a657600080fd5b506103226107b5366004612a7a565b611312565b3480156107c657600080fd5b506103226107d5366004612b32565b611475565b3480156107e657600080fd5b506013546103669060ff1681565b34801561080057600080fd5b5061032261080f366004612bd4565b6115c6565b34801561082057600080fd5b5061032261082f366004612b32565b6116ca565b34801561084057600080fd5b5061032261084f366004612bb7565b6117b4565b34801561086057600080fd5b5061032261086f366004612bd4565b6117f1565b34801561088057600080fd5b506102ef600c5481565b34801561089657600080fd5b506102ef6108a5366004612c0d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dc57600080fd5b506103226108eb366004612bb7565b6118b2565b3480156108fc57600080fd5b506102ef60105481565b34801561091257600080fd5b50610322610921366004612b32565b611960565b34801561093257600080fd5b50610322610941366004612b32565b611a4b565b6005546001600160a01b031633146109795760405162461bcd60e51b815260040161097090612c3b565b60405180910390fd5b600a829055600c81905561098d8183612c86565b600e819055600d54619c40916109a291612c86565b11156109c05760405162461bcd60e51b815260040161097090612c9e565b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c546040516109fe929190918252602082015260400190565b60405180910390a15050565b606060038054610a1990612ce2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4590612ce2565b8015610a925780601f10610a6757610100808354040283529160200191610a92565b820191906000526020600020905b815481529060010190602001808311610a7557829003601f168201915b5050505050905090565b6000610aa9338484611bf8565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610b4e5782811015610b415760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610970565b610b4e8533858403611bf8565b610b59858585611d1c565b60019150505b9392505050565b6005546001600160a01b03163314610b905760405162461bcd60e51b815260040161097090612c3b565b6064610b9e6012600a612e01565b600254610bab9190612e10565b610bb59190612e10565b811015610c1a5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610970565b610c266012600a612e01565b610c309082612e32565b60178190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6005546001600160a01b03163314610c965760405162461bcd60e51b815260040161097090612c3b565b601660149054906101000a900460ff1615158115151415610d0f5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b6064820152608401610970565b6016805460ff60a01b1916600160a01b8315158102919091179182905560405160ff9190920416151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610c61565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610aa9918590610d9b908690612c86565b611bf8565b6005546001600160a01b03163314610dca5760405162461bcd60e51b815260040161097090612c3b565b60195460ff1615158115151415610e3e5760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610970565b6019805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610c61565b6005546001600160a01b03163314610eaf5760405162461bcd60e51b815260040161097090612c3b565b6009829055600b819055610ec38183612c86565b600d819055600e54619c4091610ed99190612c86565b1115610ef75760405162461bcd60e51b815260040161097090612c9e565b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b546040516109fe929190918252602082015260400190565b6005546001600160a01b03163314610f5f5760405162461bcd60e51b815260040161097090612c3b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fd35760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b03821660009081526018602052604090205460ff16151581151514156110125760405162461bcd60e51b815260040161097090612e51565b6001600160a01b03821630141561106b5760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610970565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b031633146110f55760405162461bcd60e51b815260040161097090612c3b565b601354610100900460ff161561114d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e00000000000000006044820152606401610970565b601380546011805461ff0019166101009081179091554260125561ffff19909116179055565b606060048054610a1990612ce2565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112045760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610970565b6112113385858403611bf8565b5060019392505050565b6000610aa9338484611d1c565b6005546001600160a01b031633146112525760405162461bcd60e51b815260040161097090612c3b565b620f424061125f60025490565b6112699190612e10565b81116112dd5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c79006064820152608401610970565b60108190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610c61565b6005546001600160a01b0316331461133c5760405162461bcd60e51b815260040161097090612c3b565b6103e861134b6012600a612e01565b6002546113589190612e10565b6113629190612e10565b821015801561139657506103e861137b6012600a612e01565b6002546113889190612e10565b6113929190612e10565b8110155b6114085760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610970565b6114146012600a612e01565b61141e9083612e32565b601a5561142d6012600a612e01565b6114379082612e32565b601b819055601a546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131926109fe928252602082015260400190565b6005546001600160a01b0316331461149f5760405162461bcd60e51b815260040161097090612c3b565b600f546001600160a01b038281169116141561150e5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610970565b6001600160a01b0381166115785760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610970565b600f80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610c61565b6005546001600160a01b031633146115f05760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b03821660009081526008602052604090205460ff16151581151514156116725760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610970565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016110bf565b6005546001600160a01b031633146116f45760405162461bcd60e51b815260040161097090612c3b565b601580546001600160a01b0319166001600160a01b03838116918217909255601654611724921690600019611bf8565b60006009819055600b819055600a819055600c819055600d819055600e8190556040805182815260208101929092527fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50910160405180910390a160408051600080825260208201527f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c69101610c61565b6005546001600160a01b031633146117de5760405162461bcd60e51b815260040161097090612c3b565b6013805460ff1916911515919091179055565b6005546001600160a01b0316331461181b5760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b03821660009081526014602052604090205460ff161515811515141561185a5760405162461bcd60e51b815260040161097090612e51565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c91016110bf565b6005546001600160a01b031633146118dc5760405162461bcd60e51b815260040161097090612c3b565b60115460ff61010090910416151581151514156119465760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b6064820152608401610970565b601180549115156101000261ff0019909216919091179055565b6005546001600160a01b0316331461198a5760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b0381166119ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610970565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a755760405162461bcd60e51b815260040161097090612c3b565b6001600160a01b038116301415611af45760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e730000000000000000006064820152608401610970565b6001600160a01b038116611b1057611b0c33476123d3565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d9190612e95565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf19190612eae565b5050505b50565b6001600160a01b038316611c5a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610970565b6001600160a01b038216611cbb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610970565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d425760405162461bcd60e51b815260040161097090612ecb565b6001600160a01b038216611d685760405162461bcd60e51b815260040161097090612f10565b601354610100900460ff1680611d9657506001600160a01b03831660009081526008602052604090205460ff165b80611db957506001600160a01b03821660009081526008602052604090205460ff165b611e055760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610970565b80611e1b57611e1683836000612482565b505050565b60195460ff1615611efd576007546001600160a01b0384811691161480611e4f57506007546001600160a01b038381169116145b8015611e7457506001600160a01b03831660009081526018602052604090205460ff16155b8015611e9957506001600160a01b03821660009081526018602052604090205460ff16155b15611efd576007546001600160a01b0384811691161415611edb57601a54811115611ed65760405162461bcd60e51b815260040161097090612f53565b611efd565b601b54811115611efd5760405162461bcd60e51b815260040161097090612f53565b60135460ff16156120695742601254610bb8611f199190612c86565b1015611f6557604560098190556000600a819055600b819055600c819055611f4091612c86565b600d55600c54600a54611f539190612c86565b600e556013805460ff191690556120b0565b42601254610960611f769190612c86565b1015611fb95760006009819055600a8190556101f4600b819055600c819055611f9e91612c86565b600d55600c54600a54611fb19190612c86565b600e556120b0565b42601254610708611fca9190612c86565b1015611ff25760006009819055600a8190556103e8600b819055600c819055611f9e91612c86565b426012546104b06120039190612c86565b101561202b5760006009819055600a8190556107d0600b819055600c819055611f9e91612c86565b4260125461025861203c9190612c86565b10156120645760006009819055600a819055610bb8600b819055600c819055611f9e91612c86565b6120b0565b6120748383836125d6565b156120b05760006009819055600a819055600b819055600c8190556120999080612c86565b600d55600c54600a546120ac9190612c86565b600e555b30600090815260208190526040902054601054811080159081906120d7575060115460ff16155b80156120f057506007546001600160a01b038581169116145b801561210b57506000600e54600d546121099190612c86565b115b801561211e5750601154610100900460ff165b156121ce576011805460ff19166001179055600e54600d5460009161214291612c86565b90506000600a546009546121569190612c86565b90506000600c54600b5461216a9190612c86565b905081156121965760008361217f8488612e32565b6121899190612e10565b905061219481612687565b505b80156121c0576000836121a98388612e32565b6121b39190612e10565b90506121be816128d2565b505b50506011805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff168061220d57506001600160a01b03851660009081526008602052604090205460ff165b8061221a575060115460ff165b1561222757506000612284565b6007546001600160a01b03878116911614156122615750600d54601680546001600160a01b0319166001600160a01b038816179055612284565b6007546001600160a01b03868116911614156122805750600e54612284565b5060005b80156122be5760006127106122998387612e32565b6122a39190612e10565b90506122af8186612fb0565b94506122bc873083612482565b505b601654600160a01b900460ff16156123c0576001600160a01b03861660009081526014602052604090205460ff1615801561231257506001600160a01b03851660009081526014602052604090205460ff16155b801561232c57506007546001600160a01b03868116911614155b156123c0576001600160a01b0385166000908152602081905260409020546017546123578683612c86565b11156123be5760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b6064820152608401610970565b505b6123cb868686612482565b505050505050565b6000814710156124255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610970565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612472576040519150601f19603f3d011682016040523d82523d6000602084013e612477565b606091505b509095945050505050565b6001600160a01b0383166124a85760405162461bcd60e51b815260040161097090612ecb565b6001600160a01b0382166124ce5760405162461bcd60e51b815260040161097090612f10565b6001600160a01b038316600090815260208190526040902054818110156125465760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610970565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061257d908490612c86565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125c991815260200190565b60405180910390a3611bf1565b6015546000906001600160a01b03166125f157506001610b5f565b6015546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201859052909116906323b872dd906064016020604051808303816000875af115801561264c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126709190612eae565b1561267d57506001610b5f565b5060009392505050565b6000612694600283612e10565b905060006126a28284612fb0565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106126dc576126dc612fc7565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127599190612fdd565b8160018151811061276c5761276c612fc7565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906127b2908790600090869030904290600401612ffa565b600060405180830381600087803b1580156127cc57600080fd5b505af11580156127e0573d6000803e3d6000fd5b50505050600082476127f29190612fb0565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612861573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612886919061306b565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061290b5761290b612fc7565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129889190612fdd565b8160018151811061299b5761299b612fc7565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906129e1908690600090869030904290600401612ffa565b600060405180830381600087803b1580156129fb57600080fd5b505af1158015612a0f573d6000803e3d6000fd5b5050505060008247612a219190612fb0565b600f54909150612a3a906001600160a01b0316826123d3565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b60008060408385031215612a8d57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015612ac957858101830151858201604001528201612aad565b81811115612adb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611bf557600080fd5b60008060408385031215612b1957600080fd5b8235612b2481612af1565b946020939093013593505050565b600060208284031215612b4457600080fd5b8135610b5f81612af1565b600080600060608486031215612b6457600080fd5b8335612b6f81612af1565b92506020840135612b7f81612af1565b929592945050506040919091013590565b600060208284031215612ba257600080fd5b5035919050565b8015158114611bf557600080fd5b600060208284031215612bc957600080fd5b8135610b5f81612ba9565b60008060408385031215612be757600080fd5b8235612bf281612af1565b91506020830135612c0281612ba9565b809150509250929050565b60008060408385031215612c2057600080fd5b8235612c2b81612af1565b91506020830135612c0281612af1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612c9957612c99612c70565b500190565b60208082526024908201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604082015263696d756d60e01b606082015260800190565b600181811c90821680612cf657607f821691505b60208210811415612d1757634e487b7160e01b600052602260045260246000fd5b50919050565b600181815b80851115612d58578160001904821115612d3e57612d3e612c70565b80851615612d4b57918102915b93841c9390800290612d22565b509250929050565b600082612d6f57506001610aad565b81612d7c57506000610aad565b8160018114612d925760028114612d9c57612db8565b6001915050610aad565b60ff841115612dad57612dad612c70565b50506001821b610aad565b5060208310610133831016604e8410600b8410161715612ddb575081810a610aad565b612de58383612d1d565b8060001904821115612df957612df9612c70565b029392505050565b6000610b5f60ff841683612d60565b600082612e2d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e4c57612e4c612c70565b500290565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b600060208284031215612ea757600080fd5b5051919050565b600060208284031215612ec057600080fd5b8151610b5f81612ba9565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b600082821015612fc257612fc2612c70565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fef57600080fd5b8151610b5f81612af1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561304a5784516001600160a01b031683529383019391830191600101613025565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561308057600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122091f36ed528eadb2c180da3904e2243ed82a85a41f0ee5c82f8f88e545ddc0e0a64736f6c634300080a0033

Deployed Bytecode Sourcemap

15953:18936:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32957:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;32957:39:0;;;;;;;;21367:461;;;;;;;;;;-1:-1:-1;21367:461:0;;;;;:::i;:::-;;:::i;:::-;;11238:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12152:169::-;;;;;;;;;;-1:-1:-1;12152:169:0;;;;;:::i;:::-;;:::i;:::-;;;1672:14:1;;1665:22;1647:41;;1635:2;1620:18;12152:169:0;1507:187:1;16036:41:0;;;;;;;;;;-1:-1:-1;16036:41:0;;;;-1:-1:-1;;;;;16036:41:0;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;16036:41:0;1699:229:1;11559:108:0;;;;;;;;;;-1:-1:-1;11647:12:0;;11559:108;;34745:141;;;;;;;;;;-1:-1:-1;34745:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;34844:34:0;34820:4;34844:34;;;:25;:34;;;;;;;;;34745:141;30751:36;;;;;;;;;;-1:-1:-1;30751:36:0;;;;-1:-1:-1;;;30751:36:0;;;;;;12329:573;;;;;;;;;;-1:-1:-1;12329:573:0;;;;;:::i;:::-;;:::i;32016:340::-;;;;;;;;;;-1:-1:-1;32016:340:0;;;;;:::i;:::-;;:::i;31041:280::-;;;;;;;;;;-1:-1:-1;31041:280:0;;;;;:::i;:::-;;:::i;32908:42::-;;;;;;;;;;-1:-1:-1;32908:42:0;;;;;;;;16224:34;;;;;;;;;;;;;;;;11458:93;;;;;;;;;;-1:-1:-1;11458:93:0;;11541:2;3342:36:1;;3330:2;3315:18;11458:93:0;3200:184:1;12910:215:0;;;;;;;;;;-1:-1:-1;12910:215:0;;;;;:::i;:::-;;:::i;16084:29::-;;;;;;;;;;-1:-1:-1;16084:29:0;;;;-1:-1:-1;;;;;16084:29:0;;;22340:26;;;;;;;;;;-1:-1:-1;22340:26:0;;;;;;;;;;;20778:125;;;;;;;;;;-1:-1:-1;20778:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;20867:28:0;20843:4;20867:28;;;:19;:28;;;;;;;;;20778:125;33322:311;;;;;;;;;;-1:-1:-1;33322:311:0;;;;;:::i;:::-;;:::i;33003:40::-;;;;;;;;;;;;;;;;16267:33;;;;;;;;;;;;;;;;20911:448;;;;;;;;;;-1:-1:-1;20911:448:0;;;;;:::i;:::-;;:::i;16543:26::-;;;;;;;;;;-1:-1:-1;16543:26:0;;;;;;;;;;;11675:127;;;;;;;;;;-1:-1:-1;11675:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11776:18:0;11749:7;11776:18;;;;;;;;;;;;11675:127;10425:148;;;;;;;;;;;;;:::i;16429:31::-;;;;;;;;;;-1:-1:-1;16429:31:0;;;;-1:-1:-1;;;;;16429:31:0;;;16578:25;;;;;;;;;;;;;;;;16184:33;;;;;;;;;;;;;;;;34338:399;;;;;;;;;;-1:-1:-1;34338:399:0;;;;;:::i;:::-;;:::i;22375:249::-;;;;;;;;;;;;;:::i;10211:79::-;;;;;;;;;;-1:-1:-1;10276:6:0;;-1:-1:-1;;;;;10276:6:0;10211:79;;11346:104;;;;;;;;;;;;;:::i;13133:413::-;;;;;;;;;;-1:-1:-1;13133:413:0;;;;;:::i;:::-;;:::i;32690:145::-;;;;;;;;;;-1:-1:-1;32690:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;32789:38:0;32765:4;32789:38;;;:29;:38;;;;;;;;;32690:145;11810:175;;;;;;;;;;-1:-1:-1;11810:175:0;;;;;:::i;:::-;;:::i;30794:30::-;;;;;;;;;;;;;;;;28773:304;;;;;;;;;;-1:-1:-1;28773:304:0;;;;;:::i;:::-;;:::i;33641:689::-;;;;;;;;;;-1:-1:-1;33641:689:0;;;;;:::i;:::-;;:::i;21953:379::-;;;;;;;;;;-1:-1:-1;21953:379:0;;;;;:::i;:::-;;:::i;16610:31::-;;;;;;;;;;-1:-1:-1;16610:31:0;;;;;;;;20480:290;;;;;;;;;;-1:-1:-1;20480:290:0;;;;;:::i;:::-;;:::i;31329:418::-;;;;;;;;;;-1:-1:-1;31329:418:0;;;;;:::i;:::-;;:::i;21836:109::-;;;;;;;;;;-1:-1:-1;21836:109:0;;;;;:::i;:::-;;:::i;32364:318::-;;;;;;;;;;-1:-1:-1;32364:318:0;;;;;:::i;:::-;;:::i;16307:34::-;;;;;;;;;;;;;;;;11993:151;;;;;;;;;;-1:-1:-1;11993:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;12109:18:0;;;12082:7;12109:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11993:151;28586:179;;;;;;;;;;-1:-1:-1;28586:179:0;;;;;:::i;:::-;;:::i;16469:34::-;;;;;;;;;;;;;;;;10581:244;;;;;;;;;;-1:-1:-1;10581:244:0;;;;;:::i;:::-;;:::i;20007:465::-;;;;;;;;;;-1:-1:-1;20007:465:0;;;;;:::i;:::-;;:::i;21367:461::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;;;;;;;;;21479:18:::1;:40:::0;;;21530:18:::1;:40:::0;;;21604:39:::1;21551:19:::0;21500;21604:39:::1;:::i;:::-;21583:16;:60:::0;;;21664:15:::1;::::0;21702:5:::1;::::0;21664:34:::1;::::0;::::1;:::i;:::-;:43;;21656:92;;;;-1:-1:-1::0;;;21656:92:0::1;;;;;;;:::i;:::-;21766:54;21781:18;;21801;;21766:54;;;;;;5582:25:1::0;;;5638:2;5623:18;;5616:34;5570:2;5555:18;;5408:248;21766:54:0::1;;;;;;;;21367:461:::0;;:::o;11238:100::-;11292:13;11325:5;11318:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11238:100;:::o;12152:169::-;12235:4;12252:39;9614:10;12275:7;12284:6;12252:8;:39::i;:::-;-1:-1:-1;12309:4:0;12152:169;;;;;:::o;12329:573::-;-1:-1:-1;;;;;12513:19:0;;12469:4;12513:19;;;:11;:19;;;;;;;;9614:10;12513:33;;;;;;;;-1:-1:-1;;12561:37:0;;12557:265;;12643:6;12623:16;:26;;12615:79;;;;-1:-1:-1;;;12615:79:0;;6248:2:1;12615:79:0;;;6230:21:1;6287:2;6267:18;;;6260:30;6326:34;6306:18;;;6299:62;-1:-1:-1;;;6377:18:1;;;6370:38;6425:19;;12615:79:0;6046:404:1;12615:79:0;12738:57;12747:6;9614:10;12788:6;12769:16;:25;12738:8;:57::i;:::-;12834:36;12844:6;12852:9;12863:6;12834:9;:36::i;:::-;12890:4;12883:11;;;12329:573;;;;;;:::o;32016:340::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;32167:3:::1;32146:16;11541:2:::0;32146::::1;:16;:::i;:::-;11647:12:::0;;32129:34:::1;;;;:::i;:::-;32128:42;;;;:::i;:::-;32108:16;:62;;32100:120;;;::::0;-1:-1:-1;;;32100:120:0;;8262:2:1;32100:120:0::1;::::0;::::1;8244:21:1::0;8301:2;8281:18;;;8274:30;8340:34;8320:18;;;8313:62;-1:-1:-1;;;8391:18:1;;;8384:43;8444:19;;32100:120:0::1;8060:409:1::0;32100:120:0::1;32269:16;11541:2:::0;32269::::1;:16;:::i;:::-;32249:37;::::0;:16;:37:::1;:::i;:::-;32231:15;:55:::0;;;32304:44:::1;::::0;160:25:1;;;32304:44:0::1;::::0;148:2:1;133:18;32304:44:0::1;;;;;;;;32016:340:::0;:::o;31041:280::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;31135:21:::1;;;;;;;;;;;31125:31;;:6;:31;;;;31117:88;;;::::0;-1:-1:-1;;;31117:88:0;;8849:2:1;31117:88:0::1;::::0;::::1;8831:21:1::0;8888:2;8868:18;;;8861:30;8927:34;8907:18;;;8900:62;-1:-1:-1;;;8978:18:1;;;8971:43;9031:19;;31117:88:0::1;8647:409:1::0;31117:88:0::1;31216:21;:30:::0;;-1:-1:-1;;;;31216:30:0::1;-1:-1:-1::0;;;31216:30:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;31264:49:::1;::::0;31216:30:::1;31291:21:::0;;;::::1;;1672:14:1::0;1665:22;1647:41;;31264:49:0::1;::::0;1635:2:1;1620:18;31264:49:0::1;1507:187:1::0;12910:215:0;9614:10;12998:4;13047:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13047:34:0;;;;;;;;;;12998:4;;13015:80;;13038:7;;13047:47;;13084:10;;13047:47;:::i;:::-;13015:8;:80::i;33322:311::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;33421:26:::1;::::0;::::1;;33411:36;;::::0;::::1;;;;33403:99;;;::::0;-1:-1:-1;;;33403:99:0;;9263:2:1;33403:99:0::1;::::0;::::1;9245:21:1::0;9302:2;9282:18;;;9275:30;9341:34;9321:18;;;9314:62;-1:-1:-1;;;9392:18:1;;;9385:48;9450:19;;33403:99:0::1;9061:414:1::0;33403:99:0::1;33513:26;:35:::0;;-1:-1:-1;;33513:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33566:59:::1;::::0;33513:35:::1;33598:26:::0;;;1672:14:1;1665:22;1647:41;;33566:59:0::1;::::0;1635:2:1;1620:18;33566:59:0::1;1507:187:1::0;20911:448:0;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;21020:17:::1;:38:::0;;;21069:17:::1;:38:::0;;;21140:37:::1;21089:18:::0;21040;21140:37:::1;:::i;:::-;21120:15;:57:::0;;;21216:16:::1;::::0;21236:5:::1;::::0;21198:34:::1;::::0;21216:16;21198:34:::1;:::i;:::-;:43;;21190:92;;;;-1:-1:-1::0;;;21190:92:0::1;;;;;;;:::i;:::-;21300:51;21314:17;;21333;;21300:51;;;;;;5582:25:1::0;;;5638:2;5623:18;;5616:34;5570:2;5555:18;;5408:248;10425:148:0;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;10516:6:::1;::::0;10495:40:::1;::::0;10532:1:::1;::::0;-1:-1:-1;;;;;10516:6:0::1;::::0;10495:40:::1;::::0;10532:1;;10495:40:::1;10546:6;:19:::0;;-1:-1:-1;;;;;;10546:19:0::1;::::0;;10425:148::o;34338:399::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34448:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;::::1;;:45;;::::0;::::1;;;;34439:95;;;;-1:-1:-1::0;;;34439:95:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34553:24:0;::::1;34572:4;34553:24;;34545:60;;;::::0;-1:-1:-1;;;34545:60:0;;10087:2:1;34545:60:0::1;::::0;::::1;10069:21:1::0;10126:2;10106:18;;;10099:30;10165:25;10145:18;;;10138:53;10208:18;;34545:60:0::1;9885:347:1::0;34545:60:0::1;-1:-1:-1::0;;;;;34618:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:44;;-1:-1:-1;;34618:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34680:49;;1647:41:1;;;34680:49:0::1;::::0;1620:18:1;34680:49:0::1;;;;;;;;34338:399:::0;;:::o;22375:249::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;22438:14:::1;::::0;::::1;::::0;::::1;;;22437:15;22429:52;;;::::0;-1:-1:-1;;;22429:52:0;;10439:2:1;22429:52:0::1;::::0;::::1;10421:21:1::0;10478:2;10458:18;;;10451:30;10517:26;10497:18;;;10490:54;10561:18;;22429:52:0::1;10237:348:1::0;22429:52:0::1;22492:14;:21:::0;;22524:11:::1;:18:::0;;-1:-1:-1;;22524:18:0::1;22492:21;22524:18:::0;;::::1;::::0;;;22566:15:::1;22553:10;:28:::0;-1:-1:-1;;22592:24:0;;;;;;22375:249::o;11346:104::-;11402:13;11435:7;11428:14;;;;;:::i;13133:413::-;9614:10;13226:4;13270:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13270:34:0;;;;;;;;;;13323:35;;;;13315:85;;;;-1:-1:-1;;;13315:85:0;;10792:2:1;13315:85:0;;;10774:21:1;10831:2;10811:18;;;10804:30;10870:34;10850:18;;;10843:62;-1:-1:-1;;;10921:18:1;;;10914:35;10966:19;;13315:85:0;10590:401:1;13315:85:0;13436:67;9614:10;13459:7;13487:15;13468:16;:34;13436:8;:67::i;:::-;-1:-1:-1;13534:4:0;;13133:413;-1:-1:-1;;;13133:413:0:o;11810:175::-;11896:4;11913:42;9614:10;11937:9;11948:6;11913:9;:42::i;28773:304::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;28888:9:::1;28872:13;11647:12:::0;;;11559:108;28872:13:::1;:25;;;;:::i;:::-;28860:9;:37;28852:113;;;::::0;-1:-1:-1;;;28852:113:0;;11198:2:1;28852:113:0::1;::::0;::::1;11180:21:1::0;11237:2;11217:18;;;11210:30;11276:34;11256:18;;;11249:62;11347:33;11327:18;;;11320:61;11398:19;;28852:113:0::1;10996:427:1::0;28852:113:0::1;28976:18;:30:::0;;;29024:45:::1;::::0;160:25:1;;;29024:45:0::1;::::0;148:2:1;133:18;29024:45:0::1;14:177:1::0;33641:689:0;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;33864:5:::1;33843:16;11541:2:::0;33843::::1;:16;:::i;:::-;11647:12:::0;;33826:34:::1;;;;:::i;:::-;33825:44;;;;:::i;:::-;33796:24;:73;;:164;;;;-1:-1:-1::0;33955:5:0::1;33934:16;11541:2:::0;33934::::1;:16;:::i;:::-;11647:12:::0;;33917:34:::1;;;;:::i;:::-;33916:44;;;;:::i;:::-;33887:25;:73;;33796:164;33774:278;;;::::0;-1:-1:-1;;;33774:278:0;;11630:2:1;33774:278:0::1;::::0;::::1;11612:21:1::0;11669:2;11649:18;;;11642:30;11708:34;11688:18;;;11681:62;11779:33;11759:18;;;11752:61;11830:19;;33774:278:0::1;11428:427:1::0;33774:278:0::1;34120:16;11541:2:::0;34120::::1;:16;:::i;:::-;34091:46;::::0;:24;:46:::1;:::i;:::-;34064:23;:73:::0;34204:16:::1;11541:2:::0;34204::::1;:16;:::i;:::-;34175:46;::::0;:25;:46:::1;:::i;:::-;34148:24;:73:::0;;;34272:23:::1;::::0;34239:83:::1;::::0;::::1;::::0;::::1;::::0;5582:25:1;;5638:2;5623:18;;5616:34;5570:2;5555:18;;5408:248;21953:379:0;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;22067:15:::1;::::0;-1:-1:-1;;;;;22047:35:0;;::::1;22067:15:::0;::::1;22047:35;;22039:87;;;::::0;-1:-1:-1;;;22039:87:0;;12062:2:1;22039:87:0::1;::::0;::::1;12044:21:1::0;12101:2;12081:18;;;12074:30;12140:34;12120:18;;;12113:62;-1:-1:-1;;;12191:18:1;;;12184:38;12239:19;;22039:87:0::1;11860:404:1::0;22039:87:0::1;-1:-1:-1::0;;;;;22145:30:0;::::1;22137:85;;;::::0;-1:-1:-1;;;22137:85:0;;12471:2:1;22137:85:0::1;::::0;::::1;12453:21:1::0;12510:2;12490:18;;;12483:30;12549:34;12529:18;;;12522:62;-1:-1:-1;;;12600:18:1;;;12593:41;12651:19;;22137:85:0::1;12269:407:1::0;22137:85:0::1;22233:15;:34:::0;;-1:-1:-1;;;;;;22233:34:0::1;-1:-1:-1::0;;;;;22233:34:0;::::1;::::0;;::::1;::::0;;;22285:39:::1;::::0;1871:51:1;;;22285:39:0::1;::::0;1859:2:1;1844:18;22285:39:0::1;1699:229:1::0;20480:290:0;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20574:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;20566:94;;;::::0;-1:-1:-1;;;20566:94:0;;12883:2:1;20566:94:0::1;::::0;::::1;12865:21:1::0;12922:2;12902:18;;;12895:30;12961:34;12941:18;;;12934:62;-1:-1:-1;;;13012:18:1;;;13005:40;13062:19;;20566:94:0::1;12681:406:1::0;20566:94:0::1;-1:-1:-1::0;;;;;20671:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20671:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20728:34;;1647:41:1;;;20728:34:0::1;::::0;1620:18:1;20728:34:0::1;1507:187:1::0;31329:418:0;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;31393:7:::1;:14:::0;;-1:-1:-1;;;;;;31393:14:0::1;-1:-1:-1::0;;;;;31393:14:0;;::::1;::::0;;::::1;::::0;;;31428:8:::1;::::0;31419:46:::1;::::0;31428:8:::1;::::0;-1:-1:-1;;31419:8:0::1;:46::i;:::-;31498:1;31478:17;:21:::0;;;31510:17:::1;:21:::0;;;31544:18:::1;:22:::0;;;31577:18:::1;:22:::0;;;31612:15:::1;:21:::0;;;31644:16:::1;:22:::0;;;31684:19:::1;::::0;;5582:25:1;;;5638:2;5623:18;;5616:34;;;;31684:19:0::1;::::0;5555:18:1;31684:19:0::1;;;;;;;31719:20;::::0;;31734:1:::1;5582:25:1::0;;;5638:2;5623:18;;5616:34;31719:20:0::1;::::0;5555:18:1;31719:20:0::1;5408:248:1::0;21836:109:0;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;21910:16:::1;:27:::0;;-1:-1:-1;;21910:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21836:109::o;32364:318::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32464:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;::::1;;:49;;::::0;::::1;;;;32455:98;;;;-1:-1:-1::0;;;32455:98:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32564:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;32564:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32630:44;;1647:41:1;;;32630:44:0::1;::::0;1620:18:1;32630:44:0::1;1507:187:1::0;28586:179:0;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;28662:11:::1;::::0;::::1;;::::0;;::::1;;:23;;::::0;::::1;;;;28654:70;;;::::0;-1:-1:-1;;;28654:70:0;;13563:2:1;28654:70:0::1;::::0;::::1;13545:21:1::0;13602:2;13582:18;;;13575:30;13641:34;13621:18;;;13614:62;-1:-1:-1;;;13692:18:1;;;13685:32;13734:19;;28654:70:0::1;13361:398:1::0;28654:70:0::1;28735:11;:22:::0;;;::::1;;;;-1:-1:-1::0;;28735:22:0;;::::1;::::0;;;::::1;::::0;;28586:179::o;10581:244::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10670:22:0;::::1;10662:73;;;::::0;-1:-1:-1;;;10662:73:0;;13966:2:1;10662:73:0::1;::::0;::::1;13948:21:1::0;14005:2;13985:18;;;13978:30;14044:34;14024:18;;;14017:62;-1:-1:-1;;;14095:18:1;;;14088:36;14141:19;;10662:73:0::1;13764:402:1::0;10662:73:0::1;10772:6;::::0;10751:38:::1;::::0;-1:-1:-1;;;;;10751:38:0;;::::1;::::0;10772:6:::1;::::0;10751:38:::1;::::0;10772:6:::1;::::0;10751:38:::1;10800:6;:17:::0;;-1:-1:-1;;;;;;10800:17:0::1;-1:-1:-1::0;;;;;10800:17:0;;;::::1;::::0;;;::::1;::::0;;10581:244::o;20007:465::-;10338:6;;-1:-1:-1;;;;;10338:6:0;9614:10;10338:22;10330:67;;;;-1:-1:-1;;;10330:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20086:22:0;::::1;20103:4;20086:22;;20078:90;;;::::0;-1:-1:-1;;;20078:90:0;;14373:2:1;20078:90:0::1;::::0;::::1;14355:21:1::0;14412:2;14392:18;;;14385:30;14451:34;14431:18;;;14424:62;14522:25;14502:18;;;14495:53;14565:19;;20078:90:0::1;14171:419:1::0;20078:90:0::1;-1:-1:-1::0;;;;;20183:21:0;::::1;20179:127;;20221:52;20229:10;20251:21;20221:29;:52::i;:::-;;20007:465:::0;:::o;20179:127::-:1;20378:35;::::0;-1:-1:-1;;;20378:35:0;;20407:4:::1;20378:35;::::0;::::1;1871:51:1::0;20343:5:0;;20316:17:::1;::::0;-1:-1:-1;;;;;20378:20:0;::::1;::::0;::::1;::::0;1844:18:1;;20378:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20424:40;::::0;-1:-1:-1;;;20424:40:0;;20444:10:::1;20424:40;::::0;::::1;14958:51:1::0;15025:18;;;15018:34;;;20360:53:0;;-1:-1:-1;;;;;;20424:19:0;::::1;::::0;::::1;::::0;14931:18:1;;20424:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20067:405;;10408:1;20007:465:::0;:::o;15301:380::-;-1:-1:-1;;;;;15437:19:0;;15429:68;;;;-1:-1:-1;;;15429:68:0;;15515:2:1;15429:68:0;;;15497:21:1;15554:2;15534:18;;;15527:30;15593:34;15573:18;;;15566:62;-1:-1:-1;;;15644:18:1;;;15637:34;15688:19;;15429:68:0;15313:400:1;15429:68:0;-1:-1:-1;;;;;15516:21:0;;15508:68;;;;-1:-1:-1;;;15508:68:0;;15920:2:1;15508:68:0;;;15902:21:1;15959:2;15939:18;;;15932:30;15998:34;15978:18;;;15971:62;-1:-1:-1;;;16049:18:1;;;16042:32;16091:19;;15508:68:0;15718:398:1;15508:68:0;-1:-1:-1;;;;;15589:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15641:32;;160:25:1;;;15641:32:0;;133:18:1;15641:32:0;;;;;;;15301:380;;;:::o;22632:5946::-;-1:-1:-1;;;;;22729:18:0;;22721:68;;;;-1:-1:-1;;;22721:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22808:16:0;;22800:64;;;;-1:-1:-1;;;22800:64:0;;;;;;;:::i;:::-;22883:14;;;;;;;;:43;;-1:-1:-1;;;;;;22901:25:0;;;;;;:19;:25;;;;;;;;22883:43;:70;;;-1:-1:-1;;;;;;22930:23:0;;;;;;:19;:23;;;;;;;;22883:70;22875:107;;;;-1:-1:-1;;;22875:107:0;;17133:2:1;22875:107:0;;;17115:21:1;17172:2;17152:18;;;17145:30;17211:26;17191:18;;;17184:54;17255:18;;22875:107:0;16931:348:1;22875:107:0;23006:11;23002:93;;23034:28;23050:4;23056:2;23060:1;23034:15;:28::i;:::-;22632:5946;;;:::o;23002:93::-;23111:26;;;;23107:752;;;23177:13;;-1:-1:-1;;;;;23169:21:0;;;23177:13;;23169:21;;:44;;-1:-1:-1;23200:13:0;;-1:-1:-1;;;;;23194:19:0;;;23200:13;;23194:19;23169:44;23168:99;;;;-1:-1:-1;;;;;;23236:31:0;;;;;;:25;:31;;;;;;;;23235:32;23168:99;:151;;;;-1:-1:-1;;;;;;23290:29:0;;;;;;:25;:29;;;;;;;;23289:30;23168:151;23164:684;;;23366:13;;-1:-1:-1;;;;;23358:21:0;;;23366:13;;23358:21;23354:479;;;23448:23;;23438:6;:33;;23404:180;;;;-1:-1:-1;;;23404:180:0;;;;;;;:::i;:::-;23354:479;;;23677:24;;23667:6;:34;;23633:180;;;;-1:-1:-1;;;23633:180:0;;;;;;;:::i;:::-;23874:16;;;;23871:2542;;;23930:15;23910:10;;23923:4;23910:17;;;;:::i;:::-;:35;23907:2100;;;23986:2;23965:17;:23;;;24036:1;24015:18;:22;;;24063:17;:22;;;24109:18;:22;;;24178:38;;;:::i;:::-;24157:15;:59;24277:18;;24256;;:39;;24277:18;24256:39;:::i;:::-;24235:16;:60;24316:16;:24;;-1:-1:-1;;24316:24:0;;;23871:2542;;23907:2100;24385:15;24365:10;;24378:4;24365:17;;;;:::i;:::-;:35;24362:1645;;;24441:1;24420:17;:22;;;24466:18;:22;;;24535:3;24514:17;:24;;;24562:18;:24;;;24633:38;;;:::i;:::-;24612:15;:59;24732:18;;24711;;:39;;24732:18;24711:39;:::i;:::-;24690:16;:60;23871:2542;;24362:1645;24795:15;24775:10;;24788:4;24775:17;;;;:::i;:::-;:35;24772:1235;;;24851:1;24830:17;:22;;;24876:18;:22;;;24945:4;24924:17;:25;;;24974:18;:25;;;25047:38;;;:::i;24772:1235::-;25209:15;25189:10;;25202:4;25189:17;;;;:::i;:::-;:35;25186:821;;;25265:1;25244:17;:22;;;25290:18;:22;;;25359:4;25338:17;:25;;;25388:18;:25;;;25461:38;;;:::i;25186:821::-;25622:15;25603:10;;25616:3;25603:16;;;;:::i;:::-;:34;25600:407;;;25678:1;25657:17;:22;;;25703:18;:22;;;25772:4;25751:17;:25;;;25801:18;:25;;;25874:38;;;:::i;25600:407::-;23871:2542;;;26018:32;26033:4;26039:2;26043:6;26018:14;:32::i;:::-;26014:399;;;26092:1;26071:17;:22;;;26117:18;:22;;;26165:17;:22;;;26211:18;:22;;;26280:38;;26092:1;26280:38;:::i;:::-;26259:15;:59;26379:18;;26358;;:39;;26379:18;26358:39;:::i;:::-;26337:16;:60;26014:399;26468:4;26419:28;11776:18;;;;;;;;;;;26526;;26502:42;;;;;;;26561:33;;-1:-1:-1;26586:8:0;;;;26585:9;26561:33;:69;;;;-1:-1:-1;26617:13:0;;-1:-1:-1;;;;;26611:19:0;;;26617:13;;26611:19;26561:69;:124;;;;;26684:1;26665:16;;26647:15;;:34;;;;:::i;:::-;:38;26561:124;:152;;;;-1:-1:-1;26702:11:0;;;;;;;26561:152;26557:895;;;26740:8;:15;;-1:-1:-1;;26740:15:0;26751:4;26740:15;;;26809:16;;26791:15;;26740:8;;26791:34;;;:::i;:::-;26772:53;;26840:22;26885:18;;26865:17;;:38;;;;:::i;:::-;26840:63;;26918:22;26963:18;;26943:17;;:38;;;;:::i;:::-;26918:63;-1:-1:-1;27002:18:0;;26998:183;;27041:23;27107:8;27067:37;27090:14;27067:20;:37;:::i;:::-;:48;;;;:::i;:::-;27041:74;;27134:31;27149:15;27134:14;:31::i;:::-;27022:159;26998:183;27213:18;;27209:189;;27252:23;27318:8;27278:37;27301:14;27278:20;:37;:::i;:::-;:48;;;;:::i;:::-;27252:74;;27345:37;27366:15;27345:20;:37::i;:::-;27233:165;27209:189;-1:-1:-1;;27424:8:0;:16;;-1:-1:-1;;27424:16:0;;;-1:-1:-1;26557:895:0;-1:-1:-1;;;;;27497:25:0;;27464:18;27497:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27526:23:0;;;;;;:19;:23;;;;;;;;27497:52;:64;;;-1:-1:-1;27553:8:0;;;;27497:64;27493:363;;;-1:-1:-1;27591:1:0;27493:363;;;27622:13;;-1:-1:-1;;;;;27614:21:0;;;27622:13;;27614:21;27610:246;;;-1:-1:-1;27665:15:0;;27695:8;:15;;-1:-1:-1;;;;;;27695:15:0;-1:-1:-1;;;;;27695:15:0;;;;;27610:246;;;27738:13;;-1:-1:-1;;;;;27732:19:0;;;27738:13;;27732:19;27728:128;;;-1:-1:-1;27781:16:0;;27728:128;;;-1:-1:-1;27843:1:0;27728:128;27872:14;;27868:186;;27903:12;27942:6;27919:19;27928:10;27919:6;:19;:::i;:::-;27918:30;;;;:::i;:::-;27903:45;-1:-1:-1;27972:13:0;27903:45;27972:6;:13;:::i;:::-;27963:22;;28000:42;28016:4;28030;28037;28000:15;:42::i;:::-;27888:166;27868:186;28070:21;;-1:-1:-1;;;28070:21:0;;;;28066:459;;;-1:-1:-1;;;;;28123:35:0;;;;;;:29;:35;;;;;;;;28122:36;:92;;;;-1:-1:-1;;;;;;28181:33:0;;;;;;:29;:33;;;;;;;;28180:34;28122:92;:132;;;;-1:-1:-1;28241:13:0;;-1:-1:-1;;;;;28235:19:0;;;28241:13;;28235:19;;28122:132;28118:396;;;-1:-1:-1;;;;;11776:18:0;;28289:15;11776:18;;;;;;;;;;;28390:15;;28370:16;28380:6;11776:18;28370:16;:::i;:::-;:35;;28340:158;;;;-1:-1:-1;;;28340:158:0;;18044:2:1;28340:158:0;;;18026:21:1;18083:2;18063:18;;;18056:30;18122:34;18102:18;;;18095:62;-1:-1:-1;;;18173:18:1;;;18166:46;18229:19;;28340:158:0;17842:412:1;28340:158:0;28270:244;28118:396;28537:33;28553:4;28559:2;28563:6;28537:15;:33::i;:::-;22710:5868;;;22632:5946;;;:::o;9228:266::-;9307:4;9356:6;9331:21;:31;;9323:73;;;;-1:-1:-1;;;9323:73:0;;18461:2:1;9323:73:0;;;18443:21:1;18500:2;18480:18;;;18473:30;18539:31;18519:18;;;18512:59;18588:18;;9323:73:0;18259:353:1;9323:73:0;9410:12;9428:9;-1:-1:-1;;;;;9428:14:0;9450:6;9428:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9409:52:0;;9228:266;-1:-1:-1;;;;;9228:266:0:o;13554:733::-;-1:-1:-1;;;;;13694:20:0;;13686:70;;;;-1:-1:-1;;;13686:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13775:23:0;;13767:71;;;;-1:-1:-1;;;13767:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13935:17:0;;13911:21;13935:17;;;;;;;;;;;13971:23;;;;13963:74;;;;-1:-1:-1;;;13963:74:0;;19029:2:1;13963:74:0;;;19011:21:1;19068:2;19048:18;;;19041:30;19107:34;19087:18;;;19080:62;-1:-1:-1;;;19158:18:1;;;19151:36;19204:19;;13963:74:0;18827:402:1;13963:74:0;-1:-1:-1;;;;;14073:17:0;;;:9;:17;;;;;;;;;;;14093:22;;;14073:42;;14137:20;;;;;;;;:30;;14109:6;;14073:9;14137:30;;14109:6;;14137:30;:::i;:::-;;;;;;;;14202:9;-1:-1:-1;;;;;14185:35:0;14194:6;-1:-1:-1;;;;;14185:35:0;;14213:6;14185:35;;;;160:25:1;;148:2;133:18;;14:177;14185:35:0;;;;;;;;14233:46;22632:5946;31755:253;31868:7;;31839:4;;-1:-1:-1;;;;;31868:7:0;31856:47;;-1:-1:-1;31899:4:0;31892:11;;31856:47;31925:7;;31918:46;;-1:-1:-1;;;31918:46:0;;-1:-1:-1;;;;;19492:15:1;;;31918:46:0;;;19474:34:1;19544:15;;;19524:18;;;19517:43;19576:18;;;19569:34;;;31925:7:0;;;;31918:28;;19409:18:1;;31918:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31914:63;;;-1:-1:-1;31973:4:0;31966:11;;31914:63;-1:-1:-1;31995:5:0;31755:253;;;;;:::o;29085:876::-;29144:12;29159:10;29168:1;29159:6;:10;:::i;:::-;29144:25;-1:-1:-1;29180:17:0;29200:13;29144:25;29200:6;:13;:::i;:::-;29309:16;;;29323:1;29309:16;;;;;;;;29180:33;;-1:-1:-1;29251:21:0;;29226:22;;29309:16;;;;;;;;;;-1:-1:-1;29309:16:0;29285:40;;29354:4;29336;29341:1;29336:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29336:23:0;;;:7;;;;;;;;;;:23;;;;29380:15;;:22;;;-1:-1:-1;;;29380:22:0;;;;:15;;;;;:20;;:22;;;;;29336:7;;29380:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29370:4;29375:1;29370:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29370:32:0;;;:7;;;;;;;;;:32;29415:15;;:179;;-1:-1:-1;;;29415:179:0;;:15;;;:66;;:179;;29496:4;;29415:15;;29531:4;;29558;;29578:15;;29415:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29615:18;29660:14;29636:21;:38;;;;:::i;:::-;29687:15;;:205;;-1:-1:-1;;;29687:205:0;;29760:4;29687:205;;;21460:34:1;21510:18;;;21503:34;;;29687:15:0;21553:18:1;;;21546:34;;;21596:18;;;21589:34;29844:6:0;21639:19:1;;;21632:44;29866:15:0;21692:19:1;;;21685:35;29615:59:0;;-1:-1:-1;;;;;;29687:15:0;;:31;;29615:59;;21394:19:1;;29687:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;29910:43:0;;;22244:25:1;;;22300:2;22285:18;;22278:34;;;22328:18;;;22321:34;;;29910:43:0;;-1:-1:-1;22232:2:1;22217:18;29910:43:0;;;;;;;29133:828;;;;;29085:876;:::o;29969:647::-;30122:16;;;30136:1;30122:16;;;;;;;;30064:21;;30039:22;;30122:16;30136:1;30122:16;;;;;;;;;;-1:-1:-1;30122:16:0;30098:40;;30167:4;30149;30154:1;30149:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30149:23:0;;;:7;;;;;;;;;;:23;;;;30193:15;;:22;;;-1:-1:-1;;;30193:22:0;;;;:15;;;;;:20;;:22;;;;;30149:7;;30193:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30183:4;30188:1;30183:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30183:32:0;;;:7;;;;;;;;;:32;30228:15;;:186;;-1:-1:-1;;;30228:186:0;;:15;;;:66;;:186;;30309:11;;30228:15;;30351:4;;30378;;30398:15;;30228:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30427:18;30472:14;30448:21;:38;;;;:::i;:::-;30507:15;;30427:59;;-1:-1:-1;30499:46:0;;-1:-1:-1;;;;;30507:15:0;30427:59;30499:34;:46::i;:::-;-1:-1:-1;30563:45:0;;;5582:25:1;;;5638:2;5623:18;;5616:34;;;30563:45:0;;5555:18:1;30563:45:0;;;;;;;30028:588;;;29969:647;:::o;196:248:1:-;264:6;272;325:2;313:9;304:7;300:23;296:32;293:52;;;341:1;338;331:12;293:52;-1:-1:-1;;364:23:1;;;434:2;419:18;;;406:32;;-1:-1:-1;196:248:1:o;449:597::-;561:4;590:2;619;608:9;601:21;651:6;645:13;694:6;689:2;678:9;674:18;667:34;719:1;729:140;743:6;740:1;737:13;729:140;;;838:14;;;834:23;;828:30;804:17;;;823:2;800:26;793:66;758:10;;729:140;;;887:6;884:1;881:13;878:91;;;957:1;952:2;943:6;932:9;928:22;924:31;917:42;878:91;-1:-1:-1;1030:2:1;1009:15;-1:-1:-1;;1005:29:1;990:45;;;;1037:2;986:54;;449:597;-1:-1:-1;;;449:597:1:o;1051:131::-;-1:-1:-1;;;;;1126:31:1;;1116:42;;1106:70;;1172:1;1169;1162:12;1187:315;1255:6;1263;1316:2;1304:9;1295:7;1291:23;1287:32;1284:52;;;1332:1;1329;1322:12;1284:52;1371:9;1358:23;1390:31;1415:5;1390:31;:::i;:::-;1440:5;1492:2;1477:18;;;;1464:32;;-1:-1:-1;;;1187:315:1:o;1933:247::-;1992:6;2045:2;2033:9;2024:7;2020:23;2016:32;2013:52;;;2061:1;2058;2051:12;2013:52;2100:9;2087:23;2119:31;2144:5;2119:31;:::i;2185:456::-;2262:6;2270;2278;2331:2;2319:9;2310:7;2306:23;2302:32;2299:52;;;2347:1;2344;2337:12;2299:52;2386:9;2373:23;2405:31;2430:5;2405:31;:::i;:::-;2455:5;-1:-1:-1;2512:2:1;2497:18;;2484:32;2525:33;2484:32;2525:33;:::i;:::-;2185:456;;2577:7;;-1:-1:-1;;;2631:2:1;2616:18;;;;2603:32;;2185:456::o;2646:180::-;2705:6;2758:2;2746:9;2737:7;2733:23;2729:32;2726:52;;;2774:1;2771;2764:12;2726:52;-1:-1:-1;2797:23:1;;2646:180;-1:-1:-1;2646:180:1:o;2831:118::-;2917:5;2910:13;2903:21;2896:5;2893:32;2883:60;;2939:1;2936;2929:12;2954:241;3010:6;3063:2;3051:9;3042:7;3038:23;3034:32;3031:52;;;3079:1;3076;3069:12;3031:52;3118:9;3105:23;3137:28;3159:5;3137:28;:::i;3597:382::-;3662:6;3670;3723:2;3711:9;3702:7;3698:23;3694:32;3691:52;;;3739:1;3736;3729:12;3691:52;3778:9;3765:23;3797:31;3822:5;3797:31;:::i;:::-;3847:5;-1:-1:-1;3904:2:1;3889:18;;3876:32;3917:30;3876:32;3917:30;:::i;:::-;3966:7;3956:17;;;3597:382;;;;;:::o;3984:388::-;4052:6;4060;4113:2;4101:9;4092:7;4088:23;4084:32;4081:52;;;4129:1;4126;4119:12;4081:52;4168:9;4155:23;4187:31;4212:5;4187:31;:::i;:::-;4237:5;-1:-1:-1;4294:2:1;4279:18;;4266:32;4307:33;4266:32;4307:33;:::i;4377:356::-;4579:2;4561:21;;;4598:18;;;4591:30;4657:34;4652:2;4637:18;;4630:62;4724:2;4709:18;;4377:356::o;4738:127::-;4799:10;4794:3;4790:20;4787:1;4780:31;4830:4;4827:1;4820:15;4854:4;4851:1;4844:15;4870:128;4910:3;4941:1;4937:6;4934:1;4931:13;4928:39;;;4947:18;;:::i;:::-;-1:-1:-1;4983:9:1;;4870:128::o;5003:400::-;5205:2;5187:21;;;5244:2;5224:18;;;5217:30;5283:34;5278:2;5263:18;;5256:62;-1:-1:-1;;;5349:2:1;5334:18;;5327:34;5393:3;5378:19;;5003:400::o;5661:380::-;5740:1;5736:12;;;;5783;;;5804:61;;5858:4;5850:6;5846:17;5836:27;;5804:61;5911:2;5903:6;5900:14;5880:18;5877:38;5874:161;;;5957:10;5952:3;5948:20;5945:1;5938:31;5992:4;5989:1;5982:15;6020:4;6017:1;6010:15;5874:161;;5661:380;;;:::o;6455:422::-;6544:1;6587:5;6544:1;6601:270;6622:7;6612:8;6609:21;6601:270;;;6681:4;6677:1;6673:6;6669:17;6663:4;6660:27;6657:53;;;6690:18;;:::i;:::-;6740:7;6730:8;6726:22;6723:55;;;6760:16;;;;6723:55;6839:22;;;;6799:15;;;;6601:270;;;6605:3;6455:422;;;;;:::o;6882:806::-;6931:5;6961:8;6951:80;;-1:-1:-1;7002:1:1;7016:5;;6951:80;7050:4;7040:76;;-1:-1:-1;7087:1:1;7101:5;;7040:76;7132:4;7150:1;7145:59;;;;7218:1;7213:130;;;;7125:218;;7145:59;7175:1;7166:10;;7189:5;;;7213:130;7250:3;7240:8;7237:17;7234:43;;;7257:18;;:::i;:::-;-1:-1:-1;;7313:1:1;7299:16;;7328:5;;7125:218;;7427:2;7417:8;7414:16;7408:3;7402:4;7399:13;7395:36;7389:2;7379:8;7376:16;7371:2;7365:4;7362:12;7358:35;7355:77;7352:159;;;-1:-1:-1;7464:19:1;;;7496:5;;7352:159;7543:34;7568:8;7562:4;7543:34;:::i;:::-;7613:6;7609:1;7605:6;7601:19;7592:7;7589:32;7586:58;;;7624:18;;:::i;:::-;7662:20;;6882:806;-1:-1:-1;;;6882:806:1:o;7693:140::-;7751:5;7780:47;7821:4;7811:8;7807:19;7801:4;7780:47;:::i;7838:217::-;7878:1;7904;7894:132;;7948:10;7943:3;7939:20;7936:1;7929:31;7983:4;7980:1;7973:15;8011:4;8008:1;8001:15;7894:132;-1:-1:-1;8040:9:1;;7838:217::o;8474:168::-;8514:7;8580:1;8576;8572:6;8568:14;8565:1;8562:21;8557:1;8550:9;8543:17;8539:45;8536:71;;;8587:18;;:::i;:::-;-1:-1:-1;8627:9:1;;8474:168::o;9480:400::-;9682:2;9664:21;;;9721:2;9701:18;;;9694:30;9760:34;9755:2;9740:18;;9733:62;-1:-1:-1;;;9826:2:1;9811:18;;9804:34;9870:3;9855:19;;9480:400::o;14595:184::-;14665:6;14718:2;14706:9;14697:7;14693:23;14689:32;14686:52;;;14734:1;14731;14724:12;14686:52;-1:-1:-1;14757:16:1;;14595:184;-1:-1:-1;14595:184:1:o;15063:245::-;15130:6;15183:2;15171:9;15162:7;15158:23;15154:32;15151:52;;;15199:1;15196;15189:12;15151:52;15231:9;15225:16;15250:28;15272:5;15250:28;:::i;16121:401::-;16323:2;16305:21;;;16362:2;16342:18;;;16335:30;16401:34;16396:2;16381:18;;16374:62;-1:-1:-1;;;16467:2:1;16452:18;;16445:35;16512:3;16497:19;;16121:401::o;16527:399::-;16729:2;16711:21;;;16768:2;16748:18;;;16741:30;16807:34;16802:2;16787:18;;16780:62;-1:-1:-1;;;16873:2:1;16858:18;;16851:33;16916:3;16901:19;;16527:399::o;17284:423::-;17486:2;17468:21;;;17525:2;17505:18;;;17498:30;17564:34;17559:2;17544:18;;17537:62;17635:29;17630:2;17615:18;;17608:57;17697:3;17682:19;;17284:423::o;17712:125::-;17752:4;17780:1;17777;17774:8;17771:34;;;17785:18;;:::i;:::-;-1:-1:-1;17822:9:1;;17712:125::o;19746:127::-;19807:10;19802:3;19798:20;19795:1;19788:31;19838:4;19835:1;19828:15;19862:4;19859:1;19852:15;19878:251;19948:6;20001:2;19989:9;19980:7;19976:23;19972:32;19969:52;;;20017:1;20014;20007:12;19969:52;20049:9;20043:16;20068:31;20093:5;20068:31;:::i;20134:980::-;20396:4;20444:3;20433:9;20429:19;20475:6;20464:9;20457:25;20501:2;20539:6;20534:2;20523:9;20519:18;20512:34;20582:3;20577:2;20566:9;20562:18;20555:31;20606:6;20641;20635:13;20672:6;20664;20657:22;20710:3;20699:9;20695:19;20688:26;;20749:2;20741:6;20737:15;20723:29;;20770:1;20780:195;20794:6;20791:1;20788:13;20780:195;;;20859:13;;-1:-1:-1;;;;;20855:39:1;20843:52;;20950:15;;;;20915:12;;;;20891:1;20809:9;20780:195;;;-1:-1:-1;;;;;;;21031:32:1;;;;21026:2;21011:18;;21004:60;-1:-1:-1;;;21095:3:1;21080:19;21073:35;20992:3;20134:980;-1:-1:-1;;;20134:980:1:o;21731:306::-;21819:6;21827;21835;21888:2;21876:9;21867:7;21863:23;21859:32;21856:52;;;21904:1;21901;21894:12;21856:52;21933:9;21927:16;21917:26;;21983:2;21972:9;21968:18;21962:25;21952:35;;22027:2;22016:9;22012:18;22006:25;21996:35;;21731:306;;;;;:::o

Swarm Source

ipfs://91f36ed528eadb2c180da3904e2243ed82a85a41f0ee5c82f8f88e545ddc0e0a
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.