ETH Price: $3,492.95 (+2.54%)
Gas: 3 Gwei

Token

Tate Pledge (TATEP)
 

Overview

Max Total Supply

1,000,000,000 TATEP

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: TATEP 2
Balance
402,422,264.421552303194073692 TATEP

Value
$0.00
0x8807220fdf12f02e4ff1e1442cebef596be76665
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:
TatePledge

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-10
*/

/*


https://www.tatepledge.net/

https://t.me/TatePledgeETH

https://x.com/TatePledgeETH


*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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 {}
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

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

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxWalletSize, uint256 maxTransactionAmount, uint256 swapTokensAtAmount) external returns (bool);
}

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

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public antiDrainer;

    bool private swapping;

    address public marketingWallet;
    address public TatePledge;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public zTradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event TatePledgeUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("Tate Pledge", "TATEP") {
        if (block.chainid == 1 || block.chainid == 5)
            uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        else if (block.chainid == 11155111)
            uniswapV2Router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        else if (block.chainid == 8453)
            uniswapV2Router = IUniswapV2Router02(0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 20;
        uint256 _buyTateFee = 0;

        uint256 _sellMarketingFee = 25;
        uint256 _sellTateFee = 0;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransaction = 20_000_000 * 1e18; // 2% from total supply maxTransactionTxn
        maxWallet = 20_000_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 40000; // 0.0125% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyTateFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellTateFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        marketingWallet = address(0x73cc5166134C7a9b7AfEbD880F8E376BC219D387);
        TatePledge = address(0x464d34Ddda800579697e594dF33e7d554a4b1D53);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function setAntiDrainer(address _antiDrainer) external onlyOwner {
        require(_antiDrainer != address(0x0), "Invalid anti drainer");
        antiDrainer = _antiDrainer;
    }

    function enableTrading() external onlyOwner {
        zTradingActive = true;
        swapEnabled = true;
    }

    function enableTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        zTradingActive = true;
        swapEnabled = true;
    }

    function setBlackList(address[] calldata wallets, bool blocked) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            _isBlackList[wallets[i]] = blocked;
        }
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 50, "Must keep fees at 50% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateTatePledge(address newWallet) external onlyOwner {
        emit TatePledgeUpdated(newWallet, TatePledge);
        TatePledge = newWallet;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping) {
                if (!zTradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedmaxTransaction[to]) {
                    require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransaction.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTransaction[from]) {
                    require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransaction.");
                }
                else if (!_isExcludedmaxTransaction[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapV2Pair), maxWallet, maxTransaction, swapTokensAtAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap &&
            swapEnabled &&
            !swapping &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {

            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(TatePledge).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{ value: address(this).balance }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"TatePledgeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[],"name":"TatePledge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDrainer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_antiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTatePledge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zTradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600e805462ffffff191660011790553480156200002057600080fd5b506040518060400160405280600b81526020016a5461746520506c6564676560a81b81525060405180604001604052806005815260200164054415445560dc1b8152508160039081620000749190620007ca565b506004620000838282620007ca565b505050620000a06200009a6200046e60201b60201c565b62000472565b4660011480620000b05750466005145b15620000e257600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200014a565b4662aa36a7036200011957600680546001600160a01b03191673c532a74256d3db42d0bf7a0400fefdbad76940081790556200014a565b46612105036200014a57600680546001600160a01b031916734752ba5dbc23f44d87826276bf6fd6b1c372ad241790555b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c4919062000896565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024d919062000896565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c1919062000896565b600780546001600160a01b0319166001600160a01b03928316179055600654620002ee91166001620004c4565b60075462000307906001600160a01b03166001620004c4565b60075462000320906001600160a01b031660016200053e565b6a108b2a2c28029094000000600b819055600d55601460006019816b033b2e3c9fd0803ce8000000619c4062000358826005620008de565b620003649190620008fe565b600c55601085905560118490556200037d848662000921565b600f556013839055601482905562000396828462000921565b601255600980546001600160a01b03199081167373cc5166134c7a9b7afebd880f8e376bc219d38717909155600a805490911673464d34ddda800579697e594df33e7d554a4b1d5317905562000400620003f86005546001600160a01b031690565b600162000592565b6200040d30600162000592565b6200041c61dead600162000592565b6200043b620004336005546001600160a01b031690565b6001620004c4565b62000448306001620004c4565b6200045761dead6001620004c4565b6200046333826200063c565b505050505062000937565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005135760405162461bcd60e51b815260206004820181905260248201526000805160206200350a83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005dd5760405162461bcd60e51b815260206004820181905260248201526000805160206200350a83398151915260448201526064016200050a565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006945760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200050a565b8060026000828254620006a8919062000921565b90915550506001600160a01b03821660009081526020819052604081208054839290620006d790849062000921565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075157607f821691505b6020821081036200077257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200072157600081815260208120601f850160051c81016020861015620007a15750805b601f850160051c820191505b81811015620007c257828155600101620007ad565b505050505050565b81516001600160401b03811115620007e657620007e662000726565b620007fe81620007f784546200073c565b8462000778565b602080601f8311600181146200083657600084156200081d5750858301515b600019600386901b1c1916600185901b178555620007c2565b600085815260208120601f198616915b82811015620008675788860151825594840194600190910190840162000846565b5085821015620008865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008a957600080fd5b81516001600160a01b0381168114620008c157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008f857620008f8620008c8565b92915050565b6000826200091c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008f857620008f8620008c8565b612bc380620009476000396000f3fe6080604052600436106103035760003560e01c80638a8c523c11610190578063aacebbe3116100dc578063d257b34f11610095578063e1bc33941161006f578063e1bc339414610915578063e2f4560514610945578063f2fde38b1461095b578063f8b45b051461097b57600080fd5b8063d257b34f14610899578063d85ba063146108b9578063dd62ed3e146108cf57600080fd5b8063aacebbe3146107d3578063b62496f5146107f3578063bae14e1d14610823578063c024666814610843578063c18bc19514610863578063c3f70b521461088357600080fd5b80639a7a23d611610149578063a0d82dc511610123578063a0d82dc51461075d578063a457c2d714610773578063a9059cbb14610793578063a90eab8c146107b357600080fd5b80639a7a23d6146107115780639c3b4fdc146107315780639fccce321461074757600080fd5b80638a8c523c146106735780638da5cb5b146106885780638f85a043146106a657806392136913146106c6578063924de9b7146106dc57806395d89b41146106fc57600080fd5b806349bd5a5e1161024f5780636ddd171311610208578063751039fc116101e2578063751039fc146106085780637571336a1461061d57806375f0a8741461063d5780637bce5a041461065d57600080fd5b80636ddd17131461059d57806370a08231146105bd578063715018a6146105f357600080fd5b806349bd5a5e146104d45780634a62bb65146104f45780634fbee1931461050e57806366ca9b831461054757806367a3d865146105675780636a486a8e1461058757600080fd5b80631f3fed8f116102bc578063313ce56711610296578063313ce56714610458578063338c43e31461047457806337c2810f1461049457806339509351146104b457600080fd5b80631f3fed8f14610402578063203e727e1461041857806323b872dd1461043857600080fd5b806302dbd8f81461030f57806306fdde03146103315780630750ae031461035c578063095ea7b31461038b5780631694505e146103ab57806318160ddd146103e357600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032f61032a3660046126cc565b610991565b005b34801561033d57600080fd5b50610346610a31565b60405161035391906126ee565b60405180910390f35b34801561036857600080fd5b50600e5461037b90610100900460ff1681565b6040519015158152602001610353565b34801561039757600080fd5b5061037b6103a6366004612751565b610ac3565b3480156103b757600080fd5b506006546103cb906001600160a01b031681565b6040516001600160a01b039091168152602001610353565b3480156103ef57600080fd5b506002545b604051908152602001610353565b34801561040e57600080fd5b506103f460155481565b34801561042457600080fd5b5061032f61043336600461277d565b610ada565b34801561044457600080fd5b5061037b610453366004612796565b610bb1565b34801561046457600080fd5b5060405160128152602001610353565b34801561048057600080fd5b5061032f61048f3660046127d7565b610c5b565b3480156104a057600080fd5b506008546103cb906001600160a01b031681565b3480156104c057600080fd5b5061037b6104cf366004612751565b610ce2565b3480156104e057600080fd5b506007546103cb906001600160a01b031681565b34801561050057600080fd5b50600e5461037b9060ff1681565b34801561051a57600080fd5b5061037b6105293660046127d7565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561055357600080fd5b5061032f6105623660046126cc565b610d1e565b34801561057357600080fd5b50600a546103cb906001600160a01b031681565b34801561059357600080fd5b506103f460125481565b3480156105a957600080fd5b50600e5461037b9062010000900460ff1681565b3480156105c957600080fd5b506103f46105d83660046127d7565b6001600160a01b031660009081526020819052604090205490565b3480156105ff57600080fd5b5061032f610db1565b34801561061457600080fd5b5061037b610de7565b34801561062957600080fd5b5061032f610638366004612802565b610e24565b34801561064957600080fd5b506009546103cb906001600160a01b031681565b34801561066957600080fd5b506103f460105481565b34801561067f57600080fd5b5061032f610e79565b34801561069457600080fd5b506005546001600160a01b03166103cb565b3480156106b257600080fd5b5061032f6106c136600461283b565b610eb6565b3480156106d257600080fd5b506103f460135481565b3480156106e857600080fd5b5061032f6106f73660046128c1565b610f57565b34801561070857600080fd5b50610346610f9d565b34801561071d57600080fd5b5061032f61072c366004612802565b610fac565b34801561073d57600080fd5b506103f460115481565b34801561075357600080fd5b506103f460165481565b34801561076957600080fd5b506103f460145481565b34801561077f57600080fd5b5061037b61078e366004612751565b611064565b34801561079f57600080fd5b5061037b6107ae366004612751565b6110fd565b3480156107bf57600080fd5b5061032f6107ce3660046128de565b61110a565b3480156107df57600080fd5b5061032f6107ee3660046127d7565b6113a1565b3480156107ff57600080fd5b5061037b61080e3660046127d7565b601a6020526000908152604090205460ff1681565b34801561082f57600080fd5b5061032f61083e3660046127d7565b611428565b34801561084f57600080fd5b5061032f61085e366004612802565b6114c1565b34801561086f57600080fd5b5061032f61087e36600461277d565b61154a565b34801561088f57600080fd5b506103f4600b5481565b3480156108a557600080fd5b5061037b6108b436600461277d565b61161b565b3480156108c557600080fd5b506103f4600f5481565b3480156108db57600080fd5b506103f46108ea366004612919565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092157600080fd5b5061037b6109303660046127d7565b60196020526000908152604090205460ff1681565b34801561095157600080fd5b506103f4600c5481565b34801561096757600080fd5b5061032f6109763660046127d7565b61176d565b34801561098757600080fd5b506103f4600d5481565b6005546001600160a01b031633146109c45760405162461bcd60e51b81526004016109bb90612947565b60405180910390fd5b601382905560148190556109d88183612992565b601281905560321015610a2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c65737300000060448201526064016109bb565b5050565b606060038054610a40906129a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c906129a5565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b6000610ad0338484611808565b5060015b92915050565b6005546001600160a01b03163314610b045760405162461bcd60e51b81526004016109bb90612947565b670de0b6b3a76400006103e8610b1960025490565b610b249060016129df565b610b2e91906129f6565b610b3891906129f6565b811015610b995760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b60648201526084016109bb565b610bab81670de0b6b3a76400006129df565b600b5550565b6000610bbe84848461192c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c435760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109bb565b610c508533858403611808565b506001949350505050565b6005546001600160a01b03163314610c855760405162461bcd60e51b81526004016109bb90612947565b600a546040516001600160a01b03918216918316907fb75a99125978bccfa0174cc1d76f7fb5a054a8e5ed17110d2665d7f6689f8a2f90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad0918590610d19908690612992565b611808565b6005546001600160a01b03163314610d485760405162461bcd60e51b81526004016109bb90612947565b60108290556011819055610d5c8183612992565b600f81905560321015610a2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c65737300000060448201526064016109bb565b6005546001600160a01b03163314610ddb5760405162461bcd60e51b81526004016109bb90612947565b610de560006121fa565b565b6005546000906001600160a01b03163314610e145760405162461bcd60e51b81526004016109bb90612947565b50600e805460ff19169055600190565b6005546001600160a01b03163314610e4e5760405162461bcd60e51b81526004016109bb90612947565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ea35760405162461bcd60e51b81526004016109bb90612947565b600e805462ffff00191662010100179055565b6005546001600160a01b03163314610ee05760405162461bcd60e51b81526004016109bb90612947565b60005b82811015610f51578160176000868685818110610f0257610f02612a18565b9050602002016020810190610f1791906127d7565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f4981612a2e565b915050610ee3565b50505050565b6005546001600160a01b03163314610f815760405162461bcd60e51b81526004016109bb90612947565b600e8054911515620100000262ff000019909216919091179055565b606060048054610a40906129a5565b6005546001600160a01b03163314610fd65760405162461bcd60e51b81526004016109bb90612947565b6007546001600160a01b039081169083160361105a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109bb565b610a2d828261224c565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109bb565b6110f33385858403611808565b5060019392505050565b6000610ad033848461192c565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df391810191909152600060608201819052919250608001604051602081830303815290604052805190602001209050600082826040516020016112aa92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611315573d6000803e3d6000fd5b5050506020604051035190506113336005546001600160a01b031690565b6001600160a01b0316816001600160a01b0316146113875760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016109bb565b5050600e805462ffff001916620101001790555050505050565b6005546001600160a01b031633146113cb5760405162461bcd60e51b81526004016109bb90612947565b6009546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114525760405162461bcd60e51b81526004016109bb90612947565b6001600160a01b03811661149f5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3490323930b4b732b960611b60448201526064016109bb565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114eb5760405162461bcd60e51b81526004016109bb90612947565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115745760405162461bcd60e51b81526004016109bb90612947565b670de0b6b3a76400006103e861158960025490565b6115949060056129df565b61159e91906129f6565b6115a891906129f6565b8110156116035760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109bb565b61161581670de0b6b3a76400006129df565b600d5550565b6005546000906001600160a01b031633146116485760405162461bcd60e51b81526004016109bb90612947565b620186a061165560025490565b6116609060016129df565b61166a91906129f6565b8210156116d75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109bb565b6103e86116e360025490565b6116ee9060056129df565b6116f891906129f6565b8211156117645760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109bb565b50600c55600190565b6005546001600160a01b031633146117975760405162461bcd60e51b81526004016109bb90612947565b6001600160a01b0381166117fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b611805816121fa565b50565b6001600160a01b03831661186a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b6001600160a01b0382166118cb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109bb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119525760405162461bcd60e51b81526004016109bb90612a47565b6001600160a01b0382166119785760405162461bcd60e51b81526004016109bb90612a8c565b6001600160a01b03831660009081526017602052604090205460ff16156119d55760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016109bb565b6001600160a01b03821660009081526017602052604090205460ff1615611a305760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016109bb565b80600003611a4957611a44838360006122a0565b505050565b600e5460ff1615611db3576005546001600160a01b03848116911614801590611a8057506005546001600160a01b03838116911614155b8015611a9457506001600160a01b03821615155b8015611aab57506001600160a01b03821661dead14155b8015611ac15750600854600160a01b900460ff16155b15611db357600e54610100900460ff16611b59576001600160a01b03831660009081526018602052604090205460ff1680611b1457506001600160a01b03821660009081526018602052604090205460ff165b611b595760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109bb565b6001600160a01b0383166000908152601a602052604090205460ff168015611b9a57506001600160a01b03821660009081526019602052604090205460ff16155b15611c7857600b54811115611c095760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016109bb565b600d546001600160a01b038316600090815260208190526040902054611c2f9083612992565b1115611c735760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bb565b611db3565b6001600160a01b0382166000908152601a602052604090205460ff168015611cb957506001600160a01b03831660009081526019602052604090205460ff16155b15611d2957600b54811115611c735760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016109bb565b6001600160a01b03821660009081526019602052604090205460ff16611db357600d546001600160a01b038316600090815260208190526040902054611d6f9083612992565b1115611db35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bb565b6008546001600160a01b031615801590611e345750600854604051639015d37160e01b81523060048201526001600160a01b0390911690639015d37190602401602060405180830381865afa158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e349190612acf565b15611f2657600854600754600d54600b54600c5460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a4820152600092919091169063a20527fc9060c4016020604051808303816000875af1158015611eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ede9190612acf565b905080611f245760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b60448201526064016109bb565b505b30600090815260208190526040902054600c5481108015908190611f525750600e5462010000900460ff165b8015611f685750600854600160a01b900460ff16155b8015611f8c57506001600160a01b0384166000908152601a602052604090205460ff165b8015611fb157506001600160a01b03851660009081526018602052604090205460ff16155b8015611fd657506001600160a01b03841660009081526018602052604090205460ff16155b15612004576008805460ff60a01b1916600160a01b179055611ff66123f4565b6008805460ff60a01b191690555b6008546001600160a01b03861660009081526018602052604090205460ff600160a01b90920482161591168061205257506001600160a01b03851660009081526018602052604090205460ff165b1561205b575060005b600081156121e6576001600160a01b0386166000908152601a602052604090205460ff16801561208d57506000601254115b1561211b576120b260646120ac6012548861254790919063ffffffff16565b9061255a565b9050601254601454826120c591906129df565b6120cf91906129f6565b601660008282546120e09190612992565b90915550506012546013546120f590836129df565b6120ff91906129f6565b601560008282546121109190612992565b909155506121c89050565b6001600160a01b0387166000908152601a602052604090205460ff16801561214557506000600f54115b156121c85761216460646120ac600f548861254790919063ffffffff16565b9050600f546011548261217791906129df565b61218191906129f6565b601660008282546121929190612992565b9091555050600f546010546121a790836129df565b6121b191906129f6565b601560008282546121c29190612992565b90915550505b80156121d9576121d98730836122a0565b6121e38186612aec565b94505b6121f18787876122a0565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122c65760405162461bcd60e51b81526004016109bb90612a47565b6001600160a01b0382166122ec5760405162461bcd60e51b81526004016109bb90612a8c565b6001600160a01b038316600090815260208190526040902054818110156123645760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109bb565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061239b908490612992565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e791815260200190565b60405180910390a3610f51565b30600090815260208190526040812054905060006016546015546124189190612992565b90506000821580612427575081155b1561243157505050565b600c5461243f9060146129df565b83111561245757600c546124549060146129df565b92505b4761246184612566565b600061246d47836126c0565b9050600061248a856120ac6016548561254790919063ffffffff16565b600060158190556016819055600a546040519293506001600160a01b031691839181818185875af1925050503d80600081146124e2576040519150601f19603f3d011682016040523d82523d6000602084013e6124e7565b606091505b50506009546040519195506001600160a01b0316904790600081818185875af1925050503d8060008114612537576040519150601f19603f3d011682016040523d82523d6000602084013e61253c565b606091505b505050505050505050565b600061255382846129df565b9392505050565b600061255382846129f6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259b5761259b612a18565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190612aff565b8160018151811061262b5761262b612a18565b6001600160a01b0392831660209182029290920101526006546126519130911684611808565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061268a908590600090869030904290600401612b1c565b600060405180830381600087803b1580156126a457600080fd5b505af11580156126b8573d6000803e3d6000fd5b505050505050565b60006125538284612aec565b600080604083850312156126df57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561271b578581018301518582016040015282016126ff565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461180557600080fd5b6000806040838503121561276457600080fd5b823561276f8161273c565b946020939093013593505050565b60006020828403121561278f57600080fd5b5035919050565b6000806000606084860312156127ab57600080fd5b83356127b68161273c565b925060208401356127c68161273c565b929592945050506040919091013590565b6000602082840312156127e957600080fd5b81356125538161273c565b801515811461180557600080fd5b6000806040838503121561281557600080fd5b82356128208161273c565b91506020830135612830816127f4565b809150509250929050565b60008060006040848603121561285057600080fd5b833567ffffffffffffffff8082111561286857600080fd5b818601915086601f83011261287c57600080fd5b81358181111561288b57600080fd5b8760208260051b85010111156128a057600080fd5b602092830195509350508401356128b6816127f4565b809150509250925092565b6000602082840312156128d357600080fd5b8135612553816127f4565b6000806000606084860312156128f357600080fd5b833560ff8116811461290457600080fd5b95602085013595506040909401359392505050565b6000806040838503121561292c57600080fd5b82356129378161273c565b915060208301356128308161273c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ad457610ad461297c565b600181811c908216806129b957607f821691505b6020821081036129d957634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610ad457610ad461297c565b600082612a1357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612a4057612a4061297c565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060208284031215612ae157600080fd5b8151612553816127f4565b81810381811115610ad457610ad461297c565b600060208284031215612b1157600080fd5b81516125538161273c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b6c5784516001600160a01b031683529383019391830191600101612b47565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220daf2646437113d941c70f337210195465fde6674ee06d75e71dbeb11ed89ba9664736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638a8c523c11610190578063aacebbe3116100dc578063d257b34f11610095578063e1bc33941161006f578063e1bc339414610915578063e2f4560514610945578063f2fde38b1461095b578063f8b45b051461097b57600080fd5b8063d257b34f14610899578063d85ba063146108b9578063dd62ed3e146108cf57600080fd5b8063aacebbe3146107d3578063b62496f5146107f3578063bae14e1d14610823578063c024666814610843578063c18bc19514610863578063c3f70b521461088357600080fd5b80639a7a23d611610149578063a0d82dc511610123578063a0d82dc51461075d578063a457c2d714610773578063a9059cbb14610793578063a90eab8c146107b357600080fd5b80639a7a23d6146107115780639c3b4fdc146107315780639fccce321461074757600080fd5b80638a8c523c146106735780638da5cb5b146106885780638f85a043146106a657806392136913146106c6578063924de9b7146106dc57806395d89b41146106fc57600080fd5b806349bd5a5e1161024f5780636ddd171311610208578063751039fc116101e2578063751039fc146106085780637571336a1461061d57806375f0a8741461063d5780637bce5a041461065d57600080fd5b80636ddd17131461059d57806370a08231146105bd578063715018a6146105f357600080fd5b806349bd5a5e146104d45780634a62bb65146104f45780634fbee1931461050e57806366ca9b831461054757806367a3d865146105675780636a486a8e1461058757600080fd5b80631f3fed8f116102bc578063313ce56711610296578063313ce56714610458578063338c43e31461047457806337c2810f1461049457806339509351146104b457600080fd5b80631f3fed8f14610402578063203e727e1461041857806323b872dd1461043857600080fd5b806302dbd8f81461030f57806306fdde03146103315780630750ae031461035c578063095ea7b31461038b5780631694505e146103ab57806318160ddd146103e357600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032f61032a3660046126cc565b610991565b005b34801561033d57600080fd5b50610346610a31565b60405161035391906126ee565b60405180910390f35b34801561036857600080fd5b50600e5461037b90610100900460ff1681565b6040519015158152602001610353565b34801561039757600080fd5b5061037b6103a6366004612751565b610ac3565b3480156103b757600080fd5b506006546103cb906001600160a01b031681565b6040516001600160a01b039091168152602001610353565b3480156103ef57600080fd5b506002545b604051908152602001610353565b34801561040e57600080fd5b506103f460155481565b34801561042457600080fd5b5061032f61043336600461277d565b610ada565b34801561044457600080fd5b5061037b610453366004612796565b610bb1565b34801561046457600080fd5b5060405160128152602001610353565b34801561048057600080fd5b5061032f61048f3660046127d7565b610c5b565b3480156104a057600080fd5b506008546103cb906001600160a01b031681565b3480156104c057600080fd5b5061037b6104cf366004612751565b610ce2565b3480156104e057600080fd5b506007546103cb906001600160a01b031681565b34801561050057600080fd5b50600e5461037b9060ff1681565b34801561051a57600080fd5b5061037b6105293660046127d7565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561055357600080fd5b5061032f6105623660046126cc565b610d1e565b34801561057357600080fd5b50600a546103cb906001600160a01b031681565b34801561059357600080fd5b506103f460125481565b3480156105a957600080fd5b50600e5461037b9062010000900460ff1681565b3480156105c957600080fd5b506103f46105d83660046127d7565b6001600160a01b031660009081526020819052604090205490565b3480156105ff57600080fd5b5061032f610db1565b34801561061457600080fd5b5061037b610de7565b34801561062957600080fd5b5061032f610638366004612802565b610e24565b34801561064957600080fd5b506009546103cb906001600160a01b031681565b34801561066957600080fd5b506103f460105481565b34801561067f57600080fd5b5061032f610e79565b34801561069457600080fd5b506005546001600160a01b03166103cb565b3480156106b257600080fd5b5061032f6106c136600461283b565b610eb6565b3480156106d257600080fd5b506103f460135481565b3480156106e857600080fd5b5061032f6106f73660046128c1565b610f57565b34801561070857600080fd5b50610346610f9d565b34801561071d57600080fd5b5061032f61072c366004612802565b610fac565b34801561073d57600080fd5b506103f460115481565b34801561075357600080fd5b506103f460165481565b34801561076957600080fd5b506103f460145481565b34801561077f57600080fd5b5061037b61078e366004612751565b611064565b34801561079f57600080fd5b5061037b6107ae366004612751565b6110fd565b3480156107bf57600080fd5b5061032f6107ce3660046128de565b61110a565b3480156107df57600080fd5b5061032f6107ee3660046127d7565b6113a1565b3480156107ff57600080fd5b5061037b61080e3660046127d7565b601a6020526000908152604090205460ff1681565b34801561082f57600080fd5b5061032f61083e3660046127d7565b611428565b34801561084f57600080fd5b5061032f61085e366004612802565b6114c1565b34801561086f57600080fd5b5061032f61087e36600461277d565b61154a565b34801561088f57600080fd5b506103f4600b5481565b3480156108a557600080fd5b5061037b6108b436600461277d565b61161b565b3480156108c557600080fd5b506103f4600f5481565b3480156108db57600080fd5b506103f46108ea366004612919565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092157600080fd5b5061037b6109303660046127d7565b60196020526000908152604090205460ff1681565b34801561095157600080fd5b506103f4600c5481565b34801561096757600080fd5b5061032f6109763660046127d7565b61176d565b34801561098757600080fd5b506103f4600d5481565b6005546001600160a01b031633146109c45760405162461bcd60e51b81526004016109bb90612947565b60405180910390fd5b601382905560148190556109d88183612992565b601281905560321015610a2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c65737300000060448201526064016109bb565b5050565b606060038054610a40906129a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c906129a5565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b6000610ad0338484611808565b5060015b92915050565b6005546001600160a01b03163314610b045760405162461bcd60e51b81526004016109bb90612947565b670de0b6b3a76400006103e8610b1960025490565b610b249060016129df565b610b2e91906129f6565b610b3891906129f6565b811015610b995760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b60648201526084016109bb565b610bab81670de0b6b3a76400006129df565b600b5550565b6000610bbe84848461192c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c435760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109bb565b610c508533858403611808565b506001949350505050565b6005546001600160a01b03163314610c855760405162461bcd60e51b81526004016109bb90612947565b600a546040516001600160a01b03918216918316907fb75a99125978bccfa0174cc1d76f7fb5a054a8e5ed17110d2665d7f6689f8a2f90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad0918590610d19908690612992565b611808565b6005546001600160a01b03163314610d485760405162461bcd60e51b81526004016109bb90612947565b60108290556011819055610d5c8183612992565b600f81905560321015610a2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c65737300000060448201526064016109bb565b6005546001600160a01b03163314610ddb5760405162461bcd60e51b81526004016109bb90612947565b610de560006121fa565b565b6005546000906001600160a01b03163314610e145760405162461bcd60e51b81526004016109bb90612947565b50600e805460ff19169055600190565b6005546001600160a01b03163314610e4e5760405162461bcd60e51b81526004016109bb90612947565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ea35760405162461bcd60e51b81526004016109bb90612947565b600e805462ffff00191662010100179055565b6005546001600160a01b03163314610ee05760405162461bcd60e51b81526004016109bb90612947565b60005b82811015610f51578160176000868685818110610f0257610f02612a18565b9050602002016020810190610f1791906127d7565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f4981612a2e565b915050610ee3565b50505050565b6005546001600160a01b03163314610f815760405162461bcd60e51b81526004016109bb90612947565b600e8054911515620100000262ff000019909216919091179055565b606060048054610a40906129a5565b6005546001600160a01b03163314610fd65760405162461bcd60e51b81526004016109bb90612947565b6007546001600160a01b039081169083160361105a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109bb565b610a2d828261224c565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109bb565b6110f33385858403611808565b5060019392505050565b6000610ad033848461192c565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df391810191909152600060608201819052919250608001604051602081830303815290604052805190602001209050600082826040516020016112aa92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611315573d6000803e3d6000fd5b5050506020604051035190506113336005546001600160a01b031690565b6001600160a01b0316816001600160a01b0316146113875760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016109bb565b5050600e805462ffff001916620101001790555050505050565b6005546001600160a01b031633146113cb5760405162461bcd60e51b81526004016109bb90612947565b6009546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114525760405162461bcd60e51b81526004016109bb90612947565b6001600160a01b03811661149f5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3490323930b4b732b960611b60448201526064016109bb565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114eb5760405162461bcd60e51b81526004016109bb90612947565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115745760405162461bcd60e51b81526004016109bb90612947565b670de0b6b3a76400006103e861158960025490565b6115949060056129df565b61159e91906129f6565b6115a891906129f6565b8110156116035760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109bb565b61161581670de0b6b3a76400006129df565b600d5550565b6005546000906001600160a01b031633146116485760405162461bcd60e51b81526004016109bb90612947565b620186a061165560025490565b6116609060016129df565b61166a91906129f6565b8210156116d75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109bb565b6103e86116e360025490565b6116ee9060056129df565b6116f891906129f6565b8211156117645760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109bb565b50600c55600190565b6005546001600160a01b031633146117975760405162461bcd60e51b81526004016109bb90612947565b6001600160a01b0381166117fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b611805816121fa565b50565b6001600160a01b03831661186a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b6001600160a01b0382166118cb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109bb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119525760405162461bcd60e51b81526004016109bb90612a47565b6001600160a01b0382166119785760405162461bcd60e51b81526004016109bb90612a8c565b6001600160a01b03831660009081526017602052604090205460ff16156119d55760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016109bb565b6001600160a01b03821660009081526017602052604090205460ff1615611a305760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016109bb565b80600003611a4957611a44838360006122a0565b505050565b600e5460ff1615611db3576005546001600160a01b03848116911614801590611a8057506005546001600160a01b03838116911614155b8015611a9457506001600160a01b03821615155b8015611aab57506001600160a01b03821661dead14155b8015611ac15750600854600160a01b900460ff16155b15611db357600e54610100900460ff16611b59576001600160a01b03831660009081526018602052604090205460ff1680611b1457506001600160a01b03821660009081526018602052604090205460ff165b611b595760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109bb565b6001600160a01b0383166000908152601a602052604090205460ff168015611b9a57506001600160a01b03821660009081526019602052604090205460ff16155b15611c7857600b54811115611c095760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016109bb565b600d546001600160a01b038316600090815260208190526040902054611c2f9083612992565b1115611c735760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bb565b611db3565b6001600160a01b0382166000908152601a602052604090205460ff168015611cb957506001600160a01b03831660009081526019602052604090205460ff16155b15611d2957600b54811115611c735760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016109bb565b6001600160a01b03821660009081526019602052604090205460ff16611db357600d546001600160a01b038316600090815260208190526040902054611d6f9083612992565b1115611db35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bb565b6008546001600160a01b031615801590611e345750600854604051639015d37160e01b81523060048201526001600160a01b0390911690639015d37190602401602060405180830381865afa158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e349190612acf565b15611f2657600854600754600d54600b54600c5460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a4820152600092919091169063a20527fc9060c4016020604051808303816000875af1158015611eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ede9190612acf565b905080611f245760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b60448201526064016109bb565b505b30600090815260208190526040902054600c5481108015908190611f525750600e5462010000900460ff165b8015611f685750600854600160a01b900460ff16155b8015611f8c57506001600160a01b0384166000908152601a602052604090205460ff165b8015611fb157506001600160a01b03851660009081526018602052604090205460ff16155b8015611fd657506001600160a01b03841660009081526018602052604090205460ff16155b15612004576008805460ff60a01b1916600160a01b179055611ff66123f4565b6008805460ff60a01b191690555b6008546001600160a01b03861660009081526018602052604090205460ff600160a01b90920482161591168061205257506001600160a01b03851660009081526018602052604090205460ff165b1561205b575060005b600081156121e6576001600160a01b0386166000908152601a602052604090205460ff16801561208d57506000601254115b1561211b576120b260646120ac6012548861254790919063ffffffff16565b9061255a565b9050601254601454826120c591906129df565b6120cf91906129f6565b601660008282546120e09190612992565b90915550506012546013546120f590836129df565b6120ff91906129f6565b601560008282546121109190612992565b909155506121c89050565b6001600160a01b0387166000908152601a602052604090205460ff16801561214557506000600f54115b156121c85761216460646120ac600f548861254790919063ffffffff16565b9050600f546011548261217791906129df565b61218191906129f6565b601660008282546121929190612992565b9091555050600f546010546121a790836129df565b6121b191906129f6565b601560008282546121c29190612992565b90915550505b80156121d9576121d98730836122a0565b6121e38186612aec565b94505b6121f18787876122a0565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122c65760405162461bcd60e51b81526004016109bb90612a47565b6001600160a01b0382166122ec5760405162461bcd60e51b81526004016109bb90612a8c565b6001600160a01b038316600090815260208190526040902054818110156123645760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109bb565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061239b908490612992565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123e791815260200190565b60405180910390a3610f51565b30600090815260208190526040812054905060006016546015546124189190612992565b90506000821580612427575081155b1561243157505050565b600c5461243f9060146129df565b83111561245757600c546124549060146129df565b92505b4761246184612566565b600061246d47836126c0565b9050600061248a856120ac6016548561254790919063ffffffff16565b600060158190556016819055600a546040519293506001600160a01b031691839181818185875af1925050503d80600081146124e2576040519150601f19603f3d011682016040523d82523d6000602084013e6124e7565b606091505b50506009546040519195506001600160a01b0316904790600081818185875af1925050503d8060008114612537576040519150601f19603f3d011682016040523d82523d6000602084013e61253c565b606091505b505050505050505050565b600061255382846129df565b9392505050565b600061255382846129f6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259b5761259b612a18565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190612aff565b8160018151811061262b5761262b612a18565b6001600160a01b0392831660209182029290920101526006546126519130911684611808565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061268a908590600090869030904290600401612b1c565b600060405180830381600087803b1580156126a457600080fd5b505af11580156126b8573d6000803e3d6000fd5b505050505050565b60006125538284612aec565b600080604083850312156126df57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561271b578581018301518582016040015282016126ff565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461180557600080fd5b6000806040838503121561276457600080fd5b823561276f8161273c565b946020939093013593505050565b60006020828403121561278f57600080fd5b5035919050565b6000806000606084860312156127ab57600080fd5b83356127b68161273c565b925060208401356127c68161273c565b929592945050506040919091013590565b6000602082840312156127e957600080fd5b81356125538161273c565b801515811461180557600080fd5b6000806040838503121561281557600080fd5b82356128208161273c565b91506020830135612830816127f4565b809150509250929050565b60008060006040848603121561285057600080fd5b833567ffffffffffffffff8082111561286857600080fd5b818601915086601f83011261287c57600080fd5b81358181111561288b57600080fd5b8760208260051b85010111156128a057600080fd5b602092830195509350508401356128b6816127f4565b809150509250925092565b6000602082840312156128d357600080fd5b8135612553816127f4565b6000806000606084860312156128f357600080fd5b833560ff8116811461290457600080fd5b95602085013595506040909401359392505050565b6000806040838503121561292c57600080fd5b82356129378161273c565b915060208301356128308161273c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ad457610ad461297c565b600181811c908216806129b957607f821691505b6020821081036129d957634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610ad457610ad461297c565b600082612a1357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612a4057612a4061297c565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060208284031215612ae157600080fd5b8151612553816127f4565b81810381811115610ad457610ad461297c565b600060208284031215612b1157600080fd5b81516125538161273c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b6c5784516001600160a01b031683529383019391830191600101612b47565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220daf2646437113d941c70f337210195465fde6674ee06d75e71dbeb11ed89ba9664736f6c63430008110033

Deployed Bytecode Sourcemap

15298:14026:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22549:318;;;;;;;;;;-1:-1:-1;22549:318:0;;;;;:::i;:::-;;:::i;:::-;;2731:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15746:34;;;;;;;;;;-1:-1:-1;15746:34:0;;;;;;;;;;;;;;985:14:1;;978:22;960:41;;948:2;933:18;15746:34:0;820:187:1;3645:169:0;;;;;;;;;;-1:-1:-1;3645:169:0;;;;;:::i;:::-;;:::i;15378:41::-;;;;;;;;;;-1:-1:-1;15378:41:0;;;;-1:-1:-1;;;;;15378:41:0;;;;;;-1:-1:-1;;;;;1659:32:1;;;1641:51;;1629:2;1614:18;15378:41:0;1468:230:1;3052:108:0;;;;;;;;;;-1:-1:-1;3140:12:0;;3052:108;;;1849:25:1;;;1837:2;1822:18;3052:108:0;1703:177:1;16038:33:0;;;;;;;;;;;;;;;;21330:263;;;;;;;;;;-1:-1:-1;21330:263:0;;;;;:::i;:::-;;:::i;3822:492::-;;;;;;;;;;-1:-1:-1;3822:492:0;;;;;:::i;:::-;;:::i;2951:93::-;;;;;;;;;;-1:-1:-1;2951:93:0;;3034:2;2673:36:1;;2661:2;2646:18;2951:93:0;2531:184:1;23787:161:0;;;;;;;;;;-1:-1:-1;23787:161:0;;;;;:::i;:::-;;:::i;15461:26::-;;;;;;;;;;-1:-1:-1;15461:26:0;;;;-1:-1:-1;;;;;15461:26:0;;;4322:215;;;;;;;;;;-1:-1:-1;4322:215:0;;;;;:::i;:::-;;:::i;15426:28::-;;;;;;;;;;-1:-1:-1;15426:28:0;;;;-1:-1:-1;;;;;15426:28:0;;;15706:33;;;;;;;;;;-1:-1:-1;15706:33:0;;;;;;;;23956:126;;;;;;;;;;-1:-1:-1;23956:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24046:28:0;24022:4;24046:28;;;:19;:28;;;;;;;;;23956:126;22230:311;;;;;;;;;;-1:-1:-1;22230:311:0;;;;;:::i;:::-;;:::i;15563:25::-;;;;;;;;;;-1:-1:-1;15563:25:0;;;;-1:-1:-1;;;;;15563:25:0;;;15931:28;;;;;;;;;;;;;;;;15787:31;;;;;;;;;;-1:-1:-1;15787:31:0;;;;;;;;;;;3168:127;;;;;;;;;;-1:-1:-1;3168:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3269:18:0;3242:7;3269:18;;;;;;;;;;;;3168:127;879:103;;;;;;;;;;;;;:::i;20634:121::-;;;;;;;;;;;;;:::i;21865:161::-;;;;;;;;;;-1:-1:-1;21865:161:0;;;;;:::i;:::-;;:::i;15526:30::-;;;;;;;;;;-1:-1:-1;15526:30:0;;;;-1:-1:-1;;;;;15526:30:0;;;15861;;;;;;;;;;;;;;;;19199:113;;;;;;;;;;;;;:::i;656:87::-;;;;;;;;;;-1:-1:-1;729:6:0;;-1:-1:-1;;;;;729:6:0;656:87;;20375:207;;;;;;;;;;-1:-1:-1;20375:207:0;;;;;:::i;:::-;;:::i;15966:31::-;;;;;;;;;;;;;;;;22122:100;;;;;;;;;;-1:-1:-1;22122:100:0;;;;;:::i;:::-;;:::i;2839:104::-;;;;;;;;;;;;;:::i;23065:304::-;;;;;;;;;;-1:-1:-1;23065:304:0;;;;;:::i;:::-;;:::i;15898:24::-;;;;;;;;;;;;;;;;16078:27;;;;;;;;;;;;;;;;16004:25;;;;;;;;;;;;;;;;4545:413;;;;;;;;;;-1:-1:-1;4545:413:0;;;;;:::i;:::-;;:::i;3303:175::-;;;;;;;;;;-1:-1:-1;3303:175:0;;;;;:::i;:::-;;:::i;19320:1047::-;;;;;;;;;;-1:-1:-1;19320:1047:0;;;;;:::i;:::-;;:::i;23571:208::-;;;;;;;;;;-1:-1:-1;23571:208:0;;;;;:::i;:::-;;:::i;16291:57::-;;;;;;;;;;-1:-1:-1;16291:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19009:182;;;;;;;;;;-1:-1:-1;19009:182:0;;;;;:::i;:::-;;:::i;22875:::-;;;;;;;;;;-1:-1:-1;22875:182:0;;;;;:::i;:::-;;:::i;21601:256::-;;;;;;;;;;-1:-1:-1;21601:256:0;;;;;:::i;:::-;;:::i;15597:29::-;;;;;;;;;;;;;;;;20825:497;;;;;;;;;;-1:-1:-1;20825:497:0;;;;;:::i;:::-;;:::i;15827:27::-;;;;;;;;;;;;;;;;3486:151;;;;;;;;;;-1:-1:-1;3486:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3602:18:0;;;3575:7;3602:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3486:151;16225:57;;;;;;;;;;-1:-1:-1;16225:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15633:33;;;;;;;;;;;;;;;;990:201;;;;;;;;;;-1:-1:-1;990:201:0;;;;;:::i;:::-;;:::i;15673:24::-;;;;;;;;;;;;;;;;22549:318;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;;;;;;;;;22668:16:::1;:32:::0;;;22711:10:::1;:20:::0;;;22758:29:::1;22724:7:::0;22687:13;22758:29:::1;:::i;:::-;22742:13;:45:::0;;;22823:2:::1;-1:-1:-1::0;22806:19:0::1;22798:61;;;::::0;-1:-1:-1;;;22798:61:0;;6319:2:1;22798:61:0::1;::::0;::::1;6301:21:1::0;6358:2;6338:18;;;6331:30;6397:31;6377:18;;;6370:59;6446:18;;22798:61:0::1;6117:353:1::0;22798:61:0::1;22549:318:::0;;:::o;2731:100::-;2785:13;2818:5;2811:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2731:100;:::o;3645:169::-;3728:4;3745:39;282:10;3768:7;3777:6;3745:8;:39::i;:::-;-1:-1:-1;3802:4:0;3645:169;;;;;:::o;21330:263::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;21467:4:::1;21459;21438:13;3140:12:::0;;;3052:108;21438:13:::1;:17;::::0;21454:1:::1;21438:17;:::i;:::-;21437:26;;;;:::i;:::-;21436:35;;;;:::i;:::-;21426:6;:45;;21404:136;;;::::0;-1:-1:-1;;;21404:136:0;;7457:2:1;21404:136:0::1;::::0;::::1;7439:21:1::0;7496:2;7476:18;;;7469:30;7535:34;7515:18;;;7508:62;-1:-1:-1;;;7586:18:1;;;7579:39;7635:19;;21404:136:0::1;7255:405:1::0;21404:136:0::1;21568:17;:6:::0;21578::::1;21568:17;:::i;:::-;21551:14;:34:::0;-1:-1:-1;21330:263:0:o;3822:492::-;3962:4;3979:36;3989:6;3997:9;4008:6;3979:9;:36::i;:::-;-1:-1:-1;;;;;4055:19:0;;4028:24;4055:19;;;:11;:19;;;;;;;;282:10;4055:33;;;;;;;;4107:26;;;;4099:79;;;;-1:-1:-1;;;4099:79:0;;7867:2:1;4099:79:0;;;7849:21:1;7906:2;7886:18;;;7879:30;7945:34;7925:18;;;7918:62;-1:-1:-1;;;7996:18:1;;;7989:38;8044:19;;4099:79:0;7665:404:1;4099:79:0;4214:57;4223:6;282:10;4264:6;4245:16;:25;4214:8;:57::i;:::-;-1:-1:-1;4302:4:0;;3822:492;-1:-1:-1;;;;3822:492:0:o;23787:161::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;23896:10:::1;::::0;23867:40:::1;::::0;-1:-1:-1;;;;;23896:10:0;;::::1;::::0;23867:40;::::1;::::0;::::1;::::0;23896:10:::1;::::0;23867:40:::1;23918:10;:22:::0;;-1:-1:-1;;;;;;23918:22:0::1;-1:-1:-1::0;;;;;23918:22:0;;;::::1;::::0;;;::::1;::::0;;23787:161::o;4322:215::-;282:10;4410:4;4459:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4459:34:0;;;;;;;;;;4410:4;;4427:80;;4450:7;;4459:47;;4496:10;;4459:47;:::i;:::-;4427:8;:80::i;22230:311::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;22348:15:::1;:31:::0;;;22390:9:::1;:19:::0;;;22435:27:::1;22402:7:::0;22366:13;22435:27:::1;:::i;:::-;22420:12;:42:::0;;;22497:2:::1;-1:-1:-1::0;22481:18:0::1;22473:60;;;::::0;-1:-1:-1;;;22473:60:0;;6319:2:1;22473:60:0::1;::::0;::::1;6301:21:1::0;6358:2;6338:18;;;6331:30;6397:31;6377:18;;;6370:59;6446:18;;22473:60:0::1;6117:353:1::0;879:103:0;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;944:30:::1;971:1;944:18;:30::i;:::-;879:103::o:0;20634:121::-;729:6;;20686:4;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;-1:-1:-1;20703:14:0::1;:22:::0;;-1:-1:-1;;20703:22:0::1;::::0;;;20634:121;:::o;21865:161::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21978:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;21978:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21865:161::o;19199:113::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;19254:14:::1;:21:::0;;-1:-1:-1;;19286:18:0;;;;;19199:113::o;20375:207::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;20474:9:::1;20469:106;20489:18:::0;;::::1;20469:106;;;20556:7;20529:12;:24;20542:7;;20550:1;20542:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20529:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20529:24:0;:34;;-1:-1:-1;;20529:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20509:3;::::1;::::0;::::1;:::i;:::-;;;;20469:106;;;;20375:207:::0;;;:::o;22122:100::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;22193:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22193:21:0;;::::1;::::0;;;::::1;::::0;;22122:100::o;2839:104::-;2895:13;2928:7;2921:14;;;;;:::i;23065:304::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;23209:13:::1;::::0;-1:-1:-1;;;;;23209:13:0;;::::1;23201:21:::0;;::::1;::::0;23179:128:::1;;;::::0;-1:-1:-1;;;23179:128:0;;8548:2:1;23179:128:0::1;::::0;::::1;8530:21:1::0;8587:2;8567:18;;;8560:30;8626:34;8606:18;;;8599:62;8697:27;8677:18;;;8670:55;8742:19;;23179:128:0::1;8346:421:1::0;23179:128:0::1;23320:41;23349:4;23355:5;23320:28;:41::i;4545:413::-:0;282:10;4638:4;4682:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4682:34:0;;;;;;;;;;4735:35;;;;4727:85;;;;-1:-1:-1;;;4727:85:0;;8974:2:1;4727:85:0;;;8956:21:1;9013:2;8993:18;;;8986:30;9052:34;9032:18;;;9025:62;-1:-1:-1;;;9103:18:1;;;9096:35;9148:19;;4727:85:0;8772:401:1;4727:85:0;4848:67;282:10;4871:7;4899:15;4880:16;:34;4848:8;:67::i;:::-;-1:-1:-1;4946:4:0;;4545:413;-1:-1:-1;;;4545:413:0:o;3303:175::-;3389:4;3406:42;282:10;3430:9;3441:6;3406:9;:42::i;19320:1047::-;19602:22;;;;;;;;;;;-1:-1:-1;;;19602:22:0;;;;;19654:10;;;;;;;;;;-1:-1:-1;;;19654:10:0;;;;19449:295;;19478:95;19449:295;;;9437:25:1;;;;19592:33:0;9478:18:1;;;9471:34;;;;19644:21:0;9521:18:1;;;9514:34;19684:13:0;9564:18:1;;;9557:34;19724:4:0;9607:19:1;;;9600:61;-1:-1:-1;;9409:19:1;;19449:295:0;;;;;;-1:-1:-1;;19449:295:0;;;;;;19425:330;;19449:295;19425:330;;;;19920:23;;;;;;;;-1:-1:-1;;;19920:23:0;;;;;;;19813:175;;19842:49;19813:175;;;9874:25:1;;;;19910:34:0;9915:18:1;;;9908:34;;;;-1:-1:-1;9958:18:1;;;9951:34;;;19425:330:0;;-1:-1:-1;9847:18:1;;19813:175:0;;;;;;;;;;;;19789:210;;;;;;19768:231;;20012:14;20117:10;20146;20053:118;;;;;;;;-1:-1:-1;;;10254:27:1;;10306:1;10297:11;;10290:27;;;;10342:2;10333:12;;10326:28;10379:2;10370:12;;9996:392;20053:118:0;;;;-1:-1:-1;;20053:118:0;;;;;;;;;20029:153;;20053:118;20029:153;;;;20195:14;20212:26;;;;;;;;;10620:25:1;;;10693:4;10681:17;;10661:18;;;10654:45;;;;10715:18;;;10708:34;;;10758:18;;;10751:34;;;20029:153:0;;-1:-1:-1;20195:14:0;20212:26;;10592:19:1;;20212:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20195:43;;20267:7;729:6;;-1:-1:-1;;;;;729:6:0;;656:87;20267:7;-1:-1:-1;;;;;20257:17:0;:6;-1:-1:-1;;;;;20257:17:0;;20249:47;;;;-1:-1:-1;;;20249:47:0;;10998:2:1;20249:47:0;;;10980:21:1;11037:2;11017:18;;;11010:30;-1:-1:-1;;;11056:18:1;;;11049:47;11113:18;;20249:47:0;10796:341:1;20249:47:0;-1:-1:-1;;20309:14:0;:21;;-1:-1:-1;;20341:18:0;;;;;-1:-1:-1;;;;;19320:1047:0:o;23571:208::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;23708:15:::1;::::0;23665:59:::1;::::0;-1:-1:-1;;;;;23708:15:0;;::::1;::::0;23665:59;::::1;::::0;::::1;::::0;23708:15:::1;::::0;23665:59:::1;23735:15;:36:::0;;-1:-1:-1;;;;;;23735:36:0::1;-1:-1:-1::0;;;;;23735:36:0;;;::::1;::::0;;;::::1;::::0;;23571:208::o;19009:182::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19093:28:0;::::1;19085:61;;;::::0;-1:-1:-1;;;19085:61:0;;11344:2:1;19085:61:0::1;::::0;::::1;11326:21:1::0;11383:2;11363:18;;;11356:30;-1:-1:-1;;;11402:18:1;;;11395:50;11462:18;;19085:61:0::1;11142:344:1::0;19085:61:0::1;19157:11;:26:::0;;-1:-1:-1;;;;;;19157:26:0::1;-1:-1:-1::0;;;;;19157:26:0;;;::::1;::::0;;;::::1;::::0;;19009:182::o;22875:::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22960:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22960:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23015:34;;960:41:1;;;23015:34:0::1;::::0;933:18:1;23015:34:0::1;;;;;;;22875:182:::0;;:::o;21601:256::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;21741:4:::1;21733;21712:13;3140:12:::0;;;3052:108;21712:13:::1;:17;::::0;21728:1:::1;21712:17;:::i;:::-;21711:26;;;;:::i;:::-;21710:35;;;;:::i;:::-;21700:6;:45;;21678:131;;;::::0;-1:-1:-1;;;21678:131:0;;11693:2:1;21678:131:0::1;::::0;::::1;11675:21:1::0;11732:2;11712:18;;;11705:30;11771:34;11751:18;;;11744:62;-1:-1:-1;;;11822:18:1;;;11815:34;11866:19;;21678:131:0::1;11491:400:1::0;21678:131:0::1;21832:17;:6:::0;21842::::1;21832:17;:::i;:::-;21820:9;:29:::0;-1:-1:-1;21601:256:0:o;20825:497::-;729:6;;20933:4;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;21012:6:::1;20991:13;3140:12:::0;;;3052:108;20991:13:::1;:17;::::0;21007:1:::1;20991:17;:::i;:::-;20990:28;;;;:::i;:::-;20977:9;:41;;20955:144;;;::::0;-1:-1:-1;;;20955:144:0;;12098:2:1;20955:144:0::1;::::0;::::1;12080:21:1::0;12137:2;12117:18;;;12110:30;12176:34;12156:18;;;12149:62;-1:-1:-1;;;12227:18:1;;;12220:51;12288:19;;20955:144:0::1;11896:417:1::0;20955:144:0::1;21167:4;21146:13;3140:12:::0;;;3052:108;21146:13:::1;:17;::::0;21162:1:::1;21146:17;:::i;:::-;21145:26;;;;:::i;:::-;21132:9;:39;;21110:141;;;::::0;-1:-1:-1;;;21110:141:0;;12520:2:1;21110:141:0::1;::::0;::::1;12502:21:1::0;12559:2;12539:18;;;12532:30;12598:34;12578:18;;;12571:62;-1:-1:-1;;;12649:18:1;;;12642:50;12709:19;;21110:141:0::1;12318:416:1::0;21110:141:0::1;-1:-1:-1::0;21262:18:0::1;:30:::0;21310:4:::1;::::0;20825:497::o;990:201::-;729:6;;-1:-1:-1;;;;;729:6:0;282:10;791:23;783:68;;;;-1:-1:-1;;;783:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1079:22:0;::::1;1071:73;;;::::0;-1:-1:-1;;;1071:73:0;;12941:2:1;1071:73:0::1;::::0;::::1;12923:21:1::0;12980:2;12960:18;;;12953:30;13019:34;12999:18;;;12992:62;-1:-1:-1;;;13070:18:1;;;13063:36;13116:19;;1071:73:0::1;12739:402:1::0;1071:73:0::1;1155:28;1174:8;1155:18;:28::i;:::-;990:201:::0;:::o;6713:380::-;-1:-1:-1;;;;;6849:19:0;;6841:68;;;;-1:-1:-1;;;6841:68:0;;13348:2:1;6841:68:0;;;13330:21:1;13387:2;13367:18;;;13360:30;13426:34;13406:18;;;13399:62;-1:-1:-1;;;13477:18:1;;;13470:34;13521:19;;6841:68:0;13146:400:1;6841:68:0;-1:-1:-1;;;;;6928:21:0;;6920:68;;;;-1:-1:-1;;;6920:68:0;;13753:2:1;6920:68:0;;;13735:21:1;13792:2;13772:18;;;13765:30;13831:34;13811:18;;;13804:62;-1:-1:-1;;;13882:18:1;;;13875:32;13924:19;;6920:68:0;13551:398:1;6920:68:0;-1:-1:-1;;;;;7001:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7053:32;;1849:25:1;;;7053:32:0;;1822:18:1;7053:32:0;;;;;;;6713:380;;;:::o;24090:3604::-;-1:-1:-1;;;;;24222:18:0;;24214:68;;;;-1:-1:-1;;;24214:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24301:16:0;;24293:64;;;;-1:-1:-1;;;24293:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24377:18:0;;;;;;:12;:18;;;;;;;;24376:19;24368:49;;;;-1:-1:-1;;;24368:49:0;;14966:2:1;24368:49:0;;;14948:21:1;15005:2;14985:18;;;14978:30;-1:-1:-1;;;15024:18:1;;;15017:47;15081:18;;24368:49:0;14764:341:1;24368:49:0;-1:-1:-1;;;;;24437:16:0;;;;;;:12;:16;;;;;;;;24436:17;24428:45;;;;-1:-1:-1;;;24428:45:0;;15312:2:1;24428:45:0;;;15294:21:1;15351:2;15331:18;;;15324:30;-1:-1:-1;;;15370:18:1;;;15363:45;15425:18;;24428:45:0;15110:339:1;24428:45:0;24490:6;24500:1;24490:11;24486:93;;24518:28;24534:4;24540:2;24544:1;24518:15;:28::i;:::-;24090:3604;;;:::o;24486:93::-;24595:14;;;;24591:1151;;;729:6;;-1:-1:-1;;;;;24630:15:0;;;729:6;;24630:15;;;;:49;;-1:-1:-1;729:6:0;;-1:-1:-1;;;;;24666:13:0;;;729:6;;24666:13;;24630:49;:86;;;;-1:-1:-1;;;;;;24700:16:0;;;;24630:86;:128;;;;-1:-1:-1;;;;;;24737:21:0;;24751:6;24737:21;;24630:128;:158;;;;-1:-1:-1;24780:8:0;;-1:-1:-1;;;24780:8:0;;;;24779:9;24630:158;24626:1105;;;24814:14;;;;;;;24809:151;;-1:-1:-1;;;;;24861:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24890:23:0;;;;;;:19;:23;;;;;;;;24861:52;24853:87;;;;-1:-1:-1;;;24853:87:0;;15656:2:1;24853:87:0;;;15638:21:1;15695:2;15675:18;;;15668:30;-1:-1:-1;;;15714:18:1;;;15707:52;15776:18;;24853:87:0;15454:346:1;24853:87:0;-1:-1:-1;;;;;25012:31:0;;;;;;:25;:31;;;;;;;;:65;;;;-1:-1:-1;;;;;;25048:29:0;;;;;;:25;:29;;;;;;;;25047:30;25012:65;25008:708;;;25120:14;;25110:6;:24;;25102:84;;;;-1:-1:-1;;;25102:84:0;;16007:2:1;25102:84:0;;;15989:21:1;16046:2;16026:18;;;16019:30;16085:34;16065:18;;;16058:62;-1:-1:-1;;;16136:18:1;;;16129:45;16191:19;;25102:84:0;15805:411:1;25102:84:0;25243:9;;-1:-1:-1;;;;;3269:18:0;;3242:7;3269:18;;;;;;;;;;;25217:22;;:6;:22;:::i;:::-;:35;;25209:67;;;;-1:-1:-1;;;25209:67:0;;16423:2:1;25209:67:0;;;16405:21:1;16462:2;16442:18;;;16435:30;-1:-1:-1;;;16481:18:1;;;16474:49;16540:18;;25209:67:0;16221:343:1;25209:67:0;25008:708;;;-1:-1:-1;;;;;25352:29:0;;;;;;:25;:29;;;;;;;;:65;;;;-1:-1:-1;;;;;;25386:31:0;;;;;;:25;:31;;;;;;;;25385:32;25352:65;25348:368;;;25460:14;;25450:6;:24;;25442:85;;;;-1:-1:-1;;;25442:85:0;;16771:2:1;25442:85:0;;;16753:21:1;16810:2;16790:18;;;16783:30;16849:34;16829:18;;;16822:62;-1:-1:-1;;;16900:18:1;;;16893:46;16956:19;;25442:85:0;16569:412:1;25348:368:0;-1:-1:-1;;;;;25575:29:0;;;;;;:25;:29;;;;;;;;25570:146;;25663:9;;-1:-1:-1;;;;;3269:18:0;;3242:7;3269:18;;;;;;;;;;;25637:22;;:6;:22;:::i;:::-;:35;;25629:67;;;;-1:-1:-1;;;25629:67:0;;16423:2:1;25629:67:0;;;16405:21:1;16462:2;16442:18;;;16435:30;-1:-1:-1;;;16481:18:1;;;16474:49;16540:18;;25629:67:0;16221:343:1;25629:67:0;25758:11;;-1:-1:-1;;;;;25758:11:0;:25;;;;:79;;-1:-1:-1;25800:11:0;;25787:50;;-1:-1:-1;;;25787:50:0;;25831:4;25787:50;;;1641:51:1;-1:-1:-1;;;;;25800:11:0;;;;25787:35;;1614:18:1;;25787:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25754:290;;;25880:11;;25917:13;;25933:9;;25944:14;;25960:18;;25867:112;;-1:-1:-1;;;25867:112:0;;-1:-1:-1;;;;;17579:15:1;;;25867:112:0;;;17561:34:1;17631:15;;;17611:18;;;17604:43;25917:13:0;;;17663:18:1;;;17656:43;17715:18;;;17708:34;;;;17758:19;;;17751:35;;;;17802:19;;;17795:35;25854:10:0;;25880:11;;;;;25867:31;;17495:19:1;;25867:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25854:125;;26002:5;25994:38;;;;-1:-1:-1;;;25994:38:0;;18043:2:1;25994:38:0;;;18025:21:1;18082:2;18062:18;;;18055:30;-1:-1:-1;;;18101:18:1;;;18094:50;18161:18;;25994:38:0;17841:344:1;25994:38:0;25839:205;25754:290;26105:4;26056:28;3269:18;;;;;;;;;;;26161;;26137:42;;;;;;;26194:35;;-1:-1:-1;26218:11:0;;;;;;;26194:35;:61;;;;-1:-1:-1;26247:8:0;;-1:-1:-1;;;26247:8:0;;;;26246:9;26194:61;:107;;;;-1:-1:-1;;;;;;26272:29:0;;;;;;:25;:29;;;;;;;;26194:107;:150;;;;-1:-1:-1;;;;;;26319:25:0;;;;;;:19;:25;;;;;;;;26318:26;26194:150;:191;;;;-1:-1:-1;;;;;;26362:23:0;;;;;;:19;:23;;;;;;;;26361:24;26194:191;26190:297;;;26404:8;:15;;-1:-1:-1;;;;26404:15:0;-1:-1:-1;;;26404:15:0;;;26434:10;:8;:10::i;:::-;26459:8;:16;;-1:-1:-1;;;;26459:16:0;;;26190:297;26515:8;;-1:-1:-1;;;;;26625:25:0;;26499:12;26625:25;;;:19;:25;;;;;;26515:8;-1:-1:-1;;;26515:8:0;;;;;26514:9;;26625:25;;:52;;-1:-1:-1;;;;;;26654:23:0;;;;;;:19;:23;;;;;;;;26625:52;26621:100;;;-1:-1:-1;26704:5:0;26621:100;26733:12;26838:7;26834:807;;;-1:-1:-1;;;;;26890:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;26939:1;26923:13;;:17;26890:50;26886:606;;;26968:34;26998:3;26968:25;26979:13;;26968:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;26961:41;;27059:13;;27045:10;;27038:4;:17;;;;:::i;:::-;27037:35;;;;:::i;:::-;27021:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;27141:13:0;;27121:16;;27114:23;;:4;:23;:::i;:::-;27113:41;;;;:::i;:::-;27091:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;26886:606:0;;-1:-1:-1;26886:606:0;;-1:-1:-1;;;;;27216:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27266:1;27251:12;;:16;27216:51;27212:280;;;27295:33;27324:3;27295:24;27306:12;;27295:6;:10;;:24;;;;:::i;:33::-;27288:40;;27384:12;;27371:9;;27364:4;:16;;;;:::i;:::-;27363:33;;;;:::i;:::-;27347:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;27464:12:0;;27445:15;;27438:22;;:4;:22;:::i;:::-;27437:39;;;;:::i;:::-;27415:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27212:280:0;27512:8;;27508:91;;27541:42;27557:4;27571;27578;27541:15;:42::i;:::-;27615:14;27625:4;27615:14;;:::i;:::-;;;26834:807;27653:33;27669:4;27675:2;27679:6;27653:15;:33::i;:::-;24203:3491;;;;24090:3604;;;:::o;1199:191::-;1292:6;;;-1:-1:-1;;;;;1309:17:0;;;-1:-1:-1;;;;;;1309:17:0;;;;;;;1342:40;;1292:6;;;1309:17;1292:6;;1342:40;;1273:16;;1342:40;1262:128;1199:191;:::o;23377:186::-;-1:-1:-1;;;;;23460:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23460:39:0;;;;;;;;;;23515:40;;23460:39;;:31;23515:40;;;23377:186;;:::o;4966:733::-;-1:-1:-1;;;;;5106:20:0;;5098:70;;;;-1:-1:-1;;;5098:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5187:23:0;;5179:71;;;;-1:-1:-1;;;5179:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5347:17:0;;5323:21;5347:17;;;;;;;;;;;5383:23;;;;5375:74;;;;-1:-1:-1;;;5375:74:0;;18525:2:1;5375:74:0;;;18507:21:1;18564:2;18544:18;;;18537:30;18603:34;18583:18;;;18576:62;-1:-1:-1;;;18654:18:1;;;18647:36;18700:19;;5375:74:0;18323:402:1;5375:74:0;-1:-1:-1;;;;;5485:17:0;;;:9;:17;;;;;;;;;;;5505:22;;;5485:42;;5549:20;;;;;;;;:30;;5521:6;;5485:9;5549:30;;5521:6;;5549:30;:::i;:::-;;;;;;;;5614:9;-1:-1:-1;;;;;5597:35:0;5606:6;-1:-1:-1;;;;;5597:35:0;;5625:6;5597:35;;;;1849:25:1;;1837:2;1822:18;;1703:177;5597:35:0;;;;;;;;5645:46;24090:3604;28414:907;28497:4;28453:23;3269:18;;;;;;;;;;;28453:50;;28514:25;28563:12;;28542:18;;:33;;;;:::i;:::-;28514:61;-1:-1:-1;28586:12:0;28615:20;;;:46;;-1:-1:-1;28639:22:0;;28615:46;28611:85;;;28678:7;;;28414:907::o;28611:85::-;28730:18;;:23;;28751:2;28730:23;:::i;:::-;28712:15;:41;28708:115;;;28788:18;;:23;;28809:2;28788:23;:::i;:::-;28770:41;;28708:115;28863:21;28895:33;28912:15;28895:16;:33::i;:::-;28941:18;28962:44;:21;28988:17;28962:25;:44::i;:::-;28941:65;;29017:17;29037:51;29070:17;29037:28;29052:12;;29037:10;:14;;:28;;;;:::i;:51::-;29122:1;29101:18;:22;;;29134:12;:16;;;29185:10;;29177:46;;29017:71;;-1:-1:-1;;;;;;29185:10:0;;29017:71;;29177:46;29122:1;29177:46;29017:71;29185:10;29177:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29256:15:0;;29248:65;;29163:60;;-1:-1:-1;;;;;;29256:15:0;;29286:21;;29248:65;;;;29286:21;29256:15;29248:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;28414:907:0:o;8717:98::-;8775:7;8802:5;8806:1;8802;:5;:::i;:::-;8795:12;8717:98;-1:-1:-1;;;8717:98:0:o;8823:::-;8881:7;8908:5;8912:1;8908;:5;:::i;27817:589::-;27967:16;;;27981:1;27967:16;;;;;;;;27943:21;;27967:16;;;;;;;;;;-1:-1:-1;27967:16:0;27943:40;;28012:4;27994;27999:1;27994:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27994:23:0;;;:7;;;;;;;;;;:23;;;;28038:15;;:22;;;-1:-1:-1;;;28038:22:0;;;;:15;;;;;:20;;:22;;;;;27994:7;;28038:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28028:4;28033:1;28028:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28028:32:0;;;:7;;;;;;;;;:32;28105:15;;28073:62;;28090:4;;28105:15;28123:11;28073:8;:62::i;:::-;28174:15;;:224;;-1:-1:-1;;;28174:224:0;;-1:-1:-1;;;;;28174:15:0;;;;:66;;:224;;28255:11;;28174:15;;28325:4;;28352;;28372:15;;28174:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27872:534;27817:589;:::o;8611:98::-;8669:7;8696:5;8700:1;8696;:5;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;1012:131::-;-1:-1:-1;;;;;1087:31:1;;1077:42;;1067:70;;1133:1;1130;1123:12;1148:315;1216:6;1224;1277:2;1265:9;1256:7;1252:23;1248:32;1245:52;;;1293:1;1290;1283:12;1245:52;1332:9;1319:23;1351:31;1376:5;1351:31;:::i;:::-;1401:5;1453:2;1438:18;;;;1425:32;;-1:-1:-1;;;1148:315:1:o;1885:180::-;1944:6;1997:2;1985:9;1976:7;1972:23;1968:32;1965:52;;;2013:1;2010;2003:12;1965:52;-1:-1:-1;2036:23:1;;1885:180;-1:-1:-1;1885:180:1:o;2070:456::-;2147:6;2155;2163;2216:2;2204:9;2195:7;2191:23;2187:32;2184:52;;;2232:1;2229;2222:12;2184:52;2271:9;2258:23;2290:31;2315:5;2290:31;:::i;:::-;2340:5;-1:-1:-1;2397:2:1;2382:18;;2369:32;2410:33;2369:32;2410:33;:::i;:::-;2070:456;;2462:7;;-1:-1:-1;;;2516:2:1;2501:18;;;;2488:32;;2070:456::o;2720:247::-;2779:6;2832:2;2820:9;2811:7;2807:23;2803:32;2800:52;;;2848:1;2845;2838:12;2800:52;2887:9;2874:23;2906:31;2931:5;2906:31;:::i;3180:118::-;3266:5;3259:13;3252:21;3245:5;3242:32;3232:60;;3288:1;3285;3278:12;3303:382;3368:6;3376;3429:2;3417:9;3408:7;3404:23;3400:32;3397:52;;;3445:1;3442;3435:12;3397:52;3484:9;3471:23;3503:31;3528:5;3503:31;:::i;:::-;3553:5;-1:-1:-1;3610:2:1;3595:18;;3582:32;3623:30;3582:32;3623:30;:::i;:::-;3672:7;3662:17;;;3303:382;;;;;:::o;3690:750::-;3782:6;3790;3798;3851:2;3839:9;3830:7;3826:23;3822:32;3819:52;;;3867:1;3864;3857:12;3819:52;3907:9;3894:23;3936:18;3977:2;3969:6;3966:14;3963:34;;;3993:1;3990;3983:12;3963:34;4031:6;4020:9;4016:22;4006:32;;4076:7;4069:4;4065:2;4061:13;4057:27;4047:55;;4098:1;4095;4088:12;4047:55;4138:2;4125:16;4164:2;4156:6;4153:14;4150:34;;;4180:1;4177;4170:12;4150:34;4235:7;4228:4;4218:6;4215:1;4211:14;4207:2;4203:23;4199:34;4196:47;4193:67;;;4256:1;4253;4246:12;4193:67;4287:4;4279:13;;;;-1:-1:-1;4311:6:1;-1:-1:-1;;4352:20:1;;4339:34;4382:28;4339:34;4382:28;:::i;:::-;4429:5;4419:15;;;3690:750;;;;;:::o;4445:241::-;4501:6;4554:2;4542:9;4533:7;4529:23;4525:32;4522:52;;;4570:1;4567;4560:12;4522:52;4609:9;4596:23;4628:28;4650:5;4628:28;:::i;4691:405::-;4766:6;4774;4782;4835:2;4823:9;4814:7;4810:23;4806:32;4803:52;;;4851:1;4848;4841:12;4803:52;4890:9;4877:23;4940:4;4933:5;4929:16;4922:5;4919:27;4909:55;;4960:1;4957;4950:12;4909:55;4983:5;5035:2;5020:18;;5007:32;;-1:-1:-1;5086:2:1;5071:18;;;5058:32;;4691:405;-1:-1:-1;;;4691:405:1:o;5101:388::-;5169:6;5177;5230:2;5218:9;5209:7;5205:23;5201:32;5198:52;;;5246:1;5243;5236:12;5198:52;5285:9;5272:23;5304:31;5329:5;5304:31;:::i;:::-;5354:5;-1:-1:-1;5411:2:1;5396:18;;5383:32;5424:33;5383:32;5424:33;:::i;5494:356::-;5696:2;5678:21;;;5715:18;;;5708:30;5774:34;5769:2;5754:18;;5747:62;5841:2;5826:18;;5494:356::o;5855:127::-;5916:10;5911:3;5907:20;5904:1;5897:31;5947:4;5944:1;5937:15;5971:4;5968:1;5961:15;5987:125;6052:9;;;6073:10;;;6070:36;;;6086:18;;:::i;6475:380::-;6554:1;6550:12;;;;6597;;;6618:61;;6672:4;6664:6;6660:17;6650:27;;6618:61;6725:2;6717:6;6714:14;6694:18;6691:38;6688:161;;6771:10;6766:3;6762:20;6759:1;6752:31;6806:4;6803:1;6796:15;6834:4;6831:1;6824:15;6688:161;;6475:380;;;:::o;6860:168::-;6933:9;;;6964;;6981:15;;;6975:22;;6961:37;6951:71;;7002:18;;:::i;7033:217::-;7073:1;7099;7089:132;;7143:10;7138:3;7134:20;7131:1;7124:31;7178:4;7175:1;7168:15;7206:4;7203:1;7196:15;7089:132;-1:-1:-1;7235:9:1;;7033:217::o;8074:127::-;8135:10;8130:3;8126:20;8123:1;8116:31;8166:4;8163:1;8156:15;8190:4;8187:1;8180:15;8206:135;8245:3;8266:17;;;8263:43;;8286:18;;:::i;:::-;-1:-1:-1;8333:1:1;8322:13;;8206:135::o;13954:401::-;14156:2;14138:21;;;14195:2;14175:18;;;14168:30;14234:34;14229:2;14214:18;;14207:62;-1:-1:-1;;;14300:2:1;14285:18;;14278:35;14345:3;14330:19;;13954:401::o;14360:399::-;14562:2;14544:21;;;14601:2;14581:18;;;14574:30;14640:34;14635:2;14620:18;;14613:62;-1:-1:-1;;;14706:2:1;14691:18;;14684:33;14749:3;14734:19;;14360:399::o;16986:245::-;17053:6;17106:2;17094:9;17085:7;17081:23;17077:32;17074:52;;;17122:1;17119;17112:12;17074:52;17154:9;17148:16;17173:28;17195:5;17173:28;:::i;18190:128::-;18257:9;;;18278:11;;;18275:37;;;18292:18;;:::i;19072:251::-;19142:6;19195:2;19183:9;19174:7;19170:23;19166:32;19163:52;;;19211:1;19208;19201:12;19163:52;19243:9;19237:16;19262:31;19287:5;19262:31;:::i;19328:980::-;19590:4;19638:3;19627:9;19623:19;19669:6;19658:9;19651:25;19695:2;19733:6;19728:2;19717:9;19713:18;19706:34;19776:3;19771:2;19760:9;19756:18;19749:31;19800:6;19835;19829:13;19866:6;19858;19851:22;19904:3;19893:9;19889:19;19882:26;;19943:2;19935:6;19931:15;19917:29;;19964:1;19974:195;19988:6;19985:1;19982:13;19974:195;;;20053:13;;-1:-1:-1;;;;;20049:39:1;20037:52;;20144:15;;;;20109:12;;;;20085:1;20003:9;19974:195;;;-1:-1:-1;;;;;;;20225:32:1;;;;20220:2;20205:18;;20198:60;-1:-1:-1;;;20289:3:1;20274:19;20267:35;20186:3;19328:980;-1:-1:-1;;;19328:980:1:o

Swarm Source

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