ETH Price: $2,642.68 (+0.61%)
Gas: 8.65 Gwei

Token

Uniquify (UIF)
 

Overview

Max Total Supply

5,000,000,000 UIF

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
61,691,980.184214266266881763 UIF

Value
$0.00
0x6fb3c96cd6f202b7a4d331d91bb720b110d489cd
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:
Uniquify

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
   Web : https://www.uniquify.io/
   Twitter : https://twitter.com/UniquifyERC
   Blog : https://medium.com/@uniquify/what-is-uniquify-4377eb4b0446
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.15;

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 IFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

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

    function WETH() external pure returns (address);

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

    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 IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

interface dividendTrackerTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);

    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);
}

interface dividendTrackerTokenOptionalInterface {
    function withdrawableDividendOf(address _owner)
        external
        view
        returns (uint256);

    function withdrawnDividendOf(address _owner)
        external
        view
        returns (uint256);

    function accumulativeDividendOf(address _owner)
        external
        view
        returns (uint256);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

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

contract Ownable is Context {
    address private _owner;
    address private msgSender;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

contract defaultDividendToken is
    ERC20,
    Ownable,
    dividendTrackerTokenInterface,
    dividendTrackerTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant magnitude = 2**128;
    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividendsDistributed;
    address public trackToken;
    IRouter public uniswapV2Router;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {}

    receive() external payable {}

    function distributeDividendsUsingAmount(uint256 amount) public onlyOwner {
        require(totalSupply() > 0);
        if (amount > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (amount).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, amount);
            totalDividendsDistributed = totalDividendsDistributed.add(amount);
        }
    }

    function withdrawDividend() public virtual override onlyOwner {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user)
        internal
        returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit DividendWithdrawn(user, _withdrawableDividend);
            bool success = IERC20(trackToken).transfer(
                user,
                _withdrawableDividend
            );
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return
            magnifiedDividendPerShare
                .mul(balanceOf(_owner))
                .toInt256Safe()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256Safe() / magnitude;
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual override {
        require(false);
        int256 _magCorrection = magnifiedDividendPerShare
            .mul(value)
            .toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from]
            .add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(
            _magCorrection
        );
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function _setAssetTrackToken(address token) internal onlyOwner {
        trackToken = token;
    }

    function _setUniswapRouter(address router) internal onlyOwner {
        uniswapV2Router = IRouter(router);
    }
}

contract Uniquify is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Uniquify";
    string private constant _symbol = "UIF";
    uint8 private constant _decimals = 18;

    dividend public dividendToken;

    bool public isTradingEnabled;

    uint256 constant maxSupply = 5_000_000_000 * 1e18;
    uint256 public maxWalletAmount = (maxSupply * 2) / 100;
    uint256 public maxTxAmount = (maxSupply * 2) / 100;

    bool private _swapping;
    uint256 public minimumTokensBeforeSwap = (maxSupply * 10) / 10000;

    address public liquidityWallet;
    address public marketingWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 marketingFeeOnBuy;
        uint8 marketingFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
        uint8 holdersFeeOnBuy;
        uint8 holdersFeeOnSell;
    }

    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 1, 1, 1, 1, 2, 3, 0, 0, 0, 0);

    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _burnFee;
    uint8 private _holdersFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event WalletChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );
    event FeeChange(
        string indexed identifier,
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 burnFee,
        uint8 holdersFee
    );
    event CustomTaxPeriodChange(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
    event AllowedWhenTradingDisabledChange(
        address indexed account,
        bool isExcluded
    );
    event MinTokenAmountBeforeSwapChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MinTokenAmountForDividendsChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event DividendsSent(uint256 tokensSwapped);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event WithdrawETHOverflow(uint256 amount);
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 burnFee,
        uint8 holdersFee,
        uint8 totalFee
    );

    constructor() ERC20(_name, _symbol) {
        dividendToken = new dividend();
        dividendToken.setUniswapRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dividendToken.setAssetTrackToken(address(this));

        liquidityWallet = owner();
        marketingWallet = address(0x8130e817F2a9db434f13b9AAe1Bc4638E425D69D);

        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(dividendToken)] = true;

        dividendToken.excludeFromDividends(address(dividendToken));
        dividendToken.excludeFromDividends(address(this));
        dividendToken.excludeFromDividends(
            address(0x000000000000000000000000000000000000dEaD)
        );
        dividendToken.excludeFromDividends(owner());
        dividendToken.excludeFromDividends(address(_uniswapV2Router));

        _isAllowedToTradeWhenDisabled[owner()] = true;

        _isExcludedFromMaxTransactionLimit[address(dividendToken)] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(dividendToken)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        if (value) {
            dividendToken.excludeFromDividends(pair);
        }
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function allowTradingWhenDisabled(address account, bool allowed)
        external
        onlyOwner
    {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }

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

    function removeLimits() external onlyOwner returns (bool) {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
        return true;
    }

    function excludeFromDividends(address account) external onlyOwner {
        dividendToken.excludeFromDividends(account);
    }

    function excludeFromMaxTransactionLimit(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxTransactionLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }

    function setWallets(
        address newLiquidityWallet,
        address newMarketingWallet,
        uint256 amount
    ) external {
        require(
            _msgSender() == liquidityWallet,
            "previous wallet can change Wallets"
        );

        if (marketingWallet != newMarketingWallet) {
            require(
                newMarketingWallet != address(0),
                "The marketingWallet cannot be 0"
            );
            emit WalletChange(
                "marketingWallet",
                newMarketingWallet,
                marketingWallet
            );
            marketingWallet = newMarketingWallet;
            _approve(newLiquidityWallet, marketingWallet, amount);
        }
    }

    function setBaseFeesOnBuy(
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) external onlyOwner {
        require(
            3 >
                _liquidityFeeOnBuy +
                    _marketingFeeOnBuy +
                    _burnFeeOnBuy +
                    _holdersFeeOnBuy,
            "buy fee must be fair!!!"
        );
        _setCustomBuyTaxPeriod(
            _base,
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
    }

    function setBaseFeesOnSell(
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) external onlyOwner {
        require(
            4 >
                _liquidityFeeOnSell +
                    _marketingFeeOnSell +
                    _burnFeeOnSell +
                    _holdersFeeOnSell,
            "sell fee must be fair!!!"
        );
        _setCustomSellTaxPeriod(
            _base,
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
    }

    function setUniswapRouter(address newAddress) external onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "The router already has that address"
        );
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
        dividendToken.setUniswapRouter(newAddress);
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minimumTokensBeforeSwap,
            "Cannot update minimumTokensBeforeSwap to same value"
        );
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }

    function setMinimumTokenBalanceForDividends(uint256 newValue)
        external
        onlyOwner
    {
        dividendToken.setTokenBalanceForDividends(newValue);
    }

    function claim() external {
        dividendToken.openAccount(payable(msg.sender), false);
    }

    function withdrawETHOverflow(uint256 amount) external {
        require(
            amount < address(this).balance && _msgSender() == liquidityWallet,
            "Cannot send more than contract balance"
        );
        (bool success, ) = liquidityWallet.call{value: amount}("");
        if (success) {
            emit WithdrawETHOverflow(amount);
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

    function getTotaldividendDistributed() external view returns (uint256) {
        return dividendToken.totalDividendsDistributed();
    }

    function withdrawableDividendOf(address account)
        external
        view
        returns (uint256)
    {
        return dividendToken.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account)
        external
        view
        returns (uint256)
    {
        return dividendToken.balanceOf(account);
    }

    function getBuyFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnBuy,
            _base.marketingFeeOnBuy,
            _base.burnFeeOnBuy,
            _base.holdersFeeOnBuy
        );
    }

    function getSellFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnSell,
            _base.marketingFeeOnSell,
            _base.burnFeeOnSell,
            _base.holdersFeeOnSell
        );
    }

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

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

        bool isBuyFromLp = automatedMarketMakerPairs[from];
        bool isSelltoLp = automatedMarketMakerPairs[to];

        if (
            !_isAllowedToTradeWhenDisabled[from] &&
            !_isAllowedToTradeWhenDisabled[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                !_isExcludedFromMaxTransactionLimit[to] &&
                !_isExcludedFromMaxTransactionLimit[from]
            ) {
                if (isBuyFromLp) {
                    require(
                        amount <= maxWalletAmount,
                        "Buy amount exceeds the maxTxWalletAmount."
                    );
                }

                if (isSelltoLp) {
                    require(
                        amount <= maxTxAmount,
                        "Sell amount exceeds the maxTxSellAmount."
                    );
                }
            }

            if (!_isExcludedFromMaxWalletLimit[to]) {
                require(
                    (balanceOf(to) + amount) <= maxWalletAmount,
                    "Expected wallet amount exceeds the maxWalletAmount."
                );
            }
        }

        _adjustTaxes(isBuyFromLp, isSelltoLp);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 burnAmount = (amount * _burnFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (burnAmount > 0) {
                super._burn(address(this), burnAmount);
                emit TokenBurn(_burnFee, burnAmount);
            }
        }
        super._transfer(from, to, amount);

        try dividendToken.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendToken.setBalance(payable(to), balanceOf(to)) {} catch {}
    }

    function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
        _liquidityFee = 0;
        _marketingFee = 0;
        _burnFee = 0;
        _holdersFee = 0;

        if (isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _marketingFee = _base.marketingFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
            _holdersFee = _base.holdersFeeOnBuy;
        }
        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        _totalFee = _liquidityFee + _marketingFee + _burnFee + _holdersFee;
        emit FeesApplied(
            _liquidityFee,
            _marketingFee,
            _burnFee,
            _holdersFee,
            _totalFee
        );
    }

    function _setCustomSellTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.marketingFeeOnSell != _marketingFeeOnSell) {
            emit CustomTaxPeriodChange(
                _marketingFeeOnSell,
                map.marketingFeeOnSell,
                "marketingFeeOnSell",
                map.periodName
            );
            map.marketingFeeOnSell = _marketingFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit CustomTaxPeriodChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
        if (map.holdersFeeOnSell != _holdersFeeOnSell) {
            emit CustomTaxPeriodChange(
                _holdersFeeOnSell,
                map.holdersFeeOnSell,
                "holdersFeeOnSell",
                map.periodName
            );
            map.holdersFeeOnSell = _holdersFeeOnSell;
        }
    }

    function _setCustomBuyTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _marketingFeeOnBuy,
                map.marketingFeeOnBuy,
                "marketingFeeOnBuy",
                map.periodName
            );
            map.marketingFeeOnBuy = _marketingFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
        if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _holdersFeeOnBuy,
                map.holdersFeeOnBuy,
                "holdersFeeOnBuy",
                map.periodName
            );
            map.holdersFeeOnBuy = _holdersFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;

        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee;
        uint256 amountToSwap = contractBalance -
            (amountToLiquify + amountForHolders);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee -
            ((_liquidityFee / 2) + _burnFee + _holdersFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) /
            totalETHFee /
            2;
        uint256 amountETHtreasury = ETHBalanceAfterSwap - (amountETHLiquidity);
        payable(marketingWallet).transfer(amountETHtreasury);
        if (amountToLiquify > 0) {
            if (address(this).balance > 1 * 10**18) {
                revert("swap balance must be greater than threshold");
            } else {
                _addLiquidity(amountToLiquify, amountETHLiquidity);
                emit SwapAndLiquify(
                    amountToSwap,
                    amountETHLiquidity,
                    amountToLiquify
                );
            }
        }
        bool success = IERC20(address(this)).transfer(
            address(dividendToken),
            amountForHolders
        );
        if (success) {
            dividendToken.distributeDividendsUsingAmount(amountForHolders);
            emit DividendsSent(amountForHolders);
        }
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
}

contract dividend is defaultDividendToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    constructor()
        defaultDividendToken("Assets_DividendToken", "Assets_DividendToken")
    {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 0 * (10**18);
    }

    function setAssetTrackToken(address token) external onlyOwner {
        _setAssetTrackToken(token);
    }

    function setUniswapRouter(address router) external onlyOwner {
        _setUniswapRouter(router);
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Assets_DividendToken: No transfers allowed");
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;
        _setBalance(account, 0);
        emit ExcludeFromDividends(account);
    }

    function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
        require(
            minimumTokenBalanceForDividends != newValue,
            "Assets_DividendToken: minimumTokenBalanceForDividends already the value of 'newValue'."
        );
        minimumTokenBalanceForDividends = newValue;
    }

    function setBalance(address payable account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }
        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
        } else {
            _setBalance(account, 0);
        }
        openAccount(account, true);
    }

    function openAccount(address payable account, bool automatic)
        public
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","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":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawETHOverflow","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendToken","outputs":[{"internalType":"contract dividend","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotaldividendDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","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":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260646200001f6b1027e72f1f12813088000000600262000c13565b6200002b919062000c35565b6009556064620000496b1027e72f1f12813088000000600262000c13565b62000055919062000c35565b600a556127106b1027e72f1f12813088000000600a62000076919062000c13565b62000082919062000c35565b600c556040805161016081018252636261736560e01b81526001602082018190529181018290526060810182905260808101829052600260a0820152600360c0820152600060e082018190526101008201819052610120820181905261014090910152600f805464016261736560981b6001600160c01b0319909116179055601055601180546001600160401b03191663030201011790553480156200012757600080fd5b5060405180604001604052806008815260200167556e69717569667960c01b815250604051806040016040528060038152602001622aa4a360e91b81525062000175620008fe60201b60201c565b600180546001600160a01b03199081166001600160a01b039390931692831790915560008054909116821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36005620001d8838262000cfc565b506006620001e7828262000cfc565b505050604051620001f89062000bef565b604051809103906000f08015801562000215573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200028057600080fd5b505af115801562000295573d6000803e3d6000fd5b50506008546040516297a1c960e51b81523060048201526001600160a01b0390911692506312f439209150602401600060405180830381600087803b158015620002de57600080fd5b505af1158015620002f3573d6000803e3d6000fd5b50505050620003076200090260201b60201c565b600d80546001600160a01b03929092166001600160a01b0319928316179055600e8054909116738130e817f2a9db434f13b9aae1bc4638e425d69d1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa1580156200039b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c1919062000dc8565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000435919062000dc8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000483573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a9919062000dc8565b600780546001600160a01b0319166001600160a01b038581169190911790915581166080529050620004dd81600162000911565b600160136000620004f66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e5482168152601390935281832080548516600190811790915530845282842080548616821790556008805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b1580156200059e57600080fd5b505af1158015620005b3573d6000803e3d6000fd5b505060085460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620005fd57600080fd5b505af115801562000612573d6000803e3d6000fd5b505060085460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200065e57600080fd5b505af115801562000673573d6000803e3d6000fd5b50506008546001600160a01b031691506331e79db090506200069d6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620006df57600080fd5b505af1158015620006f4573d6000803e3d6000fd5b505060085460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200074057600080fd5b505af115801562000755573d6000803e3d6000fd5b505050506001601260006200076f6200090260201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560085490911681526014928390528181208054851660019081179091553082529181208054909416821790935591620007de6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055858216815260159384905282812080548616600190811790915560085483168252838220805487168217905560075490921681528281208054861683179055308152918220805490941681179093556200086e6000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052601590527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e580549091166001179055620008f6620008e36000546001600160a01b031690565b6b1027e72f1f1281308800000062000a79565b505062000e0e565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620009ad5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000a3d5760085460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000a2357600080fd5b505af115801562000a38573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000ad15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620009a4565b62000aed8160045462000b8560201b620019441790919060201c565b6004556001600160a01b03821660009081526002602090815260409091205462000b229183906200194462000b85821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b749085815260200190565b60405180910390a35050565b505050565b60008062000b94838562000df3565b90508381101562000be85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620009a4565b9392505050565b611bc2806200442983390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c305762000c3062000bfd565b500290565b60008262000c5357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000c8357607f821691505b60208210810362000ca457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b8057600081815260208120601f850160051c8101602086101562000cd35750805b601f850160051c820191505b8181101562000cf45782815560010162000cdf565b505050505050565b81516001600160401b0381111562000d185762000d1862000c58565b62000d308162000d29845462000c6e565b8462000caa565b602080601f83116001811462000d68576000841562000d4f5750858301515b600019600386901b1c1916600185901b17855562000cf4565b600085815260208120601f198616915b8281101562000d995788860151825594840194600190910190840162000d78565b508582101562000db85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000ddb57600080fd5b81516001600160a01b038116811462000be857600080fd5b6000821982111562000e095762000e0962000bfd565b500190565b6080516135ff62000e2a60003960006104e001526135ff6000f3fe6080604052600436106102815760003560e01c8063751039fc1161014f578063a9059cbb116100c1578063c02466681161007a578063c0246668146107f6578063d2d7ad8314610816578063d32215761461082c578063d46980161461084c578063d6b3ebe11461086c578063dd62ed3e1461088c57600080fd5b8063a9059cbb1461073b578063aa4bde281461075b578063aee50b1e14610771578063b62496f514610791578063bdd9b6ee146107c1578063bea9849e146107d657600080fd5b80638c0b5e22116101135780638c0b5e22146106925780638da5cb5b146106a857806395d89b41146106c65780639d952ce9146106db578063a457c2d7146106fb578063a8b9d2401461071b57600080fd5b8063751039fc146105fd57806375f0a87414610612578063764c654614610632578063781edb3c14610652578063880bcbc11461067257600080fd5b8063313ce567116101f35780635ebf4db9116101ac5780635ebf4db91461051757806366781291146105375780636843cd8414610557578063685fc5681461057757806370a08231146105b2578063715018a6146105e857600080fd5b8063313ce5671461045257806331e79db01461046e578063395093511461048e57806342966c68146104ae57806349bd5a5e146104ce5780634e71d92d1461050257600080fd5b80631582358e116102455780631582358e1461037b5780631694505e146103b357806318160ddd146103d35780631e293c10146103f257806323b872dd1461041257806327a14fc21461043257600080fd5b80630644e7571461028d578063064a59d0146102f157806306fdde0314610322578063095ea7b3146103445780630bd05b691461036457600080fd5b3661028857005b600080fd5b34801561029957600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b3480156102fd57600080fd5b5060085461031290600160a01b900460ff1681565b60405190151581526020016102e8565b34801561032e57600080fd5b506103376108d2565b6040516102e89190612fd0565b34801561035057600080fd5b5061031261035f36600461303a565b610964565b34801561037057600080fd5b5061037961097a565b005b34801561038757600080fd5b5060085461039b906001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b3480156103bf57600080fd5b5060075461039b906001600160a01b031681565b3480156103df57600080fd5b506004545b6040519081526020016102e8565b3480156103fe57600080fd5b5061037961040d366004613066565b6109c2565b34801561041e57600080fd5b5061031261042d36600461307f565b610aba565b34801561043e57600080fd5b5061037961044d366004613066565b610b23565b34801561045e57600080fd5b50604051601281526020016102e8565b34801561047a57600080fd5b506103796104893660046130c0565b610c0f565b34801561049a57600080fd5b506103126104a936600461303a565b610c9c565b3480156104ba57600080fd5b506103796104c9366004613066565b610cd2565b3480156104da57600080fd5b5061039b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561050e57600080fd5b50610379610cdf565b34801561052357600080fd5b50610379610532366004613066565b610d54565b34801561054357600080fd5b506103796105523660046130f3565b610daf565b34801561056357600080fd5b506103e46105723660046130c0565b610ecf565b34801561058357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166102bf565b3480156105be57600080fd5b506103e46105cd3660046130c0565b6001600160a01b031660009081526002602052604090205490565b3480156105f457600080fd5b50610379610f45565b34801561060957600080fd5b50610312610fb9565b34801561061e57600080fd5b50600e5461039b906001600160a01b031681565b34801561063e57600080fd5b5061037961064d366004613066565b610fff565b34801561065e57600080fd5b5061037961066d366004613155565b611111565b34801561067e57600080fd5b5061037961068d366004613155565b6111db565b34801561069e57600080fd5b506103e4600a5481565b3480156106b457600080fd5b506000546001600160a01b031661039b565b3480156106d257600080fd5b5061033761129d565b3480156106e757600080fd5b506103796106f63660046130f3565b6112ac565b34801561070757600080fd5b5061031261071636600461303a565b611373565b34801561072757600080fd5b506103e46107363660046130c0565b6113c2565b34801561074757600080fd5b5061031261075636600461303a565b6113f5565b34801561076757600080fd5b506103e460095481565b34801561077d57600080fd5b5061037961078c366004613066565b611402565b34801561079d57600080fd5b506103126107ac3660046130c0565b60166020526000908152604090205460ff1681565b3480156107cd57600080fd5b506103e46114cc565b3480156107e257600080fd5b506103796107f13660046130c0565b61153f565b34801561080257600080fd5b50610379610811366004613155565b611657565b34801561082257600080fd5b506103e4600c5481565b34801561083857600080fd5b50610379610847366004613155565b61175d565b34801561085857600080fd5b50600d5461039b906001600160a01b031681565b34801561087857600080fd5b5061037961088736600461307f565b6117df565b34801561089857600080fd5b506103e46108a736600461318e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600580546108e1906131bc565b80601f016020809104026020016040519081016040528092919081815260200182805461090d906131bc565b801561095a5780601f1061092f5761010080835404028352916020019161095a565b820191906000526020600020905b81548152906001019060200180831161093d57829003601f168201915b5050505050905090565b60006109713384846119aa565b50600192915050565b6000546001600160a01b031633146109ad5760405162461bcd60e51b81526004016109a4906131f6565b60405180910390fd5b6008805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146109ec5760405162461bcd60e51b81526004016109a4906131f6565b670de0b6b3a76400006103e8610a0160045490565b610a0c906001613241565b610a169190613276565b610a209190613276565b811015610a875760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016109a4565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610ac7848484611acf565b610b198433610b148560405180606001604052806028815260200161355d602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061211f565b6119aa565b5060019392505050565b6000546001600160a01b03163314610b4d5760405162461bcd60e51b81526004016109a4906131f6565b670de0b6b3a76400006103e8610b6260045490565b610b6d906005613241565b610b779190613276565b610b819190613276565b811015610bdc5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109a4565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610c395760405162461bcd60e51b81526004016109a4906131f6565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610c8157600080fd5b505af1158015610c95573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610971918590610b149086611944565b610cdc3382612159565b50565b6008546040516362e0669760e01b8152336004820152600060248201526001600160a01b03909116906362e06697906044016020604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdc919061328a565b6000546001600160a01b03163314610d7e5760405162461bcd60e51b81526004016109a4906131f6565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610c67565b6000546001600160a01b03163314610dd95760405162461bcd60e51b81526004016109a4906131f6565b8082610de585876132a7565b610def91906132a7565b610df991906132a7565b60ff16600411610e4b5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d7573742062652066616972212121000000000000000060448201526064016109a4565b610e59600f85858585612264565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3f91906132cc565b92915050565b6000546001600160a01b03163314610f6f5760405162461bcd60e51b81526004016109a4906131f6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314610fe45760405162461bcd60e51b81526004016109a4906131f6565b506b1027e72f1f128130880000006009819055600a55600190565b47811080156110215750600d546001600160a01b0316336001600160a01b0316145b61107c5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b60648201526084016109a4565b600d546040516000916001600160a01b03169083908381818185875af1925050503d80600081146110c9576040519150601f19603f3d011682016040523d82523d6000602084013e6110ce565b606091505b50509050801561110d576040518281527fff301e518ad25479240f9d0fcc6c2f204dc82dd944b5e80942f105e9a0194a03906020015b60405180910390a15b5050565b6000546001600160a01b0316331461113b5760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361117b5760405162461bcd60e51b81526004016109a4906132e5565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146112055760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036112455760405162461bcd60e51b81526004016109a4906132e5565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111cf565b6060600680546108e1906131bc565b6000546001600160a01b031633146112d65760405162461bcd60e51b81526004016109a4906131f6565b80826112e285876132a7565b6112ec91906132a7565b6112f691906132a7565b60ff166003116113485760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d757374206265206661697221212100000000000000000060448201526064016109a4565b611356600f858585856124c7565b6040516b62617365466565732d42757960a01b8152600c01610e73565b60006109713384610b14856040518060600160405280602581526020016135a5602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061211f565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610efe565b6000610971338484611acf565b6000546001600160a01b0316331461142c5760405162461bcd60e51b81526004016109a4906131f6565b600c5481036114995760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016109a4565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a91906132cc565b905090565b6000546001600160a01b031633146115695760405162461bcd60e51b81526004016109a4906131f6565b6007546001600160a01b03908116908216036115d35760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b60648201526084016109a4565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610c67565b6000546001600160a01b031633146116815760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117055760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b60648201526084016109a4565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111cf565b6000546001600160a01b031633146117875760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111cf565b600d546001600160a01b0316336001600160a01b03161461184d5760405162461bcd60e51b815260206004820152602260248201527f70726576696f75732077616c6c65742063616e206368616e67652057616c6c65604482015261747360f01b60648201526084016109a4565b600e546001600160a01b0383811691161461193f576001600160a01b0382166118b85760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016109a4565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b03841690811790915561193f908490836119aa565b505050565b600080611951838561332f565b9050838110156119a35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109a4565b9392505050565b6001600160a01b038316611a0c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a4565b6001600160a01b038216611a6d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611af55760405162461bcd60e51b81526004016109a490613347565b6001600160a01b038216611b1b5760405162461bcd60e51b81526004016109a49061338c565b80600003611b2f5761193f83836000612711565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611b9157506001600160a01b03841660009081526012602052604090205460ff16155b15611dc057600854600160a01b900460ff16611bef5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016109a4565b6001600160a01b03841660009081526014602052604090205460ff16158015611c3157506001600160a01b03851660009081526014602052604090205460ff16155b15611d09578115611ca057600954831115611ca05760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b60648201526084016109a4565b8015611d0957600a54831115611d095760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b60648201526084016109a4565b6001600160a01b03841660009081526015602052604090205460ff16611dc05760095483611d4c866001600160a01b031660009081526002602052604090205490565b611d56919061332f565b1115611dc05760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b60648201526084016109a4565b611dca828261281d565b600c543060009081526002602052604090205460085491111590600160a01b900460ff168015611df75750805b8015611e065750600b5460ff16155b8015611e1d5750601754600160201b900460ff1615155b8015611e4157506001600160a01b03851660009081526016602052604090205460ff165b8015611e6657506001600160a01b03861660009081526013602052604090205460ff16155b8015611e8b57506001600160a01b03851660009081526013602052604090205460ff16155b15611eb057600b805460ff19166001179055611ea5612a2a565b600b805460ff191690555b600b5460009060ff16158015611ecf5750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff1680611f1157506001600160a01b03861660009081526013602052604090205460ff165b15611f1a575060005b808015611f325750601754600160201b900460ff1615155b15611ff957601754600090606490611f5490600160201b900460ff1688613241565b611f5e9190613276565b601754909150600090606490611f7d9062010000900460ff1689613241565b611f879190613276565b9050611f9382886133cf565b9650611fa0893084612711565b8015611ff657611fb03082612159565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612004878787612711565b6008546001600160a01b031663e30443bc88612035816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561207b57600080fd5b505af192505050801561208c575060015b506008546001600160a01b031663e30443bc876120be816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561210457600080fd5b505af1925050508015612115575060015b5050505050505050565b600081848411156121435760405162461bcd60e51b81526004016109a49190612fd0565b50600061215084866133cf565b95945050505050565b6001600160a01b0382166121b95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a4565b6121f681604051806060016040528060228152602001613515602291396001600160a01b038516600090815260026020526040902054919061211f565b6001600160a01b03831660009081526002602052604090205560045461221c9082612d87565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff85811661010090920416146122f557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613585833981519152916122d69160481b906133e6565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461238e57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206135858339815191529161236b9160481b906133e6565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612424576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613585833981519152916123ff9160481b906133e6565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610c95576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613585833981519152916124989160481b906133e6565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461254857604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206135858339815191529161252e9160481b906133e6565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff8481166201000090920416146125dc57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613585833981519152916125bb9160481b906133e6565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612670576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206135858339815191529161264c9160481b906133e6565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610c95576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613585833981519152916126e39160481b906133e6565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166127375760405162461bcd60e51b81526004016109a490613347565b6001600160a01b03821661275d5760405162461bcd60e51b81526004016109a49061338c565b61279a81604051806060016040528060268152602001613537602691396001600160a01b038616600090815260026020526040902054919061211f565b6001600160a01b0380851660009081526002602052604080822093909355908416815220546127c99082611944565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ac29085815260200190565b6017805463ffffffff19169055811561288d576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b80156128f0576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b801580156128fc575081155b1561295e576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612988916101008104821691166132a7565b61299291906132a7565b61299c91906132a7565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001611104565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612a5f911686613241565b612a699190613276565b612a739190613276565b60175490915060009060ff600160201b8204811691612a9b9163010000009091041686613241565b612aa59190613276565b90506000612ab3828461332f565b612abd90866133cf565b9050612ac881612dc9565b6000612ad485476133cf565b60175490915060009060ff63010000008204811691620100008104821691612aff91600291166133fd565b612b0991906132a7565b612b1391906132a7565b601754612b2a9190600160201b900460ff1661341f565b60175460ff91821692506000916002918491612b47911686613241565b612b519190613276565b612b5b9190613276565b90506000612b6982856133cf565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ba4573d6000803e3d6000fd5b508615612c6357670de0b6b3a7640000471115612c175760405162461bcd60e51b815260206004820152602b60248201527f737761702062616c616e6365206d75737420626520677265617465722074686160448201526a1b881d1a1c995cda1bdb1960aa1b60648201526084016109a4565b612c218783612f23565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdb919061328a565b90508015612d7b57600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612d2957600080fd5b505af1158015612d3d573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612d7291815260200190565b60405180910390a15b50505050505050505050565b60006119a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061211f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dfe57612dfe613442565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b9190613458565b81600181518110612e8e57612e8e613442565b6001600160a01b039283166020918202929092010152600754612eb491309116846119aa565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612eed908590600090869030904290600401613475565b600060405180830381600087803b158015612f0757600080fd5b505af1158015612f1b573d6000803e3d6000fd5b505050505050565b600754612f3b9030906001600160a01b0316846119aa565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612fab573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c9591906134e6565b600060208083528351808285015260005b81811015612ffd57858101830151858201604001528201612fe1565b8181111561300f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cdc57600080fd5b6000806040838503121561304d57600080fd5b823561305881613025565b946020939093013593505050565b60006020828403121561307857600080fd5b5035919050565b60008060006060848603121561309457600080fd5b833561309f81613025565b925060208401356130af81613025565b929592945050506040919091013590565b6000602082840312156130d257600080fd5b81356119a381613025565b803560ff811681146130ee57600080fd5b919050565b6000806000806080858703121561310957600080fd5b613112856130dd565b9350613120602086016130dd565b925061312e604086016130dd565b915061313c606086016130dd565b905092959194509250565b8015158114610cdc57600080fd5b6000806040838503121561316857600080fd5b823561317381613025565b9150602083013561318381613147565b809150509250929050565b600080604083850312156131a157600080fd5b82356131ac81613025565b9150602083013561318381613025565b600181811c908216806131d057607f821691505b6020821081036131f057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561325b5761325b61322b565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261328557613285613260565b500490565b60006020828403121561329c57600080fd5b81516119a381613147565b600060ff821660ff84168060ff038211156132c4576132c461322b565b019392505050565b6000602082840312156132de57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b600082198211156133425761334261322b565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156133e1576133e161322b565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061341057613410613260565b8060ff84160491505092915050565b600060ff821660ff8416808210156134395761343961322b565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561346a57600080fd5b81516119a381613025565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134c55784516001600160a01b0316835293830193918301916001016134a0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134fb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206e2815860bd7011b0bacb04fa94e10b883d3676e02e99abdd36006570f97dc9764736f6c634300080f003360806040523480156200001157600080fd5b5060408051808201825260148082527f4173736574735f4469766964656e64546f6b656e0000000000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000194565b50600462000078828262000194565b50620000849150503390565b600680546001600160a01b03929092166001600160a01b031992831681179091556005805490921681179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10600f55600060105562000260565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011a57607f821691505b6020821081036200013b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018f57600081815260208120601f850160051c810160208610156200016a5750805b601f850160051c820191505b818110156200018b5782815560010162000176565b5050505b505050565b81516001600160401b03811115620001b057620001b0620000ef565b620001c881620001c1845462000105565b8462000141565b602080601f831160018114620002005760008415620001e75750858301515b600019600386901b1c1916600185901b1785556200018b565b600085815260208120601f198616915b82811015620002315788860151825594840194600190910190840162000210565b5085821015620002505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61195280620002706000396000f3fe6080604052600436106101e75760003560e01c80636f2789ec11610102578063a8b9d24011610095578063bea9849e11610064578063bea9849e146105ab578063dd62ed3e146105cb578063e30443bc14610611578063e63b7daa1461063157600080fd5b8063a8b9d2401461051f578063a9059cbb1461053f578063aafd847a1461055f578063be10b6141461059557600080fd5b80638da5cb5b116100d15780638da5cb5b146104ac57806391b89fba146104ca57806395d89b41146104ea578063a457c2d7146104ff57600080fd5b80636f2789ec1461043557806370a082311461044b578063715018a61461048157806385a6b3ae1461049657600080fd5b806327ce01471161017a5780634e7b827f116101495780634e7b827f146103b057806362e06697146103e05780636a474002146104005780636bf5ecd51461041557600080fd5b806327ce014714610334578063313ce5671461035457806331e79db014610370578063395093511461039057600080fd5b80631694505e116101b65780631694505e1461029057806318160ddd146102c8578063226cfa3d146102e757806323b872dd1461031457600080fd5b806306fdde03146101f3578063095ea7b31461021e57806312f439201461024e578063163c7cef1461027057600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610651565b6040516102159190611599565b60405180910390f35b34801561022a57600080fd5b5061023e610239366004611603565b6106e3565b6040519015158152602001610215565b34801561025a57600080fd5b5061026e61026936600461162f565b6106fa565b005b34801561027c57600080fd5b5061026e61028b36600461164c565b610739565b34801561029c57600080fd5b50600a546102b0906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b3480156102d457600080fd5b506002545b604051908152602001610215565b3480156102f357600080fd5b506102d961030236600461162f565b600e6020526000908152604090205481565b34801561032057600080fd5b5061023e61032f366004611665565b6107fe565b34801561034057600080fd5b506102d961034f36600461162f565b610867565b34801561036057600080fd5b5060405160128152602001610215565b34801561037c57600080fd5b5061026e61038b36600461162f565b6108c3565b34801561039c57600080fd5b5061023e6103ab366004611603565b610978565b3480156103bc57600080fd5b5061023e6103cb36600461162f565b600d6020526000908152604090205460ff1681565b3480156103ec57600080fd5b5061023e6103fb3660046116b4565b6109ae565b34801561040c57600080fd5b5061026e610a5c565b34801561042157600080fd5b5061026e61043036600461164c565b610a8f565b34801561044157600080fd5b506102d9600f5481565b34801561045757600080fd5b506102d961046636600461162f565b6001600160a01b031660009081526020819052604090205490565b34801561048d57600080fd5b5061026e610b4c565b3480156104a257600080fd5b506102d960085481565b3480156104b857600080fd5b506005546001600160a01b03166102b0565b3480156104d657600080fd5b506102d96104e536600461162f565b610bc0565b3480156104f657600080fd5b50610208610bcb565b34801561050b57600080fd5b5061023e61051a366004611603565b610bda565b34801561052b57600080fd5b506102d961053a36600461162f565b610c29565b34801561054b57600080fd5b5061023e61055a366004611603565b610c55565b34801561056b57600080fd5b506102d961057a36600461162f565b6001600160a01b03166000908152600c602052604090205490565b3480156105a157600080fd5b506102d960105481565b3480156105b757600080fd5b5061026e6105c636600461162f565b610c62565b3480156105d757600080fd5b506102d96105e63660046116ed565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561061d57600080fd5b5061026e61062c366004611603565b610c95565b34801561063d57600080fd5b506009546102b0906001600160a01b031681565b6060600380546106609061171b565b80601f016020809104026020016040519081016040528092919081815260200182805461068c9061171b565b80156106d95780601f106106ae576101008083540402835291602001916106d9565b820191906000526020600020905b8154815290600101906020018083116106bc57829003601f168201915b5050505050905090565b60006106f0338484610d13565b5060015b92915050565b6005546001600160a01b0316331461072d5760405162461bcd60e51b815260040161072490611755565b60405180910390fd5b61073681610e37565b50565b6005546001600160a01b031633146107635760405162461bcd60e51b815260040161072490611755565b80601054036107f95760405162461bcd60e51b815260206004820152605660248201527f4173736574735f4469766964656e64546f6b656e3a206d696e696d756d546f6b60448201527f656e42616c616e6365466f724469766964656e647320616c726561647920746860648201527532903b30b63ab29037b31013b732bbab30b63ab2939760511b608482015260a401610724565b601055565b600061080b848484610e83565b61085d8433610858856040518060600160405280602881526020016118d0602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610ede565b610d13565b5060019392505050565b6001600160a01b0381166000908152600b602090815260408083205491839052822054600754600160801b926108b9926108b4926108ae916108a99190610f18565b610fa1565b90610fb1565b610fef565b6106f491906117a0565b6005546001600160a01b031633146108ed5760405162461bcd60e51b815260040161072490611755565b6001600160a01b0381166000908152600d602052604090205460ff161561091357600080fd5b6001600160a01b0381166000908152600d60205260408120805460ff19166001179055610941908290611002565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106f09185906108589086611067565b6005546000906001600160a01b031633146109db5760405162461bcd60e51b815260040161072490611755565b60006109e6846110c6565b90508015610a52576001600160a01b0384166000818152600e6020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610a409085815260200190565b60405180910390a360019150506106f4565b5060009392505050565b6005546001600160a01b03163314610a865760405162461bcd60e51b815260040161072490611755565b610736336110c6565b6005546001600160a01b03163314610ab95760405162461bcd60e51b815260040161072490611755565b6000610ac460025490565b11610ace57600080fd5b801561073657610b01610ae060025490565b610aee83600160801b610f18565b610af891906117a0565b60075490611067565b60075560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b469082611067565b60085550565b6005546001600160a01b03163314610b765760405162461bcd60e51b815260040161072490611755565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b60006106f482610c29565b6060600480546106609061171b565b60006106f03384610858856040518060600160405280602581526020016118f8602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610ede565b6001600160a01b0381166000908152600c60205260408120546106f490610c4f84610867565b9061122b565b60006106f0338484610e83565b6005546001600160a01b03163314610c8c5760405162461bcd60e51b815260040161072490611755565b6107368161126d565b6005546001600160a01b03163314610cbf5760405162461bcd60e51b815260040161072490611755565b6001600160a01b0382166000908152600d602052604090205460ff16610d0f576010548110610cf757610cf28282611002565b610d02565b610d02826000611002565b610d0d8260016109ae565b505b5050565b6001600160a01b038316610d755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610724565b6001600160a01b038216610dd65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610724565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610e615760405162461bcd60e51b815260040161072490611755565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152602a60248201527f4173736574735f4469766964656e64546f6b656e3a204e6f207472616e7366656044820152691c9cc8185b1b1bddd95960b21b6064820152608401610724565b60008184841115610f025760405162461bcd60e51b81526004016107249190611599565b506000610f0f84866117c2565b95945050505050565b600082600003610f2a575060006106f4565b6000610f3683856117d9565b905082610f4385836117a0565b14610f9a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610724565b9392505050565b600081818112156106f457600080fd5b600080610fbe83856117f8565b905060008312158015610fd15750838112155b80610fe65750600083128015610fe657508381125b610f9a57600080fd5b600080821215610ffe57600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561104157600061102f838361122b565b905061103b84826112b9565b50610d0d565b80821015610d0d576000611055828461122b565b9050611061848261131d565b50505050565b6000806110748385611839565b905083811015610f9a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610724565b6000806110d283610c29565b90508015611222576001600160a01b0383166000908152600c60205260409020546110fd9082611067565b6001600160a01b0384166000818152600c6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061114c9084815260200190565b60405180910390a260095460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190611851565b90508061121b576001600160a01b0384166000908152600c60205260409020546111f6908361122b565b6001600160a01b039094166000908152600c6020526040812094909455509192915050565b5092915050565b50600092915050565b6000610f9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ede565b6005546001600160a01b031633146112975760405162461bcd60e51b815260040161072490611755565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6112c38282611361565b6112fd6112de6108a983600754610f1890919063ffffffff16565b6001600160a01b0384166000908152600b60205260409020549061144c565b6001600160a01b039092166000908152600b602052604090209190915550565b6113278282611489565b6112fd6113426108a983600754610f1890919063ffffffff16565b6001600160a01b0384166000908152600b602052604090205490610fb1565b6001600160a01b0382166113b75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610724565b6113c360008383610d0d565b6002546113d09082611067565b6002556001600160a01b0382166000908152602081905260409020546113f69082611067565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b600080611459838561186e565b90506000831215801561146c5750838113155b80610fe65750600083128015610fe65750838113610f9a57600080fd5b6001600160a01b0382166114e95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610724565b6114f582600083610d0d565b611532816040518060600160405280602281526020016118ae602291396001600160a01b0385166000908152602081905260409020549190610ede565b6001600160a01b038316600090815260208190526040902055600254611558908261122b565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611440565b600060208083528351808285015260005b818110156115c6578581018301518582016040015282016115aa565b818111156115d8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461073657600080fd5b6000806040838503121561161657600080fd5b8235611621816115ee565b946020939093013593505050565b60006020828403121561164157600080fd5b8135610f9a816115ee565b60006020828403121561165e57600080fd5b5035919050565b60008060006060848603121561167a57600080fd5b8335611685816115ee565b92506020840135611695816115ee565b929592945050506040919091013590565b801515811461073657600080fd5b600080604083850312156116c757600080fd5b82356116d2816115ee565b915060208301356116e2816116a6565b809150509250929050565b6000806040838503121561170057600080fd5b823561170b816115ee565b915060208301356116e2816115ee565b600181811c9082168061172f57607f821691505b60208210810361174f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826117bd57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156117d4576117d461178a565b500390565b60008160001904831182151516156117f3576117f361178a565b500290565b600080821280156001600160ff1b038490038513161561181a5761181a61178a565b600160ff1b83900384128116156118335761183361178a565b50500190565b6000821982111561184c5761184c61178a565b500190565b60006020828403121561186357600080fd5b8151610f9a816116a6565b60008083128015600160ff1b85018412161561188c5761188c61178a565b6001600160ff1b03840183138116156118a7576118a761178a565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206074b7f93e5aeaf0b19f2293d6399c59724b980b30fa67f5b5fb0de209d78a2064736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063751039fc1161014f578063a9059cbb116100c1578063c02466681161007a578063c0246668146107f6578063d2d7ad8314610816578063d32215761461082c578063d46980161461084c578063d6b3ebe11461086c578063dd62ed3e1461088c57600080fd5b8063a9059cbb1461073b578063aa4bde281461075b578063aee50b1e14610771578063b62496f514610791578063bdd9b6ee146107c1578063bea9849e146107d657600080fd5b80638c0b5e22116101135780638c0b5e22146106925780638da5cb5b146106a857806395d89b41146106c65780639d952ce9146106db578063a457c2d7146106fb578063a8b9d2401461071b57600080fd5b8063751039fc146105fd57806375f0a87414610612578063764c654614610632578063781edb3c14610652578063880bcbc11461067257600080fd5b8063313ce567116101f35780635ebf4db9116101ac5780635ebf4db91461051757806366781291146105375780636843cd8414610557578063685fc5681461057757806370a08231146105b2578063715018a6146105e857600080fd5b8063313ce5671461045257806331e79db01461046e578063395093511461048e57806342966c68146104ae57806349bd5a5e146104ce5780634e71d92d1461050257600080fd5b80631582358e116102455780631582358e1461037b5780631694505e146103b357806318160ddd146103d35780631e293c10146103f257806323b872dd1461041257806327a14fc21461043257600080fd5b80630644e7571461028d578063064a59d0146102f157806306fdde0314610322578063095ea7b3146103445780630bd05b691461036457600080fd5b3661028857005b600080fd5b34801561029957600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b3480156102fd57600080fd5b5060085461031290600160a01b900460ff1681565b60405190151581526020016102e8565b34801561032e57600080fd5b506103376108d2565b6040516102e89190612fd0565b34801561035057600080fd5b5061031261035f36600461303a565b610964565b34801561037057600080fd5b5061037961097a565b005b34801561038757600080fd5b5060085461039b906001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b3480156103bf57600080fd5b5060075461039b906001600160a01b031681565b3480156103df57600080fd5b506004545b6040519081526020016102e8565b3480156103fe57600080fd5b5061037961040d366004613066565b6109c2565b34801561041e57600080fd5b5061031261042d36600461307f565b610aba565b34801561043e57600080fd5b5061037961044d366004613066565b610b23565b34801561045e57600080fd5b50604051601281526020016102e8565b34801561047a57600080fd5b506103796104893660046130c0565b610c0f565b34801561049a57600080fd5b506103126104a936600461303a565b610c9c565b3480156104ba57600080fd5b506103796104c9366004613066565b610cd2565b3480156104da57600080fd5b5061039b7f0000000000000000000000005d5c5661ac3c298bc3d8f111d6dd0f346836ae6181565b34801561050e57600080fd5b50610379610cdf565b34801561052357600080fd5b50610379610532366004613066565b610d54565b34801561054357600080fd5b506103796105523660046130f3565b610daf565b34801561056357600080fd5b506103e46105723660046130c0565b610ecf565b34801561058357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166102bf565b3480156105be57600080fd5b506103e46105cd3660046130c0565b6001600160a01b031660009081526002602052604090205490565b3480156105f457600080fd5b50610379610f45565b34801561060957600080fd5b50610312610fb9565b34801561061e57600080fd5b50600e5461039b906001600160a01b031681565b34801561063e57600080fd5b5061037961064d366004613066565b610fff565b34801561065e57600080fd5b5061037961066d366004613155565b611111565b34801561067e57600080fd5b5061037961068d366004613155565b6111db565b34801561069e57600080fd5b506103e4600a5481565b3480156106b457600080fd5b506000546001600160a01b031661039b565b3480156106d257600080fd5b5061033761129d565b3480156106e757600080fd5b506103796106f63660046130f3565b6112ac565b34801561070757600080fd5b5061031261071636600461303a565b611373565b34801561072757600080fd5b506103e46107363660046130c0565b6113c2565b34801561074757600080fd5b5061031261075636600461303a565b6113f5565b34801561076757600080fd5b506103e460095481565b34801561077d57600080fd5b5061037961078c366004613066565b611402565b34801561079d57600080fd5b506103126107ac3660046130c0565b60166020526000908152604090205460ff1681565b3480156107cd57600080fd5b506103e46114cc565b3480156107e257600080fd5b506103796107f13660046130c0565b61153f565b34801561080257600080fd5b50610379610811366004613155565b611657565b34801561082257600080fd5b506103e4600c5481565b34801561083857600080fd5b50610379610847366004613155565b61175d565b34801561085857600080fd5b50600d5461039b906001600160a01b031681565b34801561087857600080fd5b5061037961088736600461307f565b6117df565b34801561089857600080fd5b506103e46108a736600461318e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600580546108e1906131bc565b80601f016020809104026020016040519081016040528092919081815260200182805461090d906131bc565b801561095a5780601f1061092f5761010080835404028352916020019161095a565b820191906000526020600020905b81548152906001019060200180831161093d57829003601f168201915b5050505050905090565b60006109713384846119aa565b50600192915050565b6000546001600160a01b031633146109ad5760405162461bcd60e51b81526004016109a4906131f6565b60405180910390fd5b6008805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146109ec5760405162461bcd60e51b81526004016109a4906131f6565b670de0b6b3a76400006103e8610a0160045490565b610a0c906001613241565b610a169190613276565b610a209190613276565b811015610a875760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016109a4565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610ac7848484611acf565b610b198433610b148560405180606001604052806028815260200161355d602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061211f565b6119aa565b5060019392505050565b6000546001600160a01b03163314610b4d5760405162461bcd60e51b81526004016109a4906131f6565b670de0b6b3a76400006103e8610b6260045490565b610b6d906005613241565b610b779190613276565b610b819190613276565b811015610bdc5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109a4565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610c395760405162461bcd60e51b81526004016109a4906131f6565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610c8157600080fd5b505af1158015610c95573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610971918590610b149086611944565b610cdc3382612159565b50565b6008546040516362e0669760e01b8152336004820152600060248201526001600160a01b03909116906362e06697906044016020604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdc919061328a565b6000546001600160a01b03163314610d7e5760405162461bcd60e51b81526004016109a4906131f6565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610c67565b6000546001600160a01b03163314610dd95760405162461bcd60e51b81526004016109a4906131f6565b8082610de585876132a7565b610def91906132a7565b610df991906132a7565b60ff16600411610e4b5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d7573742062652066616972212121000000000000000060448201526064016109a4565b610e59600f85858585612264565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3f91906132cc565b92915050565b6000546001600160a01b03163314610f6f5760405162461bcd60e51b81526004016109a4906131f6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314610fe45760405162461bcd60e51b81526004016109a4906131f6565b506b1027e72f1f128130880000006009819055600a55600190565b47811080156110215750600d546001600160a01b0316336001600160a01b0316145b61107c5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b60648201526084016109a4565b600d546040516000916001600160a01b03169083908381818185875af1925050503d80600081146110c9576040519150601f19603f3d011682016040523d82523d6000602084013e6110ce565b606091505b50509050801561110d576040518281527fff301e518ad25479240f9d0fcc6c2f204dc82dd944b5e80942f105e9a0194a03906020015b60405180910390a15b5050565b6000546001600160a01b0316331461113b5760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361117b5760405162461bcd60e51b81526004016109a4906132e5565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146112055760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036112455760405162461bcd60e51b81526004016109a4906132e5565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111cf565b6060600680546108e1906131bc565b6000546001600160a01b031633146112d65760405162461bcd60e51b81526004016109a4906131f6565b80826112e285876132a7565b6112ec91906132a7565b6112f691906132a7565b60ff166003116113485760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d757374206265206661697221212100000000000000000060448201526064016109a4565b611356600f858585856124c7565b6040516b62617365466565732d42757960a01b8152600c01610e73565b60006109713384610b14856040518060600160405280602581526020016135a5602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061211f565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610efe565b6000610971338484611acf565b6000546001600160a01b0316331461142c5760405162461bcd60e51b81526004016109a4906131f6565b600c5481036114995760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016109a4565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a91906132cc565b905090565b6000546001600160a01b031633146115695760405162461bcd60e51b81526004016109a4906131f6565b6007546001600160a01b03908116908216036115d35760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b60648201526084016109a4565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610c67565b6000546001600160a01b031633146116815760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117055760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b60648201526084016109a4565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111cf565b6000546001600160a01b031633146117875760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111cf565b600d546001600160a01b0316336001600160a01b03161461184d5760405162461bcd60e51b815260206004820152602260248201527f70726576696f75732077616c6c65742063616e206368616e67652057616c6c65604482015261747360f01b60648201526084016109a4565b600e546001600160a01b0383811691161461193f576001600160a01b0382166118b85760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016109a4565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b03841690811790915561193f908490836119aa565b505050565b600080611951838561332f565b9050838110156119a35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109a4565b9392505050565b6001600160a01b038316611a0c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a4565b6001600160a01b038216611a6d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611af55760405162461bcd60e51b81526004016109a490613347565b6001600160a01b038216611b1b5760405162461bcd60e51b81526004016109a49061338c565b80600003611b2f5761193f83836000612711565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611b9157506001600160a01b03841660009081526012602052604090205460ff16155b15611dc057600854600160a01b900460ff16611bef5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016109a4565b6001600160a01b03841660009081526014602052604090205460ff16158015611c3157506001600160a01b03851660009081526014602052604090205460ff16155b15611d09578115611ca057600954831115611ca05760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b60648201526084016109a4565b8015611d0957600a54831115611d095760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b60648201526084016109a4565b6001600160a01b03841660009081526015602052604090205460ff16611dc05760095483611d4c866001600160a01b031660009081526002602052604090205490565b611d56919061332f565b1115611dc05760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b60648201526084016109a4565b611dca828261281d565b600c543060009081526002602052604090205460085491111590600160a01b900460ff168015611df75750805b8015611e065750600b5460ff16155b8015611e1d5750601754600160201b900460ff1615155b8015611e4157506001600160a01b03851660009081526016602052604090205460ff165b8015611e6657506001600160a01b03861660009081526013602052604090205460ff16155b8015611e8b57506001600160a01b03851660009081526013602052604090205460ff16155b15611eb057600b805460ff19166001179055611ea5612a2a565b600b805460ff191690555b600b5460009060ff16158015611ecf5750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff1680611f1157506001600160a01b03861660009081526013602052604090205460ff165b15611f1a575060005b808015611f325750601754600160201b900460ff1615155b15611ff957601754600090606490611f5490600160201b900460ff1688613241565b611f5e9190613276565b601754909150600090606490611f7d9062010000900460ff1689613241565b611f879190613276565b9050611f9382886133cf565b9650611fa0893084612711565b8015611ff657611fb03082612159565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612004878787612711565b6008546001600160a01b031663e30443bc88612035816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561207b57600080fd5b505af192505050801561208c575060015b506008546001600160a01b031663e30443bc876120be816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561210457600080fd5b505af1925050508015612115575060015b5050505050505050565b600081848411156121435760405162461bcd60e51b81526004016109a49190612fd0565b50600061215084866133cf565b95945050505050565b6001600160a01b0382166121b95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a4565b6121f681604051806060016040528060228152602001613515602291396001600160a01b038516600090815260026020526040902054919061211f565b6001600160a01b03831660009081526002602052604090205560045461221c9082612d87565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff85811661010090920416146122f557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613585833981519152916122d69160481b906133e6565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461238e57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206135858339815191529161236b9160481b906133e6565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612424576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613585833981519152916123ff9160481b906133e6565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610c95576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613585833981519152916124989160481b906133e6565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461254857604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206135858339815191529161252e9160481b906133e6565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff8481166201000090920416146125dc57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613585833981519152916125bb9160481b906133e6565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612670576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206135858339815191529161264c9160481b906133e6565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610c95576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613585833981519152916126e39160481b906133e6565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166127375760405162461bcd60e51b81526004016109a490613347565b6001600160a01b03821661275d5760405162461bcd60e51b81526004016109a49061338c565b61279a81604051806060016040528060268152602001613537602691396001600160a01b038616600090815260026020526040902054919061211f565b6001600160a01b0380851660009081526002602052604080822093909355908416815220546127c99082611944565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ac29085815260200190565b6017805463ffffffff19169055811561288d576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b80156128f0576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b801580156128fc575081155b1561295e576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612988916101008104821691166132a7565b61299291906132a7565b61299c91906132a7565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001611104565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612a5f911686613241565b612a699190613276565b612a739190613276565b60175490915060009060ff600160201b8204811691612a9b9163010000009091041686613241565b612aa59190613276565b90506000612ab3828461332f565b612abd90866133cf565b9050612ac881612dc9565b6000612ad485476133cf565b60175490915060009060ff63010000008204811691620100008104821691612aff91600291166133fd565b612b0991906132a7565b612b1391906132a7565b601754612b2a9190600160201b900460ff1661341f565b60175460ff91821692506000916002918491612b47911686613241565b612b519190613276565b612b5b9190613276565b90506000612b6982856133cf565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ba4573d6000803e3d6000fd5b508615612c6357670de0b6b3a7640000471115612c175760405162461bcd60e51b815260206004820152602b60248201527f737761702062616c616e6365206d75737420626520677265617465722074686160448201526a1b881d1a1c995cda1bdb1960aa1b60648201526084016109a4565b612c218783612f23565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdb919061328a565b90508015612d7b57600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612d2957600080fd5b505af1158015612d3d573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612d7291815260200190565b60405180910390a15b50505050505050505050565b60006119a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061211f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dfe57612dfe613442565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b9190613458565b81600181518110612e8e57612e8e613442565b6001600160a01b039283166020918202929092010152600754612eb491309116846119aa565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612eed908590600090869030904290600401613475565b600060405180830381600087803b158015612f0757600080fd5b505af1158015612f1b573d6000803e3d6000fd5b505050505050565b600754612f3b9030906001600160a01b0316846119aa565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612fab573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c9591906134e6565b600060208083528351808285015260005b81811015612ffd57858101830151858201604001528201612fe1565b8181111561300f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cdc57600080fd5b6000806040838503121561304d57600080fd5b823561305881613025565b946020939093013593505050565b60006020828403121561307857600080fd5b5035919050565b60008060006060848603121561309457600080fd5b833561309f81613025565b925060208401356130af81613025565b929592945050506040919091013590565b6000602082840312156130d257600080fd5b81356119a381613025565b803560ff811681146130ee57600080fd5b919050565b6000806000806080858703121561310957600080fd5b613112856130dd565b9350613120602086016130dd565b925061312e604086016130dd565b915061313c606086016130dd565b905092959194509250565b8015158114610cdc57600080fd5b6000806040838503121561316857600080fd5b823561317381613025565b9150602083013561318381613147565b809150509250929050565b600080604083850312156131a157600080fd5b82356131ac81613025565b9150602083013561318381613025565b600181811c908216806131d057607f821691505b6020821081036131f057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561325b5761325b61322b565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261328557613285613260565b500490565b60006020828403121561329c57600080fd5b81516119a381613147565b600060ff821660ff84168060ff038211156132c4576132c461322b565b019392505050565b6000602082840312156132de57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b600082198211156133425761334261322b565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156133e1576133e161322b565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061341057613410613260565b8060ff84160491505092915050565b600060ff821660ff8416808210156134395761343961322b565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561346a57600080fd5b81516119a381613025565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134c55784516001600160a01b0316835293830193918301916001016134a0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134fb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206e2815860bd7011b0bacb04fa94e10b883d3676e02e99abdd36006570f97dc9764736f6c634300080f0033

Deployed Bytecode Sourcemap

17097:23728:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30771:350;;;;;;;;;;-1:-1:-1;30972:23:0;;;;;;;31010;;;;;;-1:-1:-1;;;31048:18:0;;;;;-1:-1:-1;;;31081:21:0;;;30771:350;;;;259:4:1;247:17;;;229:36;;301:17;;;296:2;281:18;;274:45;355:17;;;335:18;;;328:45;;;;409:17;;;404:2;389:18;;382:45;216:3;201:19;30771:350:0;;;;;;;;17403:28;;;;;;;;;;-1:-1:-1;17403:28:0;;;;-1:-1:-1;;;17403:28:0;;;;;;;;;603:14:1;;596:22;578:41;;566:2;551:18;17403:28:0;438:187:1;7798:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8853:210::-;;;;;;;;;;-1:-1:-1;8853:210:0;;;;;:::i;:::-;;:::i;22954:88::-;;;;;;;;;;;;;:::i;:::-;;17365:29;;;;;;;;;;-1:-1:-1;17365:29:0;;;;-1:-1:-1;;;;;17365:29:0;;;;;;-1:-1:-1;;;;;1877:32:1;;;1859:51;;1847:2;1832:18;17365:29:0;1688:228:1;17140:30:0;;;;;;;;;;-1:-1:-1;17140:30:0;;;;-1:-1:-1;;;;;17140:30:0;;;8119:108;;;;;;;;;;-1:-1:-1;8207:12:0;;8119:108;;;2290:25:1;;;2278:2;2263:18;8119:108:0;2144:177:1;28034:331:0;;;;;;;;;;-1:-1:-1;28034:331:0;;;;;:::i;:::-;;:::i;9071:454::-;;;;;;;;;;-1:-1:-1;9071:454:0;;;;;:::i;:::-;;:::i;28373:318::-;;;;;;;;;;-1:-1:-1;28373:318:0;;;;;:::i;:::-;;:::i;8018:93::-;;;;;;;;;;-1:-1:-1;8018:93:0;;8101:2;3114:36:1;;3102:2;3087:18;8018:93:0;2972:184:1;24271:128:0;;;;;;;;;;-1:-1:-1;24271:128:0;;;;;:::i;:::-;;:::i;9533:300::-;;;;;;;;;;-1:-1:-1;9533:300:0;;;;;:::i;:::-;;:::i;30165:81::-;;;;;;;;;;-1:-1:-1;30165:81:0;;;;;:::i;:::-;;:::i;17177:38::-;;;;;;;;;;;;;;;29243:98;;;;;;;;;;;;;:::i;29061:174::-;;;;;;;;;;-1:-1:-1;29061:174:0;;;;;:::i;:::-;;:::i;26801:834::-;;;;;;;;;;-1:-1:-1;26801:834:0;;;;;:::i;:::-;;:::i;30592:171::-;;;;;;;;;;-1:-1:-1;30592:171:0;;;;;:::i;:::-;;:::i;31129:355::-;;;;;;;;;;-1:-1:-1;31331:24:0;;;;;;;;;31370;;;;;;-1:-1:-1;;;31409:19:0;;;;;-1:-1:-1;;;31443:22:0;;;31129:355;;8235:177;;;;;;;;;;-1:-1:-1;8235:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;8386:18:0;8354:7;8386:18;;;:9;:18;;;;;;;8235:177;7206:148;;;;;;;;;;;;;:::i;24103:160::-;;;;;;;;;;;;;:::i;17756:30::-;;;;;;;;;;-1:-1:-1;17756:30:0;;;;-1:-1:-1;;;;;17756:30:0;;;29349:377;;;;;;;;;;-1:-1:-1;29349:377:0;;;;;:::i;:::-;;:::i;24823:391::-;;;;;;;;;;-1:-1:-1;24823:391:0;;;;;:::i;:::-;;:::i;24407:408::-;;;;;;;;;;-1:-1:-1;24407:408:0;;;;;:::i;:::-;;:::i;17557:50::-;;;;;;;;;;;;;;;;6992:79;;;;;;;;;;-1:-1:-1;7030:7:0;7057:6;-1:-1:-1;;;;;7057:6:0;6992:79;;7906:104;;;;;;;;;;;;;:::i;25979:814::-;;;;;;;;;;-1:-1:-1;25979:814:0;;;;;:::i;:::-;;:::i;9841:400::-;;;;;;;;;;-1:-1:-1;9841:400:0;;;;;:::i;:::-;;:::i;30400:184::-;;;;;;;;;;-1:-1:-1;30400:184:0;;;;;:::i;:::-;;:::i;8420:216::-;;;;;;;;;;-1:-1:-1;8420:216:0;;;;;:::i;:::-;;:::i;17496:54::-;;;;;;;;;;;;;;;;28699:354;;;;;;;;;;-1:-1:-1;28699:354:0;;;;;:::i;:::-;;:::i;18560:57::-;;;;;;;;;;-1:-1:-1;18560:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30254:138;;;;;;;;;;;;;:::i;27643:383::-;;;;;;;;;;-1:-1:-1;27643:383:0;;;;;:::i;:::-;;:::i;23740:355::-;;;;;;;;;;-1:-1:-1;23740:355:0;;;;;:::i;:::-;;:::i;17645:65::-;;;;;;;;;;;;;;;;23492:240;;;;;;;;;;-1:-1:-1;23492:240:0;;;;;:::i;:::-;;:::i;17719:30::-;;;;;;;;;;-1:-1:-1;17719:30:0;;;;-1:-1:-1;;;;;17719:30:0;;;25222:749;;;;;;;;;;-1:-1:-1;25222:749:0;;;;;:::i;:::-;;:::i;8644:201::-;;;;;;;;;;-1:-1:-1;8644:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;8810:18:0;;;8778:7;8810:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8644:201;7798:100;7852:13;7885:5;7878:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7798:100;:::o;8853:210::-;8972:4;8994:39;6477:10;9017:7;9026:6;8994:8;:39::i;:::-;-1:-1:-1;9051:4:0;8853:210;;;;:::o;22954:88::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;;;;;;;;;23011:16:::1;:23:::0;;-1:-1:-1;;;;23011:23:0::1;-1:-1:-1::0;;;23011:23:0::1;::::0;;22954:88::o;28034:331::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;28180:4:::1;28172;28151:13;8207:12:::0;;;8119:108;28151:13:::1;:17;::::0;28167:1:::1;28151:17;:::i;:::-;28150:26;;;;:::i;:::-;28149:35;;;;:::i;:::-;28137:8;:47;;28115:144;;;::::0;-1:-1:-1;;;28115:144:0;;6593:2:1;28115:144:0::1;::::0;::::1;6575:21:1::0;6632:2;6612:18;;;6605:30;6671:34;6651:18;;;6644:62;-1:-1:-1;;;6722:18:1;;;6715:45;6777:19;;28115:144:0::1;6391:411:1::0;28115:144:0::1;28312:11;::::0;28275:49:::1;::::0;28302:8;;28275:49:::1;::::0;;;::::1;28335:11;:22:::0;28034:331::o;9071:454::-;9211:4;9228:36;9238:6;9246:9;9257:6;9228:9;:36::i;:::-;9275:220;9298:6;6477:10;9346:138;9402:6;9346:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9346:19:0;;;;;;:11;:19;;;;;;;;6477:10;9346:33;;;;;;;;;;:37;:138::i;:::-;9275:8;:220::i;:::-;-1:-1:-1;9513:4:0;9071:454;;;;;:::o;28373:318::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;28514:4:::1;28506;28485:13;8207:12:::0;;;8119:108;28485:13:::1;:17;::::0;28501:1:::1;28485:17;:::i;:::-;28484:26;;;;:::i;:::-;28483:35;;;;:::i;:::-;28471:8;:47;;28449:133;;;::::0;-1:-1:-1;;;28449:133:0;;7009:2:1;28449:133:0::1;::::0;::::1;6991:21:1::0;7048:2;7028:18;;;7021:30;7087:34;7067:18;;;7060:62;-1:-1:-1;;;7138:18:1;;;7131:34;7182:19;;28449:133:0::1;6807:400:1::0;28449:133:0::1;28630:15;::::0;28598:48:::1;::::0;28620:8;;28598:48:::1;::::0;;;::::1;28657:15;:26:::0;28373:318::o;24271:128::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;24348:13:::1;::::0;:43:::1;::::0;-1:-1:-1;;;24348:43:0;;-1:-1:-1;;;;;1877:32:1;;;24348:43:0::1;::::0;::::1;1859:51:1::0;24348:13:0;;::::1;::::0;:34:::1;::::0;1832:18:1;;24348:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24271:128:::0;:::o;9533:300::-;6477:10;9648:4;9742:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9742:34:0;;;;;;;;;;9648:4;;9670:133;;9720:7;;9742:50;;9781:10;9742:38;:50::i;30165:81::-;30214:24;30220:10;30232:5;30214;:24::i;:::-;30165:81;:::o;29243:98::-;29280:13;;:53;;-1:-1:-1;;;29280:53:0;;29314:10;29280:53;;;7396:51:1;29280:13:0;7463:18:1;;;7456:50;-1:-1:-1;;;;;29280:13:0;;;;:25;;7369:18:1;;29280:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29061:174::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;29176:13:::1;::::0;:51:::1;::::0;-1:-1:-1;;;29176:51:0;;::::1;::::0;::::1;2290:25:1::0;;;-1:-1:-1;;;;;29176:13:0;;::::1;::::0;:41:::1;::::0;2263:18:1;;29176:51:0::1;2144:177:1::0;26801:834:0;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;27169:17;27131:14;27045:62:::1;27088:19:::0;27045;:62:::1;:::i;:::-;:100;;;;:::i;:::-;:141;;;;:::i;:::-;27024:162;;:1;:162;27002:236;;;::::0;-1:-1:-1;;;27002:236:0;;8178:2:1;27002:236:0::1;::::0;::::1;8160:21:1::0;8217:2;8197:18;;;8190:30;8256:26;8236:18;;;8229:54;8300:18;;27002:236:0::1;7976:348:1::0;27002:236:0::1;27249:183;27287:5;27307:19;27341;27375:14;27404:17;27249:23;:183::i;:::-;27448:179;::::0;-1:-1:-1;;;8531:28:1;;8584:2;8575:12;27448:179:0::1;;::::0;;;;;::::1;::::0;;259:4:1;247:17;;;229:36;;301:17;;;296:2;281:18;;274:45;355:17;;;335:18;;;328:45;409:17;;404:2;389:18;;382:45;27448:179:0;;;;::::1;::::0;;;;;216:3:1;27448:179:0;;::::1;26801:834:::0;;;;:::o;30592:171::-;30723:13;;:32;;-1:-1:-1;;;30723:32:0;;-1:-1:-1;;;;;1877:32:1;;;30723::0;;;1859:51:1;30691:7:0;;30723:13;;:23;;1832:18:1;;30723:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30716:39;30592:171;-1:-1:-1;;30592:171:0:o;7206:148::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;7313:1:::1;7297:6:::0;;7276:40:::1;::::0;-1:-1:-1;;;;;7297:6:0;;::::1;::::0;7276:40:::1;::::0;7313:1;;7276:40:::1;7344:1;7327:19:::0;;-1:-1:-1;;;;;;7327:19:0::1;::::0;;7206:148::o;24103:160::-;24155:4;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;17469:20:0::1;24172:15;:27:::0;;;24210:11:::1;:23:::0;24251:4:::1;24103:160:::0;:::o;29349:377::-;29445:21;29436:6;:30;:65;;;;-1:-1:-1;29486:15:0;;-1:-1:-1;;;;;29486:15:0;6477:10;-1:-1:-1;;;;;29470:31:0;;29436:65;29414:153;;;;-1:-1:-1;;;29414:153:0;;8989:2:1;29414:153:0;;;8971:21:1;9028:2;9008:18;;;9001:30;9067:34;9047:18;;;9040:62;-1:-1:-1;;;9118:18:1;;;9111:36;9164:19;;29414:153:0;8787:402:1;29414:153:0;29597:15;;:39;;29579:12;;-1:-1:-1;;;;;29597:15:0;;29625:6;;29579:12;29597:39;29579:12;29597:39;29625:6;29597:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29578:58;;;29651:7;29647:72;;;29680:27;;2290:25:1;;;29680:27:0;;2278:2:1;2263:18;29680:27:0;;;;;;;;29647:72;29403:323;29349:377;:::o;24823:391::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24965:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;24943:142:::1;;;;-1:-1:-1::0;;;24943:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25096:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;25096:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25161:45;;578:41:1;;;25161:45:0::1;::::0;551:18:1;25161:45:0::1;;;;;;;;24823:391:::0;;:::o;24407:408::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24554:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;24532:147:::1;;;;-1:-1:-1::0;;;24532:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24690:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;24690:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24760:47;;578:41:1;;;24760:47:0::1;::::0;551:18:1;24760:47:0::1;438:187:1::0;7906:104:0;7962:13;7995:7;7988:14;;;;;:::i;25979:814::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;26339:16;26302:13;26218:60:::1;26260:18:::0;26218;:60:::1;:::i;:::-;:97;;;;:::i;:::-;:137;;;;:::i;:::-;26197:158;;:1;:158;26175:231;;;::::0;-1:-1:-1;;;26175:231:0;;10017:2:1;26175:231:0::1;::::0;::::1;9999:21:1::0;10056:2;10036:18;;;10029:30;10095:25;10075:18;;;10068:53;10138:18;;26175:231:0::1;9815:347:1::0;26175:231:0::1;26417:178;26454:5;26474:18;26507;26540:13;26568:16;26417:22;:178::i;:::-;26611:174;::::0;-1:-1:-1;;;10369:27:1;;10421:2;10412:12;26611:174:0::1;10167:263:1::0;9841:400:0;9961:4;9983:228;6477:10;10033:7;10055:145;10112:15;10055:145;;;;;;;;;;;;;;;;;6477:10;10055:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10055:34:0;;;;;;;;;;;;:38;:145::i;30400:184::-;30531:13;;:45;;-1:-1:-1;;;30531:45:0;;-1:-1:-1;;;;;1877:32:1;;;30531:45:0;;;1859:51:1;30499:7:0;;30531:13;;:36;;1832:18:1;;30531:45:0;1688:228:1;8420:216:0;8542:4;8564:42;6477:10;8588:9;8599:6;8564:9;:42::i;28699:354::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;28817:23:::1;;28805:8;:35:::0;28783:136:::1;;;::::0;-1:-1:-1;;;28783:136:0;;10637:2:1;28783:136:0::1;::::0;::::1;10619:21:1::0;10676:2;10656:18;;;10649:30;10715:34;10695:18;;;10688:62;-1:-1:-1;;;10766:18:1;;;10759:49;10825:19;;28783:136:0::1;10435:415:1::0;28783:136:0::1;28976:23;::::0;28935:65:::1;::::0;28966:8;;28935:65:::1;::::0;;;::::1;29011:23;:34:::0;28699:354::o;30254:138::-;30343:13;;:41;;;-1:-1:-1;;;30343:41:0;;;;30316:7;;-1:-1:-1;;;;;30343:13:0;;:39;;:41;;;;;;;;;;;;;;:13;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30336:48;;30254:138;:::o;27643:383::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;27763:15:::1;::::0;-1:-1:-1;;;;;27763:15:0;;::::1;27741:38:::0;;::::1;::::0;27719:123:::1;;;::::0;-1:-1:-1;;;27719:123:0;;11057:2:1;27719:123:0::1;::::0;::::1;11039:21:1::0;11096:2;11076:18;;;11069:30;11135:34;11115:18;;;11108:62;-1:-1:-1;;;11186:18:1;;;11179:33;11229:19;;27719:123:0::1;10855:399:1::0;27719:123:0::1;27900:15;::::0;27858:59:::1;::::0;-1:-1:-1;;;;;27900:15:0;;::::1;::::0;27858:59;::::1;::::0;::::1;::::0;27900:15:::1;::::0;27858:59:::1;27928:15;:37:::0;;-1:-1:-1;;;;;;27928:37:0::1;-1:-1:-1::0;;;;;27928:37:0;;::::1;::::0;;::::1;::::0;;;27976:13:::1;::::0;:42:::1;::::0;-1:-1:-1;;;27976:42:0;;::::1;::::0;::::1;1859:51:1::0;;;;27976:13:0;;::::1;::::0;:30:::1;::::0;1832:18:1;;27976:42:0::1;1688:228:1::0;23740:355:0;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23872:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;23850:132:::1;;;::::0;-1:-1:-1;;;23850:132:0;;11461:2:1;23850:132:0::1;::::0;::::1;11443:21:1::0;11500:2;11480:18;;;11473:30;11539:34;11519:18;;;11512:62;-1:-1:-1;;;11590:18:1;;;11583:41;11641:19;;23850:132:0::1;11259:407:1::0;23850:132:0::1;-1:-1:-1::0;;;;;23993:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;23993:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24047:40;;578:41:1;;;24047:40:0::1;::::0;551:18:1;24047:40:0::1;438:187:1::0;23492:240:0;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23610:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;23610:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23674:50;;578:41:1;;;23674:50:0::1;::::0;551:18:1;23674:50:0::1;438:187:1::0;25222:749:0;25406:15;;-1:-1:-1;;;;;25406:15:0;6477:10;-1:-1:-1;;;;;25390:31:0;;25368:115;;;;-1:-1:-1;;;25368:115:0;;11873:2:1;25368:115:0;;;11855:21:1;11912:2;11892:18;;;11885:30;11951:34;11931:18;;;11924:62;-1:-1:-1;;;12002:18:1;;;11995:32;12044:19;;25368:115:0;11671:398:1;25368:115:0;25500:15;;-1:-1:-1;;;;;25500:37:0;;;:15;;:37;25496:468;;-1:-1:-1;;;;;25580:32:0;;25554:125;;;;-1:-1:-1;;;25554:125:0;;12276:2:1;25554:125:0;;;12258:21:1;12315:2;12295:18;;;12288:30;12354:33;12334:18;;;12327:61;12405:18;;25554:125:0;12074:355:1;25554:125:0;25803:15;;25699:134;;-1:-1:-1;;;12636:30:1;;-1:-1:-1;;;;;25803:15:0;;;;25699:134;;;12691:2:1;12682:12;25699:134:0;;;;;;;;;;;;;;25848:15;:36;;-1:-1:-1;;;;;;25848:36:0;-1:-1:-1;;;;;25848:36:0;;;;;;;;25899:53;;25908:18;;25945:6;25899:8;:53::i;:::-;25222:749;;;:::o;3184:181::-;3242:7;;3274:5;3278:1;3274;:5;:::i;:::-;3262:17;;3303:1;3298;:6;;3290:46;;;;-1:-1:-1;;;3290:46:0;;13040:2:1;3290:46:0;;;13022:21:1;13079:2;13059:18;;;13052:30;13118:29;13098:18;;;13091:57;13165:18;;3290:46:0;12838:351:1;3290:46:0;3356:1;3184:181;-1:-1:-1;;;3184:181:0:o;11704:378::-;-1:-1:-1;;;;;11840:19:0;;11832:68;;;;-1:-1:-1;;;11832:68:0;;13396:2:1;11832:68:0;;;13378:21:1;13435:2;13415:18;;;13408:30;13474:34;13454:18;;;13447:62;-1:-1:-1;;;13525:18:1;;;13518:34;13569:19;;11832:68:0;13194:400:1;11832:68:0;-1:-1:-1;;;;;11919:21:0;;11911:68;;;;-1:-1:-1;;;11911:68:0;;13801:2:1;11911:68:0;;;13783:21:1;13840:2;13820:18;;;13813:30;13879:34;13859:18;;;13852:62;-1:-1:-1;;;13930:18:1;;;13923:32;13972:19;;11911:68:0;13599:398:1;11911:68:0;-1:-1:-1;;;;;11990:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12042:32;;2290:25:1;;;12042:32:0;;2263:18:1;12042:32:0;;;;;;;;11704:378;;;:::o;31492:2899::-;-1:-1:-1;;;;;31624:18:0;;31616:68;;;;-1:-1:-1;;;31616:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31703:16:0;;31695:64;;;;-1:-1:-1;;;31695:64:0;;;;;;;:::i;:::-;31776:6;31786:1;31776:11;31772:93;;31804:28;31820:4;31826:2;31830:1;31804:15;:28::i;31772:93::-;-1:-1:-1;;;;;31896:31:0;;;31877:16;31896:31;;;:25;:31;;;;;;;;;31956:29;;;;;;;;;32017:35;;;:29;:35;;;;;;31896:31;;;;;31956:29;;;;32017:35;32016:36;:87;;;;-1:-1:-1;;;;;;32070:33:0;;;;;;:29;:33;;;;;;;;32069:34;32016:87;31998:1087;;;32138:16;;-1:-1:-1;;;32138:16:0;;;;32130:59;;;;-1:-1:-1;;;32130:59:0;;15014:2:1;32130:59:0;;;14996:21:1;15053:2;15033:18;;;15026:30;15092:32;15072:18;;;15065:60;15142:18;;32130:59:0;14812:354:1;32130:59:0;-1:-1:-1;;;;;32227:38:0;;;;;;:34;:38;;;;;;;;32226:39;:101;;;;-1:-1:-1;;;;;;32287:40:0;;;;;;:34;:40;;;;;;;;32286:41;32226:101;32204:611;;;32366:11;32362:212;;;32446:15;;32436:6;:25;;32402:152;;;;-1:-1:-1;;;32402:152:0;;15373:2:1;32402:152:0;;;15355:21:1;15412:2;15392:18;;;15385:30;15451:34;15431:18;;;15424:62;-1:-1:-1;;;15502:18:1;;;15495:39;15551:19;;32402:152:0;15171:405:1;32402:152:0;32598:10;32594:206;;;32677:11;;32667:6;:21;;32633:147;;;;-1:-1:-1;;;32633:147:0;;15783:2:1;32633:147:0;;;15765:21:1;15822:2;15802:18;;;15795:30;15861:34;15841:18;;;15834:62;-1:-1:-1;;;15912:18:1;;;15905:38;15960:19;;32633:147:0;15581:404:1;32633:147:0;-1:-1:-1;;;;;32836:33:0;;;;;;:29;:33;;;;;;;;32831:243;;32948:15;;32937:6;32921:13;32931:2;-1:-1:-1;;;;;8386:18:0;8354:7;8386:18;;;:9;:18;;;;;;;8235:177;32921:13;:22;;;;:::i;:::-;32920:43;;32890:168;;;;-1:-1:-1;;;32890:168:0;;16192:2:1;32890:168:0;;;16174:21:1;16231:2;16211:18;;;16204:30;16270:34;16250:18;;;16243:62;-1:-1:-1;;;16321:18:1;;;16314:49;16380:19;;32890:168:0;15990:415:1;32890:168:0;33097:37;33110:11;33123:10;33097:12;:37::i;:::-;33188:23;;33178:4;33145:12;8386:18;;;:9;:18;;;;;;33242:16;;-1:-1:-1;;33160:51:0;;-1:-1:-1;;;33242:16:0;;;;:40;;;;;33275:7;33242:40;:67;;;;-1:-1:-1;33300:9:0;;;;33299:10;33242:67;:97;;;;-1:-1:-1;33326:9:0;;-1:-1:-1;;;33326:9:0;;;;:13;;33242:97;:143;;;;-1:-1:-1;;;;;;33356:29:0;;;;;;:25;:29;;;;;;;;33242:143;:185;;;;-1:-1:-1;;;;;;33403:24:0;;;;;;:18;:24;;;;;;;;33402:25;33242:185;:225;;;;-1:-1:-1;;;;;;33445:22:0;;;;;;:18;:22;;;;;;;;33444:23;33242:225;33224:362;;;33494:9;:16;;-1:-1:-1;;33494:16:0;33506:4;33494:16;;;33525:17;:15;:17::i;:::-;33557:9;:17;;-1:-1:-1;;33557:17:0;;;33224:362;33614:9;;33598:12;;33614:9;;33613:10;:30;;;;-1:-1:-1;33627:16:0;;-1:-1:-1;;;33627:16:0;;;;33613:30;-1:-1:-1;;;;;33660:24:0;;;;;;:18;:24;;;;;;33598:45;;-1:-1:-1;33660:24:0;;;:50;;-1:-1:-1;;;;;;33688:22:0;;;;;;:18;:22;;;;;;;;33660:50;33656:98;;;-1:-1:-1;33737:5:0;33656:98;33768:7;:24;;;;-1:-1:-1;33779:9:0;;-1:-1:-1;;;33779:9:0;;;;:13;;33768:24;33764:414;;;33833:9;;33809:11;;33846:3;;33824:18;;-1:-1:-1;;;33833:9:0;;;;33824:6;:18;:::i;:::-;33823:26;;;;:::i;:::-;33895:8;;33809:40;;-1:-1:-1;33864:18:0;;33907:3;;33886:17;;33895:8;;;;;33886:6;:17;:::i;:::-;33885:25;;;;:::i;:::-;33864:46;-1:-1:-1;33934:12:0;33943:3;33934:6;:12;:::i;:::-;33925:21;;33961:41;33977:4;33991;33998:3;33961:15;:41::i;:::-;34023:14;;34019:148;;34058:38;34078:4;34085:10;34058:11;:38::i;:::-;34130:8;;34120:31;;;34130:8;;;;;;16710:36:1;;16777:2;16762:18;;16755:34;;;34120:31:0;;16683:18:1;34120:31:0;;;;;;;34019:148;33794:384;;33764:414;34188:33;34204:4;34210:2;34214:6;34188:15;:33::i;:::-;34238:13;;-1:-1:-1;;;;;34238:13:0;:24;34271:4;34278:15;34271:4;-1:-1:-1;;;;;8386:18:0;8354:7;8386:18;;;:9;:18;;;;;;;8235:177;34278:15;34238:56;;-1:-1:-1;;;;;;34238:56:0;;;;;;;-1:-1:-1;;;;;17008:32:1;;;34238:56:0;;;16990:51:1;17057:18;;;17050:34;16963:18;;34238:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34234:72;34320:13;;-1:-1:-1;;;;;34320:13:0;:24;34353:2;34358:13;34353:2;-1:-1:-1;;;;;8386:18:0;8354:7;8386:18;;;:9;:18;;;;;;;8235:177;34358:13;34320:52;;-1:-1:-1;;;;;;34320:52:0;;;;;;;-1:-1:-1;;;;;17008:32:1;;;34320:52:0;;;16990:51:1;17057:18;;;17050:34;16963:18;;34320:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34316:68;31605:2786;;;;31492:2899;;;:::o;3517:226::-;3637:7;3673:12;3665:6;;;;3657:29;;;;-1:-1:-1;;;3657:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3697:9:0;3709:5;3713:1;3709;:5;:::i;:::-;3697:17;3517:226;-1:-1:-1;;;;;3517:226:0:o;11245:451::-;-1:-1:-1;;;;;11329:21:0;;11321:67;;;;-1:-1:-1;;;11321:67:0;;17297:2:1;11321:67:0;;;17279:21:1;17336:2;17316:18;;;17309:30;17375:34;17355:18;;;17348:62;-1:-1:-1;;;17426:18:1;;;17419:31;17467:19;;11321:67:0;17095:397:1;11321:67:0;11480:105;11517:6;11480:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11480:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;11459:18:0;;;;;;:9;:18;;;;;:126;11611:12;;:24;;11628:6;11611:16;:24::i;:::-;11596:12;:39;11651:37;;2290:25:1;;;11677:1:0;;-1:-1:-1;;;;;11651:37:0;;;;;2278:2:1;2263:18;11651:37:0;;;;;;;11245:451;;:::o;35577:1538::-;35815:22;;;;:45;;;;:22;;;;;:45;35811:329;;35882:187;;-1:-1:-1;;;17699:33:1;;17757:2;17748:12;35882:187:0;;;;;;;;35960:22;;;;36040:14;;35882:187;;35960:22;;;;;;;;35882:187;;;;-1:-1:-1;;;;;;;;;;;35882:187:0;;;36040:14;;;35882:187;:::i;:::-;;;;;;;;36084:22;;;:44;;-1:-1:-1;;36084:44:0;;;;;;;;;35811:329;36154:22;;;;:45;;;;:22;;;;;:45;36150:329;;36221:187;;-1:-1:-1;;;18187:33:1;;18245:2;18236:12;36221:187:0;;;;;;;;36299:22;;;;36379:14;;36221:187;;36299:22;;;;;;;;36221:187;;;;-1:-1:-1;;;;;;;;;;;36221:187:0;;;36379:14;;;36221:187;:::i;:::-;;;;;;;;36423:22;;;:44;;-1:-1:-1;;36423:44:0;;;;;;;;;36150:329;36493:17;;;;:35;;;;-1:-1:-1;;;36493:17:0;;;;:35;36489:294;;36550:172;;-1:-1:-1;;;18461:28:1;;18514:2;18505:12;36550:172:0;;;;;;;;36623:17;;;;36693:14;;36550:172;;36623:17;-1:-1:-1;;;36623:17:0;;;;;;36550:172;;;;-1:-1:-1;;;;;;;;;;;36550:172:0;;;36693:14;;;36550:172;:::i;:::-;;;;;;;;36737:17;;;:34;;-1:-1:-1;;36737:34:0;-1:-1:-1;;;36737:34:0;;;;;;;36489:294;36797:20;;;;:41;;;;-1:-1:-1;;;36797:20:0;;;;:41;36793:315;;36860:181;;-1:-1:-1;;;18730:31:1;;18786:2;18777:12;36860:181:0;;;;;;;;36936:20;;;;37012:14;;36860:181;;36936:20;-1:-1:-1;;;36936:20:0;;;;;;36860:181;;;;-1:-1:-1;;;;;;;;;;;36860:181:0;;;37012:14;;;36860:181;:::i;:::-;;;;;;;;37056:20;;;:40;;;;;-1:-1:-1;;;37056:40:0;-1:-1:-1;;37056:40:0;;;;;;35577:1538;;;;;:::o;37123:1505::-;37356:21;;;;:43;;;;:21;;:43;37352:322;;37421:184;;-1:-1:-1;;;19002:32:1;;19059:2;19050:12;37421:184:0;;;;;;;;37498:21;;;;37576:14;;37421:184;;37498:21;;;;;37421:184;;;;-1:-1:-1;;;;;;;;;;;37421:184:0;;;37576:14;;;37421:184;:::i;:::-;;;;;;;;37620:21;;;:42;;-1:-1:-1;;37620:42:0;;;;;;;37352:322;37688:21;;;;:43;;;;:21;;;;;:43;37684:322;;37753:184;;-1:-1:-1;;;19275:32:1;;19332:2;19323:12;37753:184:0;;;;;;;;37830:21;;;;37908:14;;37753:184;;37830:21;;;;;;;;37753:184;;;;-1:-1:-1;;;;;;;;;;;37753:184:0;;;37908:14;;;37753:184;:::i;:::-;;;;;;;;37952:21;;;:42;;-1:-1:-1;;37952:42:0;;;;;;;;;37684:322;38020:16;;;;:33;;;;-1:-1:-1;;;38020:16:0;;;;:33;38016:287;;38075:169;;-1:-1:-1;;;19548:27:1;;19600:2;19591:12;38075:169:0;;;;;;;;38147:16;;;;38215:14;;38075:169;;38147:16;-1:-1:-1;;;38147:16:0;;;;;;38075:169;;;;-1:-1:-1;;;;;;;;;;;38075:169:0;;;38215:14;;;38075:169;:::i;:::-;;;;;;;;38259:16;;;:32;;-1:-1:-1;;38259:32:0;-1:-1:-1;;;38259:32:0;;;;;;;38016:287;38317:19;;;;:39;;;;-1:-1:-1;;;38317:19:0;;;;:39;38313:308;;38378:178;;-1:-1:-1;;;19816:30:1;;19871:2;19862:12;38378:178:0;;;;;;;;38453:19;;;;38527:14;;38378:178;;38453:19;-1:-1:-1;;;38453:19:0;;;;;;38378:178;;;;-1:-1:-1;;;;;;;;;;;38378:178:0;;;38527:14;;;38378:178;:::i;:::-;;;;;;;;38571:19;;;:38;;;;;-1:-1:-1;;;38571:38:0;-1:-1:-1;;38571:38:0;;;;;;37123:1505;;;;;:::o;10249:606::-;-1:-1:-1;;;;;10389:20:0;;10381:70;;;;-1:-1:-1;;;10381:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10470:23:0;;10462:71;;;;-1:-1:-1;;;10462:71:0;;;;;;;:::i;:::-;10622:108;10658:6;10622:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10622:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;10602:17:0;;;;;;;:9;:17;;;;;;:128;;;;10764:20;;;;;;;:32;;10789:6;10764:24;:32::i;:::-;-1:-1:-1;;;;;10741:20:0;;;;;;;:9;:20;;;;;;;:55;;;;10812:35;;;;;;;;;;10840:6;2290:25:1;;2278:2;2263:18;;2144:177;34399:1170:0;34475:13;:17;;-1:-1:-1;;34554:15:0;;;34582:231;;;;34630:23;;34614:13;:39;;34630:23;;;;-1:-1:-1;;34668:39:0;;;;;;;34630:23;34684;;;;;;34668:39;;;;;;;;-1:-1:-1;;34766:35:0;-1:-1:-1;;;34733:18:0;;;;34722:29;;;;-1:-1:-1;;34766:35:0;;-1:-1:-1;;;34780:21:0;;;;34766:35;;;;;;;;34582:231;34827:10;34823:234;;;34870:24;;34854:13;:40;;34870:24;;;;;;;;-1:-1:-1;;34909:40:0;;;;;;;34925:24;;;;;;34909:40;;;;;-1:-1:-1;;35009:36:0;-1:-1:-1;;;34975:19:0;;;;34964:30;;-1:-1:-1;;35009:36:0;;-1:-1:-1;;;35023:22:0;;;;;;;35009:36;;;;;;;34823:234;35072:10;35071:11;:27;;;;;35087:11;35086:12;35071:27;35067:251;;;35131:24;;35115:13;:40;;35131:24;;;;;;;;-1:-1:-1;;35170:40:0;;;;;;;35186:24;;;;;;35170:40;;;;;-1:-1:-1;;35270:36:0;-1:-1:-1;;;35236:19:0;;;;35225:30;;-1:-1:-1;;35270:36:0;;-1:-1:-1;;;35284:22:0;;;;;;;35270:36;;;;;;;35067:251;35383:11;;;;;;;;;35372:8;;;;;;35340:29;;35383:11;35356:13;;;;;35340;:29;:::i;:::-;:40;;;;:::i;:::-;:54;;;;:::i;:::-;35328:9;:66;;-1:-1:-1;;35328:66:0;;-1:-1:-1;;;35328:66:0;;;;;;;;;;;;;35410:151;;;35436:13;;;;;;;;;;20124:36:1;;35328:66:0;35464:13;;;;20191:2:1;20176:18;;20169:45;35492:8:0;;;;;20230:18:1;;;20223:45;;;;35515:11:0;;;;;20299:2:1;20284:18;;20277:45;35541:9:0;;;;;;20353:3:1;20338:19;;20331:46;35410:151:0;;20111:3:1;20096:19;35410:151:0;19885:498:1;38636:1706:0;38726:4;38682:23;8386:18;;;:9;:18;;;;;;38880:9;;38682:50;;-1:-1:-1;38771:21:0;;38743:25;;38905:1;;38880:9;-1:-1:-1;;;38880:9:0;;;;;38832:31;;38850:13;38682:50;38832:31;:::i;:::-;38831:58;;;;:::i;:::-;:75;;;;:::i;:::-;38978:9;;38805:101;;-1:-1:-1;38917:24:0;;38978:9;-1:-1:-1;;;38978:9:0;;;;;38945:29;;38963:11;;;;;38945:15;:29;:::i;:::-;38944:43;;;;:::i;:::-;38917:70;-1:-1:-1;38998:20:0;39053:34;38917:70;39053:15;:34;:::i;:::-;39021:67;;:15;:67;:::i;:::-;38998:90;;39101:31;39119:12;39101:17;:31::i;:::-;39145:27;39175:41;39199:17;39175:21;:41;:::i;:::-;39308:11;;39145:71;;-1:-1:-1;39227:19:0;;39308:11;;;;;;;39297:8;;;;;;39276:17;;39297:8;;39276:13;:17;:::i;:::-;39275:30;;;;:::i;:::-;:44;;;;:::i;:::-;39249:9;;:71;;;-1:-1:-1;;;39249:9:0;;;;:71;:::i;:::-;39383:13;;39227:93;;;;;-1:-1:-1;39331:26:0;;39440:1;;39227:93;;39361:35;;39383:13;39361:19;:35;:::i;:::-;39360:64;;;;:::i;:::-;:81;;;;:::i;:::-;39331:110;-1:-1:-1;39452:25:0;39480:42;39331:110;39480:19;:42;:::i;:::-;39541:15;;39533:52;;39452:70;;-1:-1:-1;;;;;;39541:15:0;;39533:52;;;;;39452:70;;39541:15;39533:52;39541:15;39533:52;39452:70;39541:15;39533:52;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39600:19:0;;39596:441;;39664:10;39640:21;:34;39636:390;;;39695:53;;-1:-1:-1;;;39695:53:0;;20960:2:1;39695:53:0;;;20942:21:1;20999:2;20979:18;;;20972:30;21038:34;21018:18;;;21011:62;-1:-1:-1;;;21089:18:1;;;21082:41;21140:19;;39695:53:0;20758:407:1;39636:390:0;39789:50;39803:15;39820:18;39789:13;:50::i;:::-;39863:147;;;21372:25:1;;;21428:2;21413:18;;21406:34;;;21456:18;;;21449:34;;;39863:147:0;;21360:2:1;21345:18;39863:147:0;;;;;;;39636:390;40115:13;;40062:109;;-1:-1:-1;;;40062:109:0;;-1:-1:-1;;;;;40115:13:0;;;40062:109;;;16990:51:1;17057:18;;;17050:34;;;40047:12:0;;40077:4;;40062:30;;16963:18:1;;40062:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40047:124;;40186:7;40182:153;;;40210:13;;:62;;-1:-1:-1;;;40210:62:0;;;;;2290:25:1;;;-1:-1:-1;;;;;40210:13:0;;;;:44;;2263:18:1;;40210:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40292:31;40306:16;40292:31;;;;2290:25:1;;2278:2;2263:18;;2144:177;40292:31:0;;;;;;;;40182:153;38671:1671;;;;;;;;;;38636:1706::o;3373:136::-;3431:7;3458:43;3462:1;3465;3458:43;;;;;;;;;;;;;;;;;:3;:43::i;40350:472::-;40441:16;;;40455:1;40441:16;;;;;;;;40417:21;;40441:16;;;;;;;;;;-1:-1:-1;40441:16:0;40417:40;;40486:4;40468;40473:1;40468:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40468:23:0;;;:7;;;;;;;;;;:23;;;;40512:15;;:22;;;-1:-1:-1;;;40512:22:0;;;;:15;;;;;:20;;:22;;;;;40468:7;;40512:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40502:4;40507:1;40502:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40502:32:0;;;:7;;;;;;;;;:32;40577:15;;40545:62;;40562:4;;40577:15;40595:11;40545:8;:62::i;:::-;40618:15;;:196;;-1:-1:-1;;;40618:196:0;;-1:-1:-1;;;;;40618:15:0;;;;:66;;:196;;40699:11;;40618:15;;40741:4;;40768;;40788:15;;40618:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40406:416;40350:472;:::o;29734:423::-;29848:15;;29816:62;;29833:4;;-1:-1:-1;;;;;29848:15:0;29866:11;29816:8;:62::i;:::-;29889:15;;30093;;29889:260;;-1:-1:-1;;;29889:260:0;;29961:4;29889:260;;;23619:34:1;23669:18;;;23662:34;;;29889:15:0;23712:18:1;;;23705:34;;;23755:18;;;23748:34;-1:-1:-1;;;;;30093:15:0;;;23798:19:1;;;23791:44;30123:15:0;23851:19:1;;;23844:35;29889:15:0;;;:31;;29928:9;;23553:19:1;;29889:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;630:597:1:-;742:4;771:2;800;789:9;782:21;832:6;826:13;875:6;870:2;859:9;855:18;848:34;900:1;910:140;924:6;921:1;918:13;910:140;;;1019:14;;;1015:23;;1009:30;985:17;;;1004:2;981:26;974:66;939:10;;910:140;;;1068:6;1065:1;1062:13;1059:91;;;1138:1;1133:2;1124:6;1113:9;1109:22;1105:31;1098:42;1059:91;-1:-1:-1;1211:2:1;1190:15;-1:-1:-1;;1186:29:1;1171:45;;;;1218:2;1167:54;;630:597;-1:-1:-1;;;630:597:1:o;1232:131::-;-1:-1:-1;;;;;1307:31:1;;1297:42;;1287:70;;1353:1;1350;1343:12;1368:315;1436:6;1444;1497:2;1485:9;1476:7;1472:23;1468:32;1465:52;;;1513:1;1510;1503:12;1465:52;1552:9;1539:23;1571:31;1596:5;1571:31;:::i;:::-;1621:5;1673:2;1658:18;;;;1645:32;;-1:-1:-1;;;1368:315:1:o;2326:180::-;2385:6;2438:2;2426:9;2417:7;2413:23;2409:32;2406:52;;;2454:1;2451;2444:12;2406:52;-1:-1:-1;2477:23:1;;2326:180;-1:-1:-1;2326:180:1:o;2511:456::-;2588:6;2596;2604;2657:2;2645:9;2636:7;2632:23;2628:32;2625:52;;;2673:1;2670;2663:12;2625:52;2712:9;2699:23;2731:31;2756:5;2731:31;:::i;:::-;2781:5;-1:-1:-1;2838:2:1;2823:18;;2810:32;2851:33;2810:32;2851:33;:::i;:::-;2511:456;;2903:7;;-1:-1:-1;;;2957:2:1;2942:18;;;;2929:32;;2511:456::o;3161:247::-;3220:6;3273:2;3261:9;3252:7;3248:23;3244:32;3241:52;;;3289:1;3286;3279:12;3241:52;3328:9;3315:23;3347:31;3372:5;3347:31;:::i;3621:156::-;3687:20;;3747:4;3736:16;;3726:27;;3716:55;;3767:1;3764;3757:12;3716:55;3621:156;;;:::o;3782:393::-;3860:6;3868;3876;3884;3937:3;3925:9;3916:7;3912:23;3908:33;3905:53;;;3954:1;3951;3944:12;3905:53;3977:27;3994:9;3977:27;:::i;:::-;3967:37;;4023:36;4055:2;4044:9;4040:18;4023:36;:::i;:::-;4013:46;;4078:36;4110:2;4099:9;4095:18;4078:36;:::i;:::-;4068:46;;4133:36;4165:2;4154:9;4150:18;4133:36;:::i;:::-;4123:46;;3782:393;;;;;;;:::o;4180:118::-;4266:5;4259:13;4252:21;4245:5;4242:32;4232:60;;4288:1;4285;4278:12;4303:382;4368:6;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:1;4595:18;;4582:32;4623:30;4582:32;4623:30;:::i;:::-;4672:7;4662:17;;;4303:382;;;;;:::o;4690:388::-;4758:6;4766;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;4874:9;4861:23;4893:31;4918:5;4893:31;:::i;:::-;4943:5;-1:-1:-1;5000:2:1;4985:18;;4972:32;5013:33;4972:32;5013:33;:::i;5083:380::-;5162:1;5158:12;;;;5205;;;5226:61;;5280:4;5272:6;5268:17;5258:27;;5226:61;5333:2;5325:6;5322:14;5302:18;5299:38;5296:161;;5379:10;5374:3;5370:20;5367:1;5360:31;5414:4;5411:1;5404:15;5442:4;5439:1;5432:15;5296:161;;5083:380;;;:::o;5468:356::-;5670:2;5652:21;;;5689:18;;;5682:30;5748:34;5743:2;5728:18;;5721:62;5815:2;5800:18;;5468:356::o;5829:127::-;5890:10;5885:3;5881:20;5878:1;5871:31;5921:4;5918:1;5911:15;5945:4;5942:1;5935:15;5961:168;6001:7;6067:1;6063;6059:6;6055:14;6052:1;6049:21;6044:1;6037:9;6030:17;6026:45;6023:71;;;6074:18;;:::i;:::-;-1:-1:-1;6114:9:1;;5961:168::o;6134:127::-;6195:10;6190:3;6186:20;6183:1;6176:31;6226:4;6223:1;6216:15;6250:4;6247:1;6240:15;6266:120;6306:1;6332;6322:35;;6337:18;;:::i;:::-;-1:-1:-1;6371:9:1;;6266:120::o;7517:245::-;7584:6;7637:2;7625:9;7616:7;7612:23;7608:32;7605:52;;;7653:1;7650;7643:12;7605:52;7685:9;7679:16;7704:28;7726:5;7704:28;:::i;7767:204::-;7805:3;7841:4;7838:1;7834:12;7873:4;7870:1;7866:12;7908:3;7902:4;7898:14;7893:3;7890:23;7887:49;;;7916:18;;:::i;:::-;7952:13;;7767:204;-1:-1:-1;;;7767:204:1:o;8598:184::-;8668:6;8721:2;8709:9;8700:7;8696:23;8692:32;8689:52;;;8737:1;8734;8727:12;8689:52;-1:-1:-1;8760:16:1;;8598:184;-1:-1:-1;8598:184:1:o;9404:406::-;9606:2;9588:21;;;9645:2;9625:18;;;9618:30;9684:34;9679:2;9664:18;;9657:62;-1:-1:-1;;;9750:2:1;9735:18;;9728:40;9800:3;9785:19;;9404:406::o;12705:128::-;12745:3;12776:1;12772:6;12769:1;12766:13;12763:39;;;12782:18;;:::i;:::-;-1:-1:-1;12818:9:1;;12705:128::o;14002:401::-;14204:2;14186:21;;;14243:2;14223:18;;;14216:30;14282:34;14277:2;14262:18;;14255:62;-1:-1:-1;;;14348:2:1;14333:18;;14326:35;14393:3;14378:19;;14002:401::o;14408:399::-;14610:2;14592:21;;;14649:2;14629:18;;;14622:30;14688:34;14683:2;14668:18;;14661:62;-1:-1:-1;;;14754:2:1;14739:18;;14732:33;14797:3;14782:19;;14408:399::o;16410:125::-;16450:4;16478:1;16475;16472:8;16469:34;;;16483:18;;:::i;:::-;-1:-1:-1;16520:9:1;;16410:125::o;17771:209::-;-1:-1:-1;;17935:38:1;;;;17917:57;;17905:2;17890:18;;17771:209::o;20388:165::-;20426:1;20460:4;20457:1;20453:12;20484:3;20474:37;;20491:18;;:::i;:::-;20543:3;20536:4;20533:1;20529:12;20525:22;20520:27;;;20388:165;;;;:::o;20558:195::-;20596:4;20633;20630:1;20626:12;20665:4;20662:1;20658:12;20690:3;20685;20682:12;20679:38;;;20697:18;;:::i;:::-;20734:13;;;20558:195;-1:-1:-1;;;20558:195:1:o;21905:127::-;21966:10;21961:3;21957:20;21954:1;21947:31;21997:4;21994:1;21987:15;22021:4;22018:1;22011:15;22037:251;22107:6;22160:2;22148:9;22139:7;22135:23;22131:32;22128:52;;;22176:1;22173;22166:12;22128:52;22208:9;22202:16;22227:31;22252:5;22227:31;:::i;22293:980::-;22555:4;22603:3;22592:9;22588:19;22634:6;22623:9;22616:25;22660:2;22698:6;22693:2;22682:9;22678:18;22671:34;22741:3;22736:2;22725:9;22721:18;22714:31;22765:6;22800;22794:13;22831:6;22823;22816:22;22869:3;22858:9;22854:19;22847:26;;22908:2;22900:6;22896:15;22882:29;;22929:1;22939:195;22953:6;22950:1;22947:13;22939:195;;;23018:13;;-1:-1:-1;;;;;23014:39:1;23002:52;;23109:15;;;;23074:12;;;;23050:1;22968:9;22939:195;;;-1:-1:-1;;;;;;;23190:32:1;;;;23185:2;23170:18;;23163:60;-1:-1:-1;;;23254:3:1;23239:19;23232:35;23151:3;22293:980;-1:-1:-1;;;22293:980:1:o;23890:306::-;23978:6;23986;23994;24047:2;24035:9;24026:7;24022:23;24018:32;24015:52;;;24063:1;24060;24053:12;24015:52;24092:9;24086:16;24076:26;;24142:2;24131:9;24127:18;24121:25;24111:35;;24186:2;24175:9;24171:18;24165:25;24155:35;;23890:306;;;;;:::o

Swarm Source

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