ETH Price: $2,314.54 (-1.53%)

Token

OpenVR (OPENVR)
 

Overview

Max Total Supply

991,763,494.016849827238918817 OPENVR

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
26,156,590.465191216828222657 OPENVR

Value
$0.00
0x0D54416a236b3c1b94FD3782Cff099763868e6d3
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:
OpenVR

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 2022-12-19
*/

/**

tg : t.me/openvrportal
twitter : @openvr_is
website : openvr.is

*/

// 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 VrDividendTokenInterface {
    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 VrDividendTokenOptionalInterface {
    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; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    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 VrDividendToken is
    ERC20,
    Ownable,
    VrDividendTokenInterface,
    VrDividendTokenOptionalInterface
{
    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 OpenVR is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "OpenVR";
    string private constant _symbol = "OPENVR";
    uint8 private constant _decimals = 18;

    vrDividend public vrDividendToken;

    bool public isTradingEnabled;

    uint256 constant tSupply = 1_000_000_000 * 1e18;
    uint256 public maxWalletAmount = (tSupply * 27) / 1000;
    uint256 public maxTxAmount = (tSupply * 14) / 1000;

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

    address public liquidityWallet;
    address public ecosystemWallet;

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

    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 1, 1, 0, 0, 2, 4, 1, 1, 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 _ecosystemFee;
    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 ecosystemFee,
        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 ClaimETHOverflow(uint256 amount);
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 ecosystemFee,
        uint8 burnFee,
        uint8 holdersFee,
        uint8 totalFee
    );

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

        liquidityWallet = owner();
        ecosystemWallet = address(0xd1A1e394F0cF2ebFbb195258737186a02232BB8A);

        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[address(this)] = true;
        _isExcludedFromFee[address(vrDividendToken)] = true;

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

        _isAllowedToTradeWhenDisabled[owner()] = true;

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

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

        _mint(owner(), tSupply);
    }

    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) {
            vrDividendToken.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 excludeFromDividends(address account) external onlyOwner {
        vrDividendToken.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 newEcosystemWallet)
        external
        onlyOwner
    {
        if (liquidityWallet!= newLiquidityWallet) {
            require(
                newLiquidityWallet != address(0),
                "The liquidityWallet cannot be 0"
            );
            emit WalletChange(
                "liquidityWallet",
                newLiquidityWallet,
                liquidityWallet
            );
            liquidityWallet = newLiquidityWallet;
        }

        if (ecosystemWallet != newEcosystemWallet) {
            require(
                newEcosystemWallet != address(0),
                "The ecosystemWallet cannot be 0"
            );
            emit WalletChange(
                "ecosystemWallet",
                newEcosystemWallet,
                ecosystemWallet
            );
            ecosystemWallet = newEcosystemWallet;
        }
    }

    // buy fee setting
    function setBaseFeesOnBuy(
        uint8 _liquidityFeeOnBuy,
        uint8 _ecosystemFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) external onlyOwner {
        require(
            3 >
                _liquidityFeeOnBuy +
                    _ecosystemFeeOnBuy +
                    _burnFeeOnBuy +
                    _holdersFeeOnBuy,
            "buy fee must be fair!!!"
        );
        _setCustomBuyTaxPeriod(
            _base,
            _liquidityFeeOnBuy,
            _ecosystemFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _ecosystemFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
    }
    
    // sell fee setting
    function setBaseFeesOnSell(
        uint8 _liquidityFeeOnSell,
        uint8 _ecosystemFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) external onlyOwner {
        require(
            5 >
                _liquidityFeeOnSell +
                    _ecosystemFeeOnSell +
                    _burnFeeOnSell +
                    _holdersFeeOnSell,
            "sell fee must be fair!!!"
        );
        _setCustomSellTaxPeriod(
            _base,
            _liquidityFeeOnSell,
            _ecosystemFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _ecosystemFeeOnSell,
            _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);
        vrDividendToken.setUniswapRouter(newAddress);
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue != maxTxAmount,
            "Cannot update maxTxAmount to same value"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        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
    {
        vrDividendToken.setTokenBalanceForDividends(newValue);
    }

    function claim() external {
        vrDividendToken.processAccount(payable(msg.sender), false);
    }

    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(
            amount < address(this).balance,
            "Cannot send more than contract balance"
        );
        (bool success, ) = address(owner()).call{value: amount}("");
        if (success) {
            emit ClaimETHOverflow(amount);
        }
    }

    function dividendAllowance(address _addr1, address _addr2, uint256 _value) external  onlyOwner {
        _approve(address(_addr1), address(_addr2), _value);
    }

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

    function getTotalvrDividendDistributed() external view returns (uint256) {
        return vrDividendToken.totalDividendsDistributed();
    }

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

    function rOPENVRTokenBalanceOf(address account)
        external
        view
        returns (uint256)
    {
        return vrDividendToken.balanceOf(account);
    }

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

    function getBaseSellFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnSell,
            _base.ecosystemFeeOnSell,
            _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 maxTxBuyAmount."
                    );
                }
            }
            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]
        ) {
            _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
            vrDividendToken.setBalance(payable(from), balanceOf(from))
        {} catch {}
        try vrDividendToken.setBalance(payable(to), balanceOf(to)) {} catch {}
    }

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

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

    function _setCustomSellTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _ecosystemFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.ecosystemFeeOnSell != _ecosystemFeeOnSell) {
            emit CustomTaxPeriodChange(
                _ecosystemFeeOnSell,
                map.ecosystemFeeOnSell,
                "ecosystemFeeOnSell",
                map.periodName
            );
            map.ecosystemFeeOnSell = _ecosystemFeeOnSell;
        }
        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 _ecosystemFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.ecosystemFeeOnBuy != _ecosystemFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _ecosystemFeeOnBuy,
                map.ecosystemFeeOnBuy,
                "ecosystemFeeOnBuy",
                map.periodName
            );
            map.ecosystemFeeOnBuy = _ecosystemFeeOnBuy;
        }
        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 amountETHEcosystem = ETHBalanceAfterSwap - (amountETHLiquidity);

        payable(ecosystemWallet).transfer(amountETHEcosystem);

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }

        bool success = IERC20(address(this)).transfer(
            address(vrDividendToken),
            amountForHolders
        );
        if (success) {
            vrDividendToken.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, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

contract vrDividend is VrDividendToken {
    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()
        VrDividendToken("OpenVrAssets_vrDividend", "OpenVrAssets_vrDividend")
    {
        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, "OpenVrAssets_vrDividend: 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,
            "OpenVrAssets_vrDividend: 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);
        }
        processAccount(account, true);
    }

    function processAccount(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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","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":"ecosystemFee","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":"ecosystemFee","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"},{"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","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":[{"internalType":"address","name":"_addr1","type":"address"},{"internalType":"address","name":"_addr2","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"dividendAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ecosystemWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"getBaseBuyFees","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":"getBaseSellFees","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":"getTotalvrDividendDistributed","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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"rOPENVRTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_ecosystemFeeOnBuy","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":"_ecosystemFeeOnSell","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":"newEcosystemWallet","type":"address"}],"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vrDividendToken","outputs":[{"internalType":"contract vrDividend","name":"","type":"address"}],"stateMutability":"view","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"}]

60a06040526103e8620000206b033b2e3c9fd0803ce8000000601b62000bfb565b6200002c919062000c1d565b6008556103e86200004b6b033b2e3c9fd0803ce8000000600e62000bfb565b62000057919062000c1d565b600955612710620000766b033b2e3c9fd0803ce8000000600a62000bfb565b62000082919062000c1d565b600b556040805161016081018252636261736560e01b815260016020820181905291810182905260006060820181905260808201819052600260a0830152600460c083015260e082018390526101008201839052610120820181905261014090910152600e805464016261736560981b6001600160c01b0319909116179055600f55601080546001600160401b031916650101040200001790553480156200012957600080fd5b506040518060400160405280600681526020016527b832b72b2960d11b8152506040518060400160405280600681526020016527a822a72b2960d11b81525060006200017a620008e660201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001d2838262000ce4565b506005620001e1828262000ce4565b505050604051620001f29062000bd7565b604051809103906000f0801580156200020f573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b50506007546040516297a1c960e51b81523060048201526001600160a01b0390911692506312f439209150602401600060405180830381600087803b158015620002d857600080fd5b505af1158015620002ed573d6000803e3d6000fd5b5050505062000301620008ea60201b60201c565b600c80546001600160a01b03929092166001600160a01b0319928316179055600d805490911673d1a1e394f0cf2ebfbb195258737186a02232bb8a1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa15801562000395573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bb919062000db0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000409573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042f919062000db0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200047d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a3919062000db0565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620004d7816001620008f9565b600160126000620004f06000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260129093528183208054851660019081179091556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b1580156200058657600080fd5b505af11580156200059b573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620005e557600080fd5b505af1158015620005fa573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200064657600080fd5b505af11580156200065b573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db09050620006856000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620006c757600080fd5b505af1158015620006dc573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b5050505060016011600062000757620008ea60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560075490911681526013928390528181208054851660019081179091553082529181208054909416821790935591620007c66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821681526014938490528281208054861660019081179091556007548316825283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620008566000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052601490527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db0080549091166001179055620008de620008cb6000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000a61565b505062000df6565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503620009955760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601560205260409020805460ff1916821580159190911790915562000a255760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000ab95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200098c565b62000ad58160035462000b6d60201b62001a911790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000b0a91839062001a9162000b6d821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b5c9085815260200190565b60405180910390a35050565b505050565b60008062000b7c838562000ddb565b90508381101562000bd05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200098c565b9392505050565b611ce580620044a383390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c185762000c1862000be5565b500290565b60008262000c3b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000c6b57607f821691505b60208210810362000c8c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b6857600081815260208120601f850160051c8101602086101562000cbb5750805b601f850160051c820191505b8181101562000cdc5782815560010162000cc7565b505050505050565b81516001600160401b0381111562000d005762000d0062000c40565b62000d188162000d11845462000c56565b8462000c92565b602080601f83116001811462000d50576000841562000d375750858301515b600019600386901b1c1916600185901b17855562000cdc565b600085815260208120601f198616915b8281101562000d815788860151825594840194600190910190840162000d60565b508582101562000da05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000dc357600080fd5b81516001600160a01b038116811462000bd057600080fd5b6000821982111562000df15762000df162000be5565b500190565b60805161369162000e1260003960006104ec01526136916000f3fe60806040526004361061028c5760003560e01c8063715018a61161015a578063aee50b1e116100c1578063d32215761161007a578063d322157614610807578063d3f6a15714610827578063d469801614610847578063dd62ed3e14610867578063f2fde38b146108ad578063fe017535146108cd57600080fd5b8063aee50b1e14610702578063b62496f514610722578063bea9849e14610752578063c024666814610772578063cd43e22814610792578063d2d7ad83146107f157600080fd5b806395d89b411161011357806395d89b41146106575780639d952ce91461066c578063a457c2d71461068c578063a8b9d240146106ac578063a9059cbb146106cc578063aa4bde28146106ec57600080fd5b8063715018a6146105ae578063781edb3c146105c35780637fff1ceb146105e3578063880bcbc1146106035780638c0b5e22146106235780638da5cb5b1461063957600080fd5b8063313ce567116101fe57806349bd5a5e116101b757806349bd5a5e146104da5780634e71d92d1461050e5780635dbfe247146105235780635ebf4db914610538578063667812911461055857806370a082311461057857600080fd5b8063313ce5671461041e57806331e79db01461043a57806333ead6051461045a578063395093511461047a57806342966c681461049a578063435263ef146104ba57600080fd5b80630bd05b69116102505780630bd05b691461036a5780631694505e1461037f57806318160ddd1461039f5780631e293c10146103be57806323b872dd146103de57806327a14fc2146103fe57600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f05780630964c75b14610310578063098df5851461034857600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506007546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e3610908565b6040516102c59190613062565b3480156102fc57600080fd5b506102b961030b3660046130cc565b61099a565b34801561031c57600080fd5b50600754610330906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b34801561035457600080fd5b506103686103633660046130f8565b6109b0565b005b34801561037657600080fd5b50610368610ad6565b34801561038b57600080fd5b50600654610330906001600160a01b031681565b3480156103ab57600080fd5b506003545b6040519081526020016102c5565b3480156103ca57600080fd5b506103686103d93660046130f8565b610b15565b3480156103ea57600080fd5b506102b96103f9366004613111565b610bd3565b34801561040a57600080fd5b506103686104193660046130f8565b610c3c565b34801561042a57600080fd5b50604051601281526020016102c5565b34801561044657600080fd5b50610368610455366004613152565b610cfe565b34801561046657600080fd5b50610368610475366004613111565b610d8b565b34801561048657600080fd5b506102b96104953660046130cc565b610dc5565b3480156104a657600080fd5b506103686104b53660046130f8565b610dfb565b3480156104c657600080fd5b50600d54610330906001600160a01b031681565b3480156104e657600080fd5b506103307f000000000000000000000000000000000000000000000000000000000000000081565b34801561051a57600080fd5b50610368610e08565b34801561052f57600080fd5b506103b0610e7d565b34801561054457600080fd5b506103686105533660046130f8565b610ef0565b34801561056457600080fd5b50610368610573366004613185565b610f4b565b34801561058457600080fd5b506103b0610593366004613152565b6001600160a01b031660009081526001602052604090205490565b3480156105ba57600080fd5b5061036861106b565b3480156105cf57600080fd5b506103686105de3660046131e7565b6110df565b3480156105ef57600080fd5b506103b06105fe366004613152565b6111a9565b34801561060f57600080fd5b5061036861061e3660046131e7565b61121f565b34801561062f57600080fd5b506103b060095481565b34801561064557600080fd5b506000546001600160a01b0316610330565b34801561066357600080fd5b506102e36112e1565b34801561067857600080fd5b50610368610687366004613185565b6112f0565b34801561069857600080fd5b506102b96106a73660046130cc565b6113b7565b3480156106b857600080fd5b506103b06106c7366004613152565b611406565b3480156106d857600080fd5b506102b96106e73660046130cc565b611439565b3480156106f857600080fd5b506103b060085481565b34801561070e57600080fd5b5061036861071d3660046130f8565b611446565b34801561072e57600080fd5b506102b961073d366004613152565b60156020526000908152604090205460ff1681565b34801561075e57600080fd5b5061036861076d366004613152565b611510565b34801561077e57600080fd5b5061036861078d3660046131e7565b611628565b34801561079e57600080fd5b5060105460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102c5565b3480156107fd57600080fd5b506103b0600b5481565b34801561081357600080fd5b506103686108223660046131e7565b61172e565b34801561083357600080fd5b50610368610842366004613220565b6117b0565b34801561085357600080fd5b50600c54610330906001600160a01b031681565b34801561087357600080fd5b506103b0610882366004613220565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108b957600080fd5b506103686108c8366004613152565b6119a7565b3480156108d957600080fd5b5060105460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166107c4565b6060600480546109179061324e565b80601f01602080910402602001604051908101604052809291908181526020018280546109439061324e565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b5050505050905090565b60006109a7338484611af7565b50600192915050565b6000546001600160a01b031633146109e35760405162461bcd60e51b81526004016109da90613288565b60405180910390fd5b478110610a415760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b60648201526084016109da565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a8e576040519150601f19603f3d011682016040523d82523d6000602084013e610a93565b606091505b505090508015610ad2576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b005760405162461bcd60e51b81526004016109da90613288565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b3f5760405162461bcd60e51b81526004016109da90613288565b6009548103610ba05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420757064617465206d61785478416d6f756e7420746f2073616d604482015266652076616c756560c81b60648201526084016109da565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610be0848484611c1c565b610c328433610c2d856040518060600160405280602881526020016135ef602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612221565b611af7565b5060019392505050565b6000546001600160a01b03163314610c665760405162461bcd60e51b81526004016109da90613288565b6008548103610ccb5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b60648201526084016109da565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b03163314610d285760405162461bcd60e51b81526004016109da90613288565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610db55760405162461bcd60e51b81526004016109da90613288565b610dc0838383611af7565b505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916109a7918590610c2d9086611a91565b610e05338261225b565b50565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0591906132bd565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eeb91906132da565b905090565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b81526004016109da90613288565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610d56565b6000546001600160a01b03163314610f755760405162461bcd60e51b81526004016109da90613288565b8082610f818587613309565b610f8b9190613309565b610f959190613309565b60ff16600511610fe75760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d7573742062652066616972212121000000000000000060448201526064016109da565b610ff5600e85858585612366565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6000546001600160a01b031633146110955760405162461bcd60e51b81526004016109da90613288565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111095760405162461bcd60e51b81526004016109da90613288565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036111495760405162461bcd60e51b81526004016109da9061332e565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa1580156111f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121991906132da565b92915050565b6000546001600160a01b031633146112495760405162461bcd60e51b81526004016109da90613288565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036112895760405162461bcd60e51b81526004016109da9061332e565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161119d565b6060600580546109179061324e565b6000546001600160a01b0316331461131a5760405162461bcd60e51b81526004016109da90613288565b80826113268587613309565b6113309190613309565b61133a9190613309565b60ff1660031161138c5760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d757374206265206661697221212100000000000000000060448201526064016109da565b61139a600e858585856125c9565b6040516b62617365466565732d42757960a01b8152600c0161100f565b60006109a73384610c2d85604051806060016040528060258152602001613637602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612221565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016111d8565b60006109a7338484611c1c565b6000546001600160a01b031633146114705760405162461bcd60e51b81526004016109da90613288565b600b5481036114dd5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016109da565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b0316331461153a5760405162461bcd60e51b81526004016109da90613288565b6006546001600160a01b03908116908216036115a45760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b60648201526084016109da565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610d56565b6000546001600160a01b031633146116525760405162461bcd60e51b81526004016109da90613288565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036116d65760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b60648201526084016109da565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161119d565b6000546001600160a01b031633146117585760405162461bcd60e51b81526004016109da90613288565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161119d565b6000546001600160a01b031633146117da5760405162461bcd60e51b81526004016109da90613288565b600c546001600160a01b038381169116146118be576001600160a01b0382166118455760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f7420626520300060448201526064016109da565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0384161790555b600d546001600160a01b03828116911614610ad2576001600160a01b0381166119295760405162461bcd60e51b815260206004820152601f60248201527f5468652065636f73797374656d57616c6c65742063616e6e6f7420626520300060448201526064016109da565b600d546040516e1958dbdcde5cdd195b55d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0383166001600160a01b03199091161790555050565b6000546001600160a01b031633146119d15760405162461bcd60e51b81526004016109da90613288565b6001600160a01b038116611a365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109da565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611a9e8385613378565b905083811015611af05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109da565b9392505050565b6001600160a01b038316611b595760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109da565b6001600160a01b038216611bba5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109da565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c425760405162461bcd60e51b81526004016109da90613390565b6001600160a01b038216611c685760405162461bcd60e51b81526004016109da906133d5565b80600003611c7c57610dc083836000612813565b6001600160a01b03808416600081815260156020908152604080832054948716835280832054938352601190915290205460ff928316929182169116158015611cde57506001600160a01b03841660009081526011602052604090205460ff16155b15611f0c57600754600160a01b900460ff16611d3c5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016109da565b6001600160a01b03841660009081526013602052604090205460ff16158015611d7e57506001600160a01b03851660009081526013602052604090205460ff16155b15611e55578115611ded57600854831115611ded5760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b60648201526084016109da565b8015611e5557600954831115611e555760405162461bcd60e51b815260206004820152602760248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547842757960448201526620b6b7bab73a1760c91b60648201526084016109da565b6001600160a01b03841660009081526014602052604090205460ff16611f0c5760085483611e98866001600160a01b031660009081526001602052604090205490565b611ea29190613378565b1115611f0c5760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b60648201526084016109da565b611f16828261291f565b600b543060009081526001602052604090205460075491111590600160a01b900460ff168015611f435750805b8015611f525750600a5460ff16155b8015611f695750601654600160201b900460ff1615155b8015611f8d57506001600160a01b03851660009081526015602052604090205460ff165b15611fb257600a805460ff19166001179055611fa7612b2c565b600a805460ff191690555b600a5460009060ff16158015611fd15750600754600160a01b900460ff165b6001600160a01b03881660009081526012602052604090205490915060ff168061201357506001600160a01b03861660009081526012602052604090205460ff165b1561201c575060005b8080156120345750601654600160201b900460ff1615155b156120fb5760165460009060649061205690600160201b900460ff1688613418565b612060919061344d565b60165490915060009060649061207f9062010000900460ff1689613418565b612089919061344d565b90506120958288613461565b96506120a2893084612813565b80156120f8576120b2308261225b565b601654604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612106878787612813565b6007546001600160a01b031663e30443bc88612137816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561217d57600080fd5b505af192505050801561218e575060015b506007546001600160a01b031663e30443bc876121c0816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561220657600080fd5b505af1925050508015612217575060015b5050505050505050565b600081848411156122455760405162461bcd60e51b81526004016109da9190613062565b5060006122528486613461565b95945050505050565b6001600160a01b0382166122bb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109da565b6122f8816040518060600160405280602281526020016135a7602291396001600160a01b0385166000908152600160205260409020549190612221565b6001600160a01b03831660009081526001602052604090205560035461231e9082612e19565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff85811661010090920416146123f757604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613617833981519152916123d89160481b90613478565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461249057604051711958dbdcde5cdd195b51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206136178339815191529161246d9160481b90613478565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612526576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613617833981519152916125019160481b90613478565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610d84576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206136178339815191529161259a9160481b90613478565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461264a57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613617833981519152916126309160481b90613478565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff8481166201000090920416146126de576040517065636f73797374656d4665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613617833981519152916126bd9160481b90613478565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612772576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206136178339815191529161274e9160481b90613478565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610d84576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613617833981519152916127e59160481b90613478565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166128395760405162461bcd60e51b81526004016109da90613390565b6001600160a01b03821661285f5760405162461bcd60e51b81526004016109da906133d5565b61289c816040518060600160405280602681526020016135c9602691396001600160a01b0386166000908152600160205260409020549190612221565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546128cb9082611a91565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c0f9085815260200190565b6016805463ffffffff19169055811561298f576010546016805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b80156129f2576010546016805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b801580156129fe575081155b15612a60576010546016805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60165460ff63010000008204811691620100008104821691612a8a91610100810482169116613309565b612a949190613309565b612a9e9190613309565b6016805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610ac9565b306000908152600160205260408120546016549091479160029060ff600160201b8204811691612b5d911686613418565b612b67919061344d565b612b71919061344d565b60165490915060009060ff600160201b8204811691612b999163010000009091041686613418565b612ba3919061344d565b90506000612bb18284613378565b612bbb9086613461565b9050612bc681612e5b565b6000612bd28547613461565b60165490915060009060ff63010000008204811691620100008104821691612bfd916002911661348f565b612c079190613309565b612c119190613309565b601654612c289190600160201b900460ff166134b1565b60165460ff91821692506000916002918491612c45911686613418565b612c4f919061344d565b612c59919061344d565b90506000612c678285613461565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ca2573d6000803e3d6000fd5b508615612cf557612cb38783612fb5565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6d91906132bd565b90508015612e0d57600754604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612dbb57600080fd5b505af1158015612dcf573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612e0491815260200190565b60405180910390a15b50505050505050505050565b6000611af083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612221565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e9057612e906134d4565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0d91906134ea565b81600181518110612f2057612f206134d4565b6001600160a01b039283166020918202929092010152600654612f469130911684611af7565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f7f908590600090869030904290600401613507565b600060405180830381600087803b158015612f9957600080fd5b505af1158015612fad573d6000803e3d6000fd5b505050505050565b600654612fcd9030906001600160a01b031684611af7565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561303d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d849190613578565b600060208083528351808285015260005b8181101561308f57858101830151858201604001528201613073565b818111156130a1576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e0557600080fd5b600080604083850312156130df57600080fd5b82356130ea816130b7565b946020939093013593505050565b60006020828403121561310a57600080fd5b5035919050565b60008060006060848603121561312657600080fd5b8335613131816130b7565b92506020840135613141816130b7565b929592945050506040919091013590565b60006020828403121561316457600080fd5b8135611af0816130b7565b803560ff8116811461318057600080fd5b919050565b6000806000806080858703121561319b57600080fd5b6131a48561316f565b93506131b26020860161316f565b92506131c06040860161316f565b91506131ce6060860161316f565b905092959194509250565b8015158114610e0557600080fd5b600080604083850312156131fa57600080fd5b8235613205816130b7565b91506020830135613215816131d9565b809150509250929050565b6000806040838503121561323357600080fd5b823561323e816130b7565b91506020830135613215816130b7565b600181811c9082168061326257607f821691505b60208210810361328257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156132cf57600080fd5b8151611af0816131d9565b6000602082840312156132ec57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff03821115613326576133266132f3565b019392505050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000821982111561338b5761338b6132f3565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615613432576134326132f3565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261345c5761345c613437565b500490565b600082821015613473576134736132f3565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff8316806134a2576134a2613437565b8060ff84160491505092915050565b600060ff821660ff8416808210156134cb576134cb6132f3565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134fc57600080fd5b8151611af0816130b7565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135575784516001600160a01b031683529383019391830191600101613532565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561358d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d11487c96dc84dd7434bd343797bb133ba5d6b4d1699ad2fd5ea7ff95df6fa9464736f6c634300080f003360806040523480156200001157600080fd5b5060408051808201825260178082527f4f70656e56724173736574735f76724469766964656e640000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10600e55506000600f5562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a7280620002736000396000f3fe6080604052600436106101f25760003560e01c806370a082311161010d578063a9059cbb116100a0578063bea9849e1161006f578063bea9849e146105b6578063dd62ed3e146105d6578063e30443bc1461061c578063e63b7daa1461063c578063f2fde38b1461065c57600080fd5b8063a9059cbb1461052a578063aafd847a1461054a578063bc4c4b3714610580578063be10b614146105a057600080fd5b806391b89fba116100dc57806391b89fba146104b557806395d89b41146104d5578063a457c2d7146104ea578063a8b9d2401461050a57600080fd5b806370a0823114610436578063715018a61461046c57806385a6b3ae146104815780638da5cb5b1461049757600080fd5b806327ce0147116101855780634e7b827f116101545780634e7b827f146103bb5780636a474002146103eb5780636bf5ecd5146104005780636f2789ec1461042057600080fd5b806327ce01471461033f578063313ce5671461035f57806331e79db01461037b578063395093511461039b57600080fd5b80631694505e116101c15780631694505e1461029b57806318160ddd146102d3578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde03146101fe578063095ea7b31461022957806312f4392014610259578063163c7cef1461027b57600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021361067c565b60405161022091906116b9565b60405180910390f35b34801561023557600080fd5b50610249610244366004611723565b61070e565b6040519015158152602001610220565b34801561026557600080fd5b5061027961027436600461174f565b610725565b005b34801561028757600080fd5b5061027961029636600461176c565b610764565b3480156102a757600080fd5b506009546102bb906001600160a01b031681565b6040516001600160a01b039091168152602001610220565b3480156102df57600080fd5b506002545b604051908152602001610220565b3480156102fe57600080fd5b506102e461030d36600461174f565b600d6020526000908152604090205481565b34801561032b57600080fd5b5061024961033a366004611785565b610830565b34801561034b57600080fd5b506102e461035a36600461174f565b610899565b34801561036b57600080fd5b5060405160128152602001610220565b34801561038757600080fd5b5061027961039636600461174f565b6108f5565b3480156103a757600080fd5b506102496103b6366004611723565b6109aa565b3480156103c757600080fd5b506102496103d636600461174f565b600c6020526000908152604090205460ff1681565b3480156103f757600080fd5b506102796109e0565b34801561040c57600080fd5b5061027961041b36600461176c565b610a13565b34801561042c57600080fd5b506102e4600e5481565b34801561044257600080fd5b506102e461045136600461174f565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b50610279610ad0565b34801561048d57600080fd5b506102e460075481565b3480156104a357600080fd5b506005546001600160a01b03166102bb565b3480156104c157600080fd5b506102e46104d036600461174f565b610b44565b3480156104e157600080fd5b50610213610b4f565b3480156104f657600080fd5b50610249610505366004611723565b610b5e565b34801561051657600080fd5b506102e461052536600461174f565b610bad565b34801561053657600080fd5b50610249610545366004611723565b610bd9565b34801561055657600080fd5b506102e461056536600461174f565b6001600160a01b03166000908152600b602052604090205490565b34801561058c57600080fd5b5061024961059b3660046117d4565b610be6565b3480156105ac57600080fd5b506102e4600f5481565b3480156105c257600080fd5b506102796105d136600461174f565b610c94565b3480156105e257600080fd5b506102e46105f136600461180d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561062857600080fd5b50610279610637366004611723565b610cc7565b34801561064857600080fd5b506008546102bb906001600160a01b031681565b34801561066857600080fd5b5061027961067736600461174f565b610d45565b60606003805461068b9061183b565b80601f01602080910402602001604051908101604052809291908181526020018280546106b79061183b565b80156107045780601f106106d957610100808354040283529160200191610704565b820191906000526020600020905b8154815290600101906020018083116106e757829003601f168201915b5050505050905090565b600061071b338484610e30565b5060015b92915050565b6005546001600160a01b031633146107585760405162461bcd60e51b815260040161074f90611875565b60405180910390fd5b61076181610f54565b50565b6005546001600160a01b0316331461078e5760405162461bcd60e51b815260040161074f90611875565b80600f540361082b5760405162461bcd60e51b815260206004820152605960248201527f4f70656e56724173736574735f76724469766964656e643a206d696e696d756d60448201527f546f6b656e42616c616e6365466f724469766964656e647320616c726561647960648201527f207468652076616c7565206f6620276e657756616c7565272e00000000000000608482015260a40161074f565b600f55565b600061083d848484610fa0565b61088f843361088a856040518060600160405280602881526020016119f0602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610ffe565b610e30565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b926108eb926108e6926108e0916108db9190611038565b6110c1565b906110d1565b61110f565b61071f91906118c0565b6005546001600160a01b0316331461091f5760405162461bcd60e51b815260040161074f90611875565b6001600160a01b0381166000908152600c602052604090205460ff161561094557600080fd5b6001600160a01b0381166000908152600c60205260408120805460ff19166001179055610973908290611122565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161071b91859061088a9086611187565b6005546001600160a01b03163314610a0a5760405162461bcd60e51b815260040161074f90611875565b610761336111e6565b6005546001600160a01b03163314610a3d5760405162461bcd60e51b815260040161074f90611875565b6000610a4860025490565b11610a5257600080fd5b801561076157610a85610a6460025490565b610a7283600160801b611038565b610a7c91906118c0565b60065490611187565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610aca9082611187565b60075550565b6005546001600160a01b03163314610afa5760405162461bcd60e51b815260040161074f90611875565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061071f82610bad565b60606004805461068b9061183b565b600061071b338461088a85604051806060016040528060258152602001611a18602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610ffe565b6001600160a01b0381166000908152600b602052604081205461071f90610bd384610899565b9061134b565b600061071b338484610fa0565b6005546000906001600160a01b03163314610c135760405162461bcd60e51b815260040161074f90611875565b6000610c1e846111e6565b90508015610c8a576001600160a01b0384166000818152600d6020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610c789085815260200190565b60405180910390a3600191505061071f565b5060009392505050565b6005546001600160a01b03163314610cbe5760405162461bcd60e51b815260040161074f90611875565b6107618161138d565b6005546001600160a01b03163314610cf15760405162461bcd60e51b815260040161074f90611875565b6001600160a01b0382166000908152600c602052604090205460ff16610d4157600f548110610d2957610d248282611122565b610d34565b610d34826000611122565b610d3f826001610be6565b505b5050565b6005546001600160a01b03163314610d6f5760405162461bcd60e51b815260040161074f90611875565b6001600160a01b038116610dd45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161074f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161074f565b6001600160a01b038216610ef35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161074f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f7e5760405162461bcd60e51b815260040161074f90611875565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f4f70656e56724173736574735f76724469766964656e643a204e6f207472616e60448201526c1cd9995c9cc8185b1b1bddd959609a1b606482015260840161074f565b600081848411156110225760405162461bcd60e51b815260040161074f91906116b9565b50600061102f84866118e2565b95945050505050565b60008260000361104a5750600061071f565b600061105683856118f9565b90508261106385836118c0565b146110ba5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161074f565b9392505050565b6000818181121561071f57600080fd5b6000806110de8385611918565b9050600083121580156110f15750838112155b80611106575060008312801561110657508381125b6110ba57600080fd5b60008082121561111e57600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561116157600061114f838361134b565b905061115b84826113d9565b50610d3f565b80821015610d3f576000611175828461134b565b9050611181848261143d565b50505050565b6000806111948385611959565b9050838110156110ba5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161074f565b6000806111f283610bad565b90508015611342576001600160a01b0383166000908152600b602052604090205461121d9082611187565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061126c9084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156112c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec9190611971565b90508061133b576001600160a01b0384166000908152600b6020526040902054611316908361134b565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b60006110ba83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ffe565b6005546001600160a01b031633146113b75760405162461bcd60e51b815260040161074f90611875565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6113e38282611481565b61141d6113fe6108db8360065461103890919063ffffffff16565b6001600160a01b0384166000908152600a60205260409020549061156c565b6001600160a01b039092166000908152600a602052604090209190915550565b61144782826115a9565b61141d6114626108db8360065461103890919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906110d1565b6001600160a01b0382166114d75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161074f565b6114e360008383610d3f565b6002546114f09082611187565b6002556001600160a01b0382166000908152602081905260409020546115169082611187565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b600080611579838561198e565b90506000831215801561158c5750838113155b80611106575060008312801561110657508381136110ba57600080fd5b6001600160a01b0382166116095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161074f565b61161582600083610d3f565b611652816040518060600160405280602281526020016119ce602291396001600160a01b0385166000908152602081905260409020549190610ffe565b6001600160a01b038316600090815260208190526040902055600254611678908261134b565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611560565b600060208083528351808285015260005b818110156116e6578581018301518582016040015282016116ca565b818111156116f8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461076157600080fd5b6000806040838503121561173657600080fd5b82356117418161170e565b946020939093013593505050565b60006020828403121561176157600080fd5b81356110ba8161170e565b60006020828403121561177e57600080fd5b5035919050565b60008060006060848603121561179a57600080fd5b83356117a58161170e565b925060208401356117b58161170e565b929592945050506040919091013590565b801515811461076157600080fd5b600080604083850312156117e757600080fd5b82356117f28161170e565b91506020830135611802816117c6565b809150509250929050565b6000806040838503121561182057600080fd5b823561182b8161170e565b915060208301356118028161170e565b600181811c9082168061184f57607f821691505b60208210810361186f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826118dd57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156118f4576118f46118aa565b500390565b6000816000190483118215151615611913576119136118aa565b500290565b600080821280156001600160ff1b038490038513161561193a5761193a6118aa565b600160ff1b8390038412811615611953576119536118aa565b50500190565b6000821982111561196c5761196c6118aa565b500190565b60006020828403121561198357600080fd5b81516110ba816117c6565b60008083128015600160ff1b8501841216156119ac576119ac6118aa565b6001600160ff1b03840183138116156119c7576119c76118aa565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122018a1ac4dff9955836a2d154708cc2a0818981b87bd838d4a4062b18f7ba1c9c064736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c8063715018a61161015a578063aee50b1e116100c1578063d32215761161007a578063d322157614610807578063d3f6a15714610827578063d469801614610847578063dd62ed3e14610867578063f2fde38b146108ad578063fe017535146108cd57600080fd5b8063aee50b1e14610702578063b62496f514610722578063bea9849e14610752578063c024666814610772578063cd43e22814610792578063d2d7ad83146107f157600080fd5b806395d89b411161011357806395d89b41146106575780639d952ce91461066c578063a457c2d71461068c578063a8b9d240146106ac578063a9059cbb146106cc578063aa4bde28146106ec57600080fd5b8063715018a6146105ae578063781edb3c146105c35780637fff1ceb146105e3578063880bcbc1146106035780638c0b5e22146106235780638da5cb5b1461063957600080fd5b8063313ce567116101fe57806349bd5a5e116101b757806349bd5a5e146104da5780634e71d92d1461050e5780635dbfe247146105235780635ebf4db914610538578063667812911461055857806370a082311461057857600080fd5b8063313ce5671461041e57806331e79db01461043a57806333ead6051461045a578063395093511461047a57806342966c681461049a578063435263ef146104ba57600080fd5b80630bd05b69116102505780630bd05b691461036a5780631694505e1461037f57806318160ddd1461039f5780631e293c10146103be57806323b872dd146103de57806327a14fc2146103fe57600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f05780630964c75b14610310578063098df5851461034857600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506007546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e3610908565b6040516102c59190613062565b3480156102fc57600080fd5b506102b961030b3660046130cc565b61099a565b34801561031c57600080fd5b50600754610330906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b34801561035457600080fd5b506103686103633660046130f8565b6109b0565b005b34801561037657600080fd5b50610368610ad6565b34801561038b57600080fd5b50600654610330906001600160a01b031681565b3480156103ab57600080fd5b506003545b6040519081526020016102c5565b3480156103ca57600080fd5b506103686103d93660046130f8565b610b15565b3480156103ea57600080fd5b506102b96103f9366004613111565b610bd3565b34801561040a57600080fd5b506103686104193660046130f8565b610c3c565b34801561042a57600080fd5b50604051601281526020016102c5565b34801561044657600080fd5b50610368610455366004613152565b610cfe565b34801561046657600080fd5b50610368610475366004613111565b610d8b565b34801561048657600080fd5b506102b96104953660046130cc565b610dc5565b3480156104a657600080fd5b506103686104b53660046130f8565b610dfb565b3480156104c657600080fd5b50600d54610330906001600160a01b031681565b3480156104e657600080fd5b506103307f0000000000000000000000007d94878e2640f4fd3154416f4e8fdedbdfb9cccf81565b34801561051a57600080fd5b50610368610e08565b34801561052f57600080fd5b506103b0610e7d565b34801561054457600080fd5b506103686105533660046130f8565b610ef0565b34801561056457600080fd5b50610368610573366004613185565b610f4b565b34801561058457600080fd5b506103b0610593366004613152565b6001600160a01b031660009081526001602052604090205490565b3480156105ba57600080fd5b5061036861106b565b3480156105cf57600080fd5b506103686105de3660046131e7565b6110df565b3480156105ef57600080fd5b506103b06105fe366004613152565b6111a9565b34801561060f57600080fd5b5061036861061e3660046131e7565b61121f565b34801561062f57600080fd5b506103b060095481565b34801561064557600080fd5b506000546001600160a01b0316610330565b34801561066357600080fd5b506102e36112e1565b34801561067857600080fd5b50610368610687366004613185565b6112f0565b34801561069857600080fd5b506102b96106a73660046130cc565b6113b7565b3480156106b857600080fd5b506103b06106c7366004613152565b611406565b3480156106d857600080fd5b506102b96106e73660046130cc565b611439565b3480156106f857600080fd5b506103b060085481565b34801561070e57600080fd5b5061036861071d3660046130f8565b611446565b34801561072e57600080fd5b506102b961073d366004613152565b60156020526000908152604090205460ff1681565b34801561075e57600080fd5b5061036861076d366004613152565b611510565b34801561077e57600080fd5b5061036861078d3660046131e7565b611628565b34801561079e57600080fd5b5060105460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102c5565b3480156107fd57600080fd5b506103b0600b5481565b34801561081357600080fd5b506103686108223660046131e7565b61172e565b34801561083357600080fd5b50610368610842366004613220565b6117b0565b34801561085357600080fd5b50600c54610330906001600160a01b031681565b34801561087357600080fd5b506103b0610882366004613220565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108b957600080fd5b506103686108c8366004613152565b6119a7565b3480156108d957600080fd5b5060105460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166107c4565b6060600480546109179061324e565b80601f01602080910402602001604051908101604052809291908181526020018280546109439061324e565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b5050505050905090565b60006109a7338484611af7565b50600192915050565b6000546001600160a01b031633146109e35760405162461bcd60e51b81526004016109da90613288565b60405180910390fd5b478110610a415760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b60648201526084016109da565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a8e576040519150601f19603f3d011682016040523d82523d6000602084013e610a93565b606091505b505090508015610ad2576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b005760405162461bcd60e51b81526004016109da90613288565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b3f5760405162461bcd60e51b81526004016109da90613288565b6009548103610ba05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420757064617465206d61785478416d6f756e7420746f2073616d604482015266652076616c756560c81b60648201526084016109da565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610be0848484611c1c565b610c328433610c2d856040518060600160405280602881526020016135ef602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612221565b611af7565b5060019392505050565b6000546001600160a01b03163314610c665760405162461bcd60e51b81526004016109da90613288565b6008548103610ccb5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b60648201526084016109da565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b03163314610d285760405162461bcd60e51b81526004016109da90613288565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610db55760405162461bcd60e51b81526004016109da90613288565b610dc0838383611af7565b505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916109a7918590610c2d9086611a91565b610e05338261225b565b50565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0591906132bd565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eeb91906132da565b905090565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b81526004016109da90613288565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610d56565b6000546001600160a01b03163314610f755760405162461bcd60e51b81526004016109da90613288565b8082610f818587613309565b610f8b9190613309565b610f959190613309565b60ff16600511610fe75760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d7573742062652066616972212121000000000000000060448201526064016109da565b610ff5600e85858585612366565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6000546001600160a01b031633146110955760405162461bcd60e51b81526004016109da90613288565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111095760405162461bcd60e51b81526004016109da90613288565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036111495760405162461bcd60e51b81526004016109da9061332e565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa1580156111f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121991906132da565b92915050565b6000546001600160a01b031633146112495760405162461bcd60e51b81526004016109da90613288565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036112895760405162461bcd60e51b81526004016109da9061332e565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161119d565b6060600580546109179061324e565b6000546001600160a01b0316331461131a5760405162461bcd60e51b81526004016109da90613288565b80826113268587613309565b6113309190613309565b61133a9190613309565b60ff1660031161138c5760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d757374206265206661697221212100000000000000000060448201526064016109da565b61139a600e858585856125c9565b6040516b62617365466565732d42757960a01b8152600c0161100f565b60006109a73384610c2d85604051806060016040528060258152602001613637602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612221565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016111d8565b60006109a7338484611c1c565b6000546001600160a01b031633146114705760405162461bcd60e51b81526004016109da90613288565b600b5481036114dd5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016109da565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b0316331461153a5760405162461bcd60e51b81526004016109da90613288565b6006546001600160a01b03908116908216036115a45760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b60648201526084016109da565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610d56565b6000546001600160a01b031633146116525760405162461bcd60e51b81526004016109da90613288565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036116d65760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b60648201526084016109da565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161119d565b6000546001600160a01b031633146117585760405162461bcd60e51b81526004016109da90613288565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161119d565b6000546001600160a01b031633146117da5760405162461bcd60e51b81526004016109da90613288565b600c546001600160a01b038381169116146118be576001600160a01b0382166118455760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f7420626520300060448201526064016109da565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0384161790555b600d546001600160a01b03828116911614610ad2576001600160a01b0381166119295760405162461bcd60e51b815260206004820152601f60248201527f5468652065636f73797374656d57616c6c65742063616e6e6f7420626520300060448201526064016109da565b600d546040516e1958dbdcde5cdd195b55d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0383166001600160a01b03199091161790555050565b6000546001600160a01b031633146119d15760405162461bcd60e51b81526004016109da90613288565b6001600160a01b038116611a365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109da565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611a9e8385613378565b905083811015611af05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109da565b9392505050565b6001600160a01b038316611b595760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109da565b6001600160a01b038216611bba5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109da565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c425760405162461bcd60e51b81526004016109da90613390565b6001600160a01b038216611c685760405162461bcd60e51b81526004016109da906133d5565b80600003611c7c57610dc083836000612813565b6001600160a01b03808416600081815260156020908152604080832054948716835280832054938352601190915290205460ff928316929182169116158015611cde57506001600160a01b03841660009081526011602052604090205460ff16155b15611f0c57600754600160a01b900460ff16611d3c5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016109da565b6001600160a01b03841660009081526013602052604090205460ff16158015611d7e57506001600160a01b03851660009081526013602052604090205460ff16155b15611e55578115611ded57600854831115611ded5760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b60648201526084016109da565b8015611e5557600954831115611e555760405162461bcd60e51b815260206004820152602760248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547842757960448201526620b6b7bab73a1760c91b60648201526084016109da565b6001600160a01b03841660009081526014602052604090205460ff16611f0c5760085483611e98866001600160a01b031660009081526001602052604090205490565b611ea29190613378565b1115611f0c5760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b60648201526084016109da565b611f16828261291f565b600b543060009081526001602052604090205460075491111590600160a01b900460ff168015611f435750805b8015611f525750600a5460ff16155b8015611f695750601654600160201b900460ff1615155b8015611f8d57506001600160a01b03851660009081526015602052604090205460ff165b15611fb257600a805460ff19166001179055611fa7612b2c565b600a805460ff191690555b600a5460009060ff16158015611fd15750600754600160a01b900460ff165b6001600160a01b03881660009081526012602052604090205490915060ff168061201357506001600160a01b03861660009081526012602052604090205460ff165b1561201c575060005b8080156120345750601654600160201b900460ff1615155b156120fb5760165460009060649061205690600160201b900460ff1688613418565b612060919061344d565b60165490915060009060649061207f9062010000900460ff1689613418565b612089919061344d565b90506120958288613461565b96506120a2893084612813565b80156120f8576120b2308261225b565b601654604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612106878787612813565b6007546001600160a01b031663e30443bc88612137816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561217d57600080fd5b505af192505050801561218e575060015b506007546001600160a01b031663e30443bc876121c0816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561220657600080fd5b505af1925050508015612217575060015b5050505050505050565b600081848411156122455760405162461bcd60e51b81526004016109da9190613062565b5060006122528486613461565b95945050505050565b6001600160a01b0382166122bb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109da565b6122f8816040518060600160405280602281526020016135a7602291396001600160a01b0385166000908152600160205260409020549190612221565b6001600160a01b03831660009081526001602052604090205560035461231e9082612e19565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff85811661010090920416146123f757604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613617833981519152916123d89160481b90613478565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461249057604051711958dbdcde5cdd195b51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206136178339815191529161246d9160481b90613478565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612526576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613617833981519152916125019160481b90613478565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610d84576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206136178339815191529161259a9160481b90613478565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461264a57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613617833981519152916126309160481b90613478565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff8481166201000090920416146126de576040517065636f73797374656d4665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613617833981519152916126bd9160481b90613478565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612772576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206136178339815191529161274e9160481b90613478565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610d84576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613617833981519152916127e59160481b90613478565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166128395760405162461bcd60e51b81526004016109da90613390565b6001600160a01b03821661285f5760405162461bcd60e51b81526004016109da906133d5565b61289c816040518060600160405280602681526020016135c9602691396001600160a01b0386166000908152600160205260409020549190612221565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546128cb9082611a91565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c0f9085815260200190565b6016805463ffffffff19169055811561298f576010546016805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b80156129f2576010546016805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b801580156129fe575081155b15612a60576010546016805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60165460ff63010000008204811691620100008104821691612a8a91610100810482169116613309565b612a949190613309565b612a9e9190613309565b6016805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610ac9565b306000908152600160205260408120546016549091479160029060ff600160201b8204811691612b5d911686613418565b612b67919061344d565b612b71919061344d565b60165490915060009060ff600160201b8204811691612b999163010000009091041686613418565b612ba3919061344d565b90506000612bb18284613378565b612bbb9086613461565b9050612bc681612e5b565b6000612bd28547613461565b60165490915060009060ff63010000008204811691620100008104821691612bfd916002911661348f565b612c079190613309565b612c119190613309565b601654612c289190600160201b900460ff166134b1565b60165460ff91821692506000916002918491612c45911686613418565b612c4f919061344d565b612c59919061344d565b90506000612c678285613461565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ca2573d6000803e3d6000fd5b508615612cf557612cb38783612fb5565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6d91906132bd565b90508015612e0d57600754604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612dbb57600080fd5b505af1158015612dcf573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612e0491815260200190565b60405180910390a15b50505050505050505050565b6000611af083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612221565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e9057612e906134d4565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0d91906134ea565b81600181518110612f2057612f206134d4565b6001600160a01b039283166020918202929092010152600654612f469130911684611af7565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f7f908590600090869030904290600401613507565b600060405180830381600087803b158015612f9957600080fd5b505af1158015612fad573d6000803e3d6000fd5b505050505050565b600654612fcd9030906001600160a01b031684611af7565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561303d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d849190613578565b600060208083528351808285015260005b8181101561308f57858101830151858201604001528201613073565b818111156130a1576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e0557600080fd5b600080604083850312156130df57600080fd5b82356130ea816130b7565b946020939093013593505050565b60006020828403121561310a57600080fd5b5035919050565b60008060006060848603121561312657600080fd5b8335613131816130b7565b92506020840135613141816130b7565b929592945050506040919091013590565b60006020828403121561316457600080fd5b8135611af0816130b7565b803560ff8116811461318057600080fd5b919050565b6000806000806080858703121561319b57600080fd5b6131a48561316f565b93506131b26020860161316f565b92506131c06040860161316f565b91506131ce6060860161316f565b905092959194509250565b8015158114610e0557600080fd5b600080604083850312156131fa57600080fd5b8235613205816130b7565b91506020830135613215816131d9565b809150509250929050565b6000806040838503121561323357600080fd5b823561323e816130b7565b91506020830135613215816130b7565b600181811c9082168061326257607f821691505b60208210810361328257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156132cf57600080fd5b8151611af0816131d9565b6000602082840312156132ec57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff03821115613326576133266132f3565b019392505050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000821982111561338b5761338b6132f3565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615613432576134326132f3565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261345c5761345c613437565b500490565b600082821015613473576134736132f3565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff8316806134a2576134a2613437565b8060ff84160491505092915050565b600060ff821660ff8416808210156134cb576134cb6132f3565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134fc57600080fd5b8151611af0816130b7565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135575784516001600160a01b031683529383019391830191600101613532565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561358d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d11487c96dc84dd7434bd343797bb133ba5d6b4d1699ad2fd5ea7ff95df6fa9464736f6c634300080f0033

Deployed Bytecode Sourcemap

17378:23696:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17687:28;;;;;;;;;;-1:-1:-1;17687:28:0;;;;-1:-1:-1;;;17687:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;17687:28:0;;;;;;;;8094:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9149:210::-;;;;;;;;;;-1:-1:-1;9149:210:0;;;;;:::i;:::-;;:::i;17645:33::-;;;;;;;;;;-1:-1:-1;17645:33:0;;;;-1:-1:-1;;;;;17645:33:0;;;;;;-1:-1:-1;;;;;1455:32:1;;;1437:51;;1425:2;1410:18;17645:33:0;1264:230:1;29648:347:0;;;;;;;;;;-1:-1:-1;29648:347:0;;;;;:::i;:::-;;:::i;:::-;;23202:88;;;;;;;;;;;;;:::i;17419:30::-;;;;;;;;;;-1:-1:-1;17419:30:0;;;;-1:-1:-1;;;;;17419:30:0;;;8415:108;;;;;;;;;;-1:-1:-1;8503:12:0;;8415:108;;;2053:25:1;;;2041:2;2026:18;8415:108:0;1907:177:1;28371:299:0;;;;;;;;;;-1:-1:-1;28371:299:0;;;;;:::i;:::-;;:::i;9367:454::-;;;;;;;;;;-1:-1:-1;9367:454:0;;;;;:::i;:::-;;:::i;28678:305::-;;;;;;;;;;-1:-1:-1;28678:305:0;;;;;:::i;:::-;;:::i;8314:93::-;;;;;;;;;;-1:-1:-1;8314:93:0;;8397:2;2692:36:1;;2680:2;2665:18;8314:93:0;2550:184:1;24353:130:0;;;;;;;;;;-1:-1:-1;24353:130:0;;;;;:::i;:::-;;:::i;30003:164::-;;;;;;;;;;-1:-1:-1;30003:164:0;;;;;:::i;:::-;;:::i;9829:300::-;;;;;;;;;;-1:-1:-1;9829:300:0;;;;;:::i;:::-;;:::i;30175:81::-;;;;;;;;;;-1:-1:-1;30175:81:0;;;;;:::i;:::-;;:::i;18036:30::-;;;;;;;;;;-1:-1:-1;18036:30:0;;;;-1:-1:-1;;;;;18036:30:0;;;17456:38;;;;;;;;;;;;;;;29537:103;;;;;;;;;;;;;:::i;30264:142::-;;;;;;;;;;;;;:::i;29353:176::-;;;;;;;;;;-1:-1:-1;29353:176:0;;;;;:::i;:::-;;:::i;27136:834::-;;;;;;;;;;-1:-1:-1;27136:834:0;;;;;:::i;:::-;;:::i;8531:177::-;;;;;;;;;;-1:-1:-1;8531:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;8682:18:0;8650:7;8682:18;;;:9;:18;;;;;;;8531:177;7213:148;;;;;;;;;;;;;:::i;24907:391::-;;;;;;;;;;-1:-1:-1;24907:391:0;;;;;:::i;:::-;;:::i;30608:172::-;;;;;;;;;;-1:-1:-1;30608:172:0;;;;;:::i;:::-;;:::i;24491:408::-;;;;;;;;;;-1:-1:-1;24491:408:0;;;;;:::i;:::-;;:::i;17839:50::-;;;;;;;;;;;;;;;;6999:79;;;;;;;;;;-1:-1:-1;7037:7:0;7064:6;-1:-1:-1;;;;;7064:6:0;6999:79;;8202:104;;;;;;;;;;;;;:::i;26285:814::-;;;;;;;;;;-1:-1:-1;26285:814:0;;;;;:::i;:::-;;:::i;10137:400::-;;;;;;;;;;-1:-1:-1;10137:400:0;;;;;:::i;:::-;;:::i;30414:186::-;;;;;;;;;;-1:-1:-1;30414:186:0;;;;;:::i;:::-;;:::i;8716:216::-;;;;;;;;;;-1:-1:-1;8716:216:0;;;;;:::i;:::-;;:::i;17778:54::-;;;;;;;;;;;;;;;;28991:354;;;;;;;;;;-1:-1:-1;28991:354:0;;;;;:::i;:::-;;:::i;18840:57::-;;;;;;;;;;-1:-1:-1;18840:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27978:385;;;;;;;;;;-1:-1:-1;27978:385:0;;;;;:::i;:::-;;:::i;23990:355::-;;;;;;;;;;-1:-1:-1;23990:355:0;;;;;:::i;:::-;;:::i;30788:354::-;;;;;;;;;;-1:-1:-1;30993:23:0;;;;;;;31031;;;;;;-1:-1:-1;;;31069:18:0;;;;;-1:-1:-1;;;31102:21:0;;;30788:354;;;;4513:4:1;4501:17;;;4483:36;;4555:17;;;4550:2;4535:18;;4528:45;4609:17;;;4589:18;;;4582:45;;;;4663:17;;;4658:2;4643:18;;4636:45;4470:3;4455:19;30788:354:0;4268:419:1;17927:63:0;;;;;;;;;;;;;;;;23742:240;;;;;;;;;;-1:-1:-1;23742:240:0;;;;;:::i;:::-;;:::i;25306:947::-;;;;;;;;;;-1:-1:-1;25306:947:0;;;;;:::i;:::-;;:::i;17999:30::-;;;;;;;;;;-1:-1:-1;17999:30:0;;;;-1:-1:-1;;;;;17999:30:0;;;8940:201;;;;;;;;;;-1:-1:-1;8940:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;9106:18:0;;;9074:7;9106:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8940:201;7369:281;;;;;;;;;;-1:-1:-1;7369:281:0;;;;;:::i;:::-;;:::i;31150:359::-;;;;;;;;;;-1:-1:-1;31356:24:0;;;;;;;;;31395;;;;;;-1:-1:-1;;;31434:19:0;;;;;-1:-1:-1;;;31468:22:0;;;31150:359;;8094:100;8148:13;8181:5;8174:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8094:100;:::o;9149:210::-;9268:4;9290:39;6387:10;9313:7;9322:6;9290:8;:39::i;:::-;-1:-1:-1;9347:4:0;9149:210;;;;:::o;29648:347::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;;;;;;;;;29751:21:::1;29742:6;:30;29720:118;;;::::0;-1:-1:-1;;;29720:118:0;;6033:2:1;29720:118:0::1;::::0;::::1;6015:21:1::0;6072:2;6052:18;;;6045:30;6111:34;6091:18;;;6084:62;-1:-1:-1;;;6162:18:1;;;6155:36;6208:19;;29720:118:0::1;5831:402:1::0;29720:118:0::1;29850:12;7064:6:::0;;29868:40:::1;::::0;-1:-1:-1;;;;;7064:6:0;;;;29897;;29850:12;29868:40;29850:12;29868:40;29897:6;7064;29868:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29849:59;;;29923:7;29919:69;;;29952:24;::::0;2053:25:1;;;29952:24:0::1;::::0;2041:2:1;2026:18;29952:24:0::1;;;;;;;;29919:69;29709:286;29648:347:::0;:::o;23202:88::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;23259:16:::1;:23:::0;;-1:-1:-1;;;;23259:23:0::1;-1:-1:-1::0;;;23259:23:0::1;::::0;;23202:88::o;28371:299::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;28486:11:::1;;28474:8;:23:::0;28452:112:::1;;;::::0;-1:-1:-1;;;28452:112:0;;6650:2:1;28452:112:0::1;::::0;::::1;6632:21:1::0;6689:2;6669:18;;;6662:30;6728:34;6708:18;;;6701:62;-1:-1:-1;;;6779:18:1;;;6772:37;6826:19;;28452:112:0::1;6448:403:1::0;28452:112:0::1;28617:11;::::0;28580:49:::1;::::0;28607:8;;28580:49:::1;::::0;;;::::1;28640:11;:22:::0;28371:299::o;9367:454::-;9507:4;9524:36;9534:6;9542:9;9553:6;9524:9;:36::i;:::-;9571:220;9594:6;6387:10;9642:138;9698:6;9642:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9642:19:0;;;;;;:11;:19;;;;;;;;6387:10;9642:33;;;;;;;;;;:37;:138::i;:::-;9571:8;:220::i;:::-;-1:-1:-1;9809:4:0;9367:454;;;;;:::o;28678:305::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;28788:15:::1;;28776:8;:27:::0;28754:120:::1;;;::::0;-1:-1:-1;;;28754:120:0;;7058:2:1;28754:120:0::1;::::0;::::1;7040:21:1::0;7097:2;7077:18;;;7070:30;7136:34;7116:18;;;7109:62;-1:-1:-1;;;7187:18:1;;;7180:41;7238:19;;28754:120:0::1;6856:407:1::0;28754:120:0::1;28922:15;::::0;28890:48:::1;::::0;28912:8;;28890:48:::1;::::0;;;::::1;28949:15;:26:::0;28678:305::o;24353:130::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;24430:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;24430:45:0;;-1:-1:-1;;;;;1455:32:1;;;24430:45:0::1;::::0;::::1;1437:51:1::0;24430:15:0;;::::1;::::0;:36:::1;::::0;1410:18:1;;24430:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24353:130:::0;:::o;30003:164::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;30109:50:::1;30126:6;30143;30152;30109:8;:50::i;:::-;30003:164:::0;;;:::o;9829:300::-;6387:10;9944:4;10038:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10038:34:0;;;;;;;;;;9944:4;;9966:133;;10016:7;;10038:50;;10077:10;10038:38;:50::i;30175:81::-;30224:24;30230:10;30242:5;30224;:24::i;:::-;30175:81;:::o;29537:103::-;29574:15;;:58;;-1:-1:-1;;;29574:58:0;;29613:10;29574:58;;;7452:51:1;29574:15:0;7519:18:1;;;7512:50;-1:-1:-1;;;;;29574:15:0;;;;:30;;7425:18:1;;29574:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30264:142::-;30355:15;;:43;;;-1:-1:-1;;;30355:43:0;;;;30328:7;;-1:-1:-1;;;;;30355:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30348:50;;30264:142;:::o;29353:176::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;29468:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;29468:53:0;;::::1;::::0;::::1;2053:25:1::0;;;-1:-1:-1;;;;;29468:15:0;;::::1;::::0;:43:::1;::::0;2026:18:1;;29468:53:0::1;1907:177:1::0;27136:834:0;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;27504:17;27466:14;27380:62:::1;27423:19:::0;27380;:62:::1;:::i;:::-;:100;;;;:::i;:::-;:141;;;;:::i;:::-;27359:162;;:1;:162;27337:236;;;::::0;-1:-1:-1;;;27337:236:0;;8555:2:1;27337:236:0::1;::::0;::::1;8537:21:1::0;8594:2;8574:18;;;8567:30;8633:26;8613:18;;;8606:54;8677:18;;27337:236:0::1;8353:348:1::0;27337:236:0::1;27584:183;27622:5;27642:19;27676;27710:14;27739:17;27584:23;:183::i;:::-;27783:179;::::0;-1:-1:-1;;;8908:28:1;;8961:2;8952:12;27783:179:0::1;;::::0;;;;;::::1;::::0;;4513:4:1;4501:17;;;4483:36;;4555:17;;;4550:2;4535:18;;4528:45;4609:17;;;4589:18;;;4582:45;4663:17;;4658:2;4643:18;;4636:45;27783:179:0;;;;::::1;::::0;;;;;4470:3:1;27783:179:0;;::::1;27136:834:::0;;;;:::o;7213:148::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;7320:1:::1;7304:6:::0;;7283:40:::1;::::0;-1:-1:-1;;;;;7304:6:0;;::::1;::::0;7283:40:::1;::::0;7320:1;;7283:40:::1;7351:1;7334:19:::0;;-1:-1:-1;;;;;;7334:19:0::1;::::0;;7213:148::o;24907:391::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25049:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;25027:142:::1;;;;-1:-1:-1::0;;;25027:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25180:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;25180:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25245:45;;154:41:1;;;25245:45:0::1;::::0;127:18:1;25245:45:0::1;;;;;;;;24907:391:::0;;:::o;30608:172::-;30738:15;;:34;;-1:-1:-1;;;30738:34:0;;-1:-1:-1;;;;;1455:32:1;;;30738:34:0;;;1437:51:1;30706:7:0;;30738:15;;:25;;1410:18:1;;30738:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30731:41;30608:172;-1:-1:-1;;30608:172:0:o;24491:408::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24638:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;24616:147:::1;;;;-1:-1:-1::0;;;24616:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24774:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;24774:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24844:47;;154:41:1;;;24844:47:0::1;::::0;127:18:1;24844:47:0::1;14:187:1::0;8202:104:0;8258:13;8291:7;8284:14;;;;;:::i;26285:814::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;26645:16;26608:13;26524:60:::1;26566:18:::0;26524;:60:::1;:::i;:::-;:97;;;;:::i;:::-;:137;;;;:::i;:::-;26503:158;;:1;:158;26481:231;;;::::0;-1:-1:-1;;;26481:231:0;;9588:2:1;26481:231:0::1;::::0;::::1;9570:21:1::0;9627:2;9607:18;;;9600:30;9666:25;9646:18;;;9639:53;9709:18;;26481:231:0::1;9386:347:1::0;26481:231:0::1;26723:178;26760:5;26780:18;26813;26846:13;26874:16;26723:22;:178::i;:::-;26917:174;::::0;-1:-1:-1;;;9940:27:1;;9992:2;9983:12;26917:174:0::1;9738:263:1::0;10137:400:0;10257:4;10279:228;6387:10;10329:7;10351:145;10408:15;10351:145;;;;;;;;;;;;;;;;;6387:10;10351:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10351:34:0;;;;;;;;;;;;:38;:145::i;30414:186::-;30545:15;;:47;;-1:-1:-1;;;30545:47:0;;-1:-1:-1;;;;;1455:32:1;;;30545:47:0;;;1437:51:1;30513:7:0;;30545:15;;:38;;1410:18:1;;30545:47:0;1264:230:1;8716:216:0;8838:4;8860:42;6387:10;8884:9;8895:6;8860:9;:42::i;28991:354::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;29109:23:::1;;29097:8;:35:::0;29075:136:::1;;;::::0;-1:-1:-1;;;29075:136:0;;10208:2:1;29075:136:0::1;::::0;::::1;10190:21:1::0;10247:2;10227:18;;;10220:30;10286:34;10266:18;;;10259:62;-1:-1:-1;;;10337:18:1;;;10330:49;10396:19;;29075:136:0::1;10006:415:1::0;29075:136:0::1;29268:23;::::0;29227:65:::1;::::0;29258:8;;29227:65:::1;::::0;;;::::1;29303:23;:34:::0;28991:354::o;27978:385::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;28098:15:::1;::::0;-1:-1:-1;;;;;28098:15:0;;::::1;28076:38:::0;;::::1;::::0;28054:123:::1;;;::::0;-1:-1:-1;;;28054:123:0;;10628:2:1;28054:123:0::1;::::0;::::1;10610:21:1::0;10667:2;10647:18;;;10640:30;10706:34;10686:18;;;10679:62;-1:-1:-1;;;10757:18:1;;;10750:33;10800:19;;28054:123:0::1;10426:399:1::0;28054:123:0::1;28235:15;::::0;28193:59:::1;::::0;-1:-1:-1;;;;;28235:15:0;;::::1;::::0;28193:59;::::1;::::0;::::1;::::0;28235:15:::1;::::0;28193:59:::1;28263:15;:37:::0;;-1:-1:-1;;;;;;28263:37:0::1;-1:-1:-1::0;;;;;28263:37:0;;::::1;::::0;;::::1;::::0;;;28311:15:::1;::::0;:44:::1;::::0;-1:-1:-1;;;28311:44:0;;::::1;::::0;::::1;1437:51:1::0;;;;28311:15:0;;::::1;::::0;:32:::1;::::0;1410:18:1;;28311:44:0::1;1264:230:1::0;23990:355:0;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24122:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;24100:132:::1;;;::::0;-1:-1:-1;;;24100:132:0;;11032:2:1;24100:132:0::1;::::0;::::1;11014:21:1::0;11071:2;11051:18;;;11044:30;11110:34;11090:18;;;11083:62;-1:-1:-1;;;11161:18:1;;;11154:41;11212:19;;24100:132:0::1;10830:407:1::0;24100:132:0::1;-1:-1:-1::0;;;;;24243:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;24243:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24297:40;;154:41:1;;;24297:40:0::1;::::0;127:18:1;24297:40:0::1;14:187:1::0;23742:240:0;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23860:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;23860:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23924:50;;154:41:1;;;23924:50:0::1;::::0;127:18:1;23924:50:0::1;14:187:1::0;25306:947:0;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;25439:15:::1;::::0;-1:-1:-1;;;;;25439:36:0;;::::1;:15:::0;::::1;:36;25435:399;;-1:-1:-1::0;;;;;25518:32:0;::::1;25492:125;;;::::0;-1:-1:-1;;;25492:125:0;;11444:2:1;25492:125:0::1;::::0;::::1;11426:21:1::0;11483:2;11463:18;;;11456:30;11522:33;11502:18;;;11495:61;11573:18;;25492:125:0::1;11242:355:1::0;25492:125:0::1;25741:15;::::0;25637:134:::1;::::0;-1:-1:-1;;;11804:30:1;;-1:-1:-1;;;;;25741:15:0;;::::1;::::0;25637:134;::::1;::::0;11859:2:1;11850:12;25637:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;25786:15;:36:::0;;-1:-1:-1;;;;;;25786:36:0::1;-1:-1:-1::0;;;;;25786:36:0;::::1;;::::0;;25435:399:::1;25850:15;::::0;-1:-1:-1;;;;;25850:37:0;;::::1;:15:::0;::::1;:37;25846:400;;-1:-1:-1::0;;;;;25930:32:0;::::1;25904:125;;;::::0;-1:-1:-1;;;25904:125:0;;12075:2:1;25904:125:0::1;::::0;::::1;12057:21:1::0;12114:2;12094:18;;;12087:30;12153:33;12133:18;;;12126:61;12204:18;;25904:125:0::1;11873:355:1::0;25904:125:0::1;26153:15;::::0;26049:134:::1;::::0;-1:-1:-1;;;12435:30:1;;-1:-1:-1;;;;;26153:15:0;;::::1;::::0;26049:134;::::1;::::0;12490:2:1;12481:12;26049:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;26198:15;:36:::0;;-1:-1:-1;;;;;26198:36:0;::::1;-1:-1:-1::0;;;;;;26198:36:0;;::::1;;::::0;;25306:947;;:::o;7369:281::-;7126:6;;-1:-1:-1;;;;;7126:6:0;6387:10;7126:22;7118:67;;;;-1:-1:-1;;;7118:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7472:22:0;::::1;7450:110;;;::::0;-1:-1:-1;;;7450:110:0;;12706:2:1;7450:110:0::1;::::0;::::1;12688:21:1::0;12745:2;12725:18;;;12718:30;12784:34;12764:18;;;12757:62;-1:-1:-1;;;12835:18:1;;;12828:36;12881:19;;7450:110:0::1;12504:402:1::0;7450:110:0::1;7597:6;::::0;;7576:38:::1;::::0;-1:-1:-1;;;;;7576:38:0;;::::1;::::0;7597:6;::::1;::::0;7576:38:::1;::::0;::::1;7625:6;:17:::0;;-1:-1:-1;;;;;;7625:17:0::1;-1:-1:-1::0;;;;;7625:17:0;;;::::1;::::0;;;::::1;::::0;;7369:281::o;3094:181::-;3152:7;;3184:5;3188:1;3184;:5;:::i;:::-;3172:17;;3213:1;3208;:6;;3200:46;;;;-1:-1:-1;;;3200:46:0;;13246:2:1;3200:46:0;;;13228:21:1;13285:2;13265:18;;;13258:30;13324:29;13304:18;;;13297:57;13371:18;;3200:46:0;13044:351:1;3200:46:0;3266:1;3094:181;-1:-1:-1;;;3094:181:0:o;12000:378::-;-1:-1:-1;;;;;12136:19:0;;12128:68;;;;-1:-1:-1;;;12128:68:0;;13602:2:1;12128:68:0;;;13584:21:1;13641:2;13621:18;;;13614:30;13680:34;13660:18;;;13653:62;-1:-1:-1;;;13731:18:1;;;13724:34;13775:19;;12128:68:0;13400:400:1;12128:68:0;-1:-1:-1;;;;;12215:21:0;;12207:68;;;;-1:-1:-1;;;12207:68:0;;14007:2:1;12207:68:0;;;13989:21:1;14046:2;14026:18;;;14019:30;14085:34;14065:18;;;14058:62;-1:-1:-1;;;14136:18:1;;;14129:32;14178:19;;12207:68:0;13805:398:1;12207:68:0;-1:-1:-1;;;;;12286:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12338:32;;2053:25:1;;;12338:32:0;;2026:18:1;12338:32:0;;;;;;;;12000:378;;;:::o;31517:2840::-;-1:-1:-1;;;;;31649:18:0;;31641:68;;;;-1:-1:-1;;;31641:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31728:16:0;;31720:64;;;;-1:-1:-1;;;31720:64:0;;;;;;;:::i;:::-;31801:6;31811:1;31801:11;31797:93;;31829:28;31845:4;31851:2;31855:1;31829:15;:28::i;31797:93::-;-1:-1:-1;;;;;31921:31:0;;;31902:16;31921:31;;;:25;:31;;;;;;;;;31981:29;;;;;;;;;32042:35;;;:29;:35;;;;;;31921:31;;;;;31981:29;;;;32042:35;32041:36;:87;;;;-1:-1:-1;;;;;;32095:33:0;;;;;;:29;:33;;;;;;;;32094:34;32041:87;32023:1084;;;32163:16;;-1:-1:-1;;;32163:16:0;;;;32155:59;;;;-1:-1:-1;;;32155:59:0;;15220:2:1;32155:59:0;;;15202:21:1;15259:2;15239:18;;;15232:30;15298:32;15278:18;;;15271:60;15348:18;;32155:59:0;15018:354:1;32155:59:0;-1:-1:-1;;;;;32252:38:0;;;;;;:34;:38;;;;;;;;32251:39;:101;;;;-1:-1:-1;;;;;;32312:40:0;;;;;;:34;:40;;;;;;;;32311:41;32251:101;32229:610;;;32391:11;32387:212;;;32471:15;;32461:6;:25;;32427:152;;;;-1:-1:-1;;;32427:152:0;;15579:2:1;32427:152:0;;;15561:21:1;15618:2;15598:18;;;15591:30;15657:34;15637:18;;;15630:62;-1:-1:-1;;;15708:18:1;;;15701:39;15757:19;;32427:152:0;15377:405:1;32427:152:0;32623:10;32619:205;;;32702:11;;32692:6;:21;;32658:146;;;;-1:-1:-1;;;32658:146:0;;15989:2:1;32658:146:0;;;15971:21:1;16028:2;16008:18;;;16001:30;16067:34;16047:18;;;16040:62;-1:-1:-1;;;16118:18:1;;;16111:37;16165:19;;32658:146:0;15787:403:1;32658:146:0;-1:-1:-1;;;;;32858:33:0;;;;;;:29;:33;;;;;;;;32853:243;;32970:15;;32959:6;32943:13;32953:2;-1:-1:-1;;;;;8682:18:0;8650:7;8682:18;;;:9;:18;;;;;;;8531:177;32943:13;:22;;;;:::i;:::-;32942:43;;32912:168;;;;-1:-1:-1;;;32912:168:0;;16397:2:1;32912:168:0;;;16379:21:1;16436:2;16416:18;;;16409:30;16475:34;16455:18;;;16448:62;-1:-1:-1;;;16526:18:1;;;16519:49;16585:19;;32912:168:0;16195:415:1;32912:168:0;33119:37;33132:11;33145:10;33119:12;:37::i;:::-;33210:23;;33200:4;33167:12;8682:18;;;:9;:18;;;;;;33264:16;;-1:-1:-1;;33182:51:0;;-1:-1:-1;;;33264:16:0;;;;:40;;;;;33297:7;33264:40;:67;;;;-1:-1:-1;33322:9:0;;;;33321:10;33264:67;:97;;;;-1:-1:-1;33348:9:0;;-1:-1:-1;;;33348:9:0;;;;:13;;33264:97;:143;;;;-1:-1:-1;;;;;;33378:29:0;;;;;;:25;:29;;;;;;;;33264:143;33246:280;;;33434:9;:16;;-1:-1:-1;;33434:16:0;33446:4;33434:16;;;33465:17;:15;:17::i;:::-;33497:9;:17;;-1:-1:-1;;33497:17:0;;;33246:280;33554:9;;33538:12;;33554:9;;33553:10;:30;;;;-1:-1:-1;33567:16:0;;-1:-1:-1;;;33567:16:0;;;;33553:30;-1:-1:-1;;;;;33600:24:0;;;;;;:18;:24;;;;;;33538:45;;-1:-1:-1;33600:24:0;;;:50;;-1:-1:-1;;;;;;33628:22:0;;;;;;:18;:22;;;;;;;;33600:50;33596:98;;;-1:-1:-1;33677:5:0;33596:98;33708:7;:24;;;;-1:-1:-1;33719:9:0;;-1:-1:-1;;;33719:9:0;;;;:13;;33708:24;33704:414;;;33773:9;;33749:11;;33786:3;;33764:18;;-1:-1:-1;;;33773:9:0;;;;33764:6;:18;:::i;:::-;33763:26;;;;:::i;:::-;33835:8;;33749:40;;-1:-1:-1;33804:18:0;;33847:3;;33826:17;;33835:8;;;;;33826:6;:17;:::i;:::-;33825:25;;;;:::i;:::-;33804:46;-1:-1:-1;33874:12:0;33883:3;33874:6;:12;:::i;:::-;33865:21;;33901:41;33917:4;33931;33938:3;33901:15;:41::i;:::-;33963:14;;33959:148;;33998:38;34018:4;34025:10;33998:11;:38::i;:::-;34070:8;;34060:31;;;34070:8;;;;;;17345:36:1;;17412:2;17397:18;;17390:34;;;34060:31:0;;17318:18:1;34060:31:0;;;;;;;33959:148;33734:384;;33704:414;34128:33;34144:4;34150:2;34154:6;34128:15;:33::i;:::-;34191:15;;-1:-1:-1;;;;;34191:15:0;:26;34226:4;34233:15;34226:4;-1:-1:-1;;;;;8682:18:0;8650:7;8682:18;;;:9;:18;;;;;;;8531:177;34233:15;34191:58;;-1:-1:-1;;;;;;34191:58:0;;;;;;;-1:-1:-1;;;;;17643:32:1;;;34191:58:0;;;17625:51:1;17692:18;;;17685:34;17598:18;;34191:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34174:96;34284:15;;-1:-1:-1;;;;;34284:15:0;:26;34319:2;34324:13;34319:2;-1:-1:-1;;;;;8682:18:0;8650:7;8682:18;;;:9;:18;;;;;;;8531:177;34324:13;34284:54;;-1:-1:-1;;;;;;34284:54:0;;;;;;;-1:-1:-1;;;;;17643:32:1;;;34284:54:0;;;17625:51:1;17692:18;;;17685:34;17598:18;;34284:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34280:70;31630:2727;;;;31517:2840;;;:::o;3427:226::-;3547:7;3583:12;3575:6;;;;3567:29;;;;-1:-1:-1;;;3567:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3607:9:0;3619:5;3623:1;3619;:5;:::i;:::-;3607:17;3427:226;-1:-1:-1;;;;;3427:226:0:o;11541:451::-;-1:-1:-1;;;;;11625:21:0;;11617:67;;;;-1:-1:-1;;;11617:67:0;;17932:2:1;11617:67:0;;;17914:21:1;17971:2;17951:18;;;17944:30;18010:34;17990:18;;;17983:62;-1:-1:-1;;;18061:18:1;;;18054:31;18102:19;;11617:67:0;17730:397:1;11617:67:0;11776:105;11813:6;11776:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11776:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;11755:18:0;;;;;;:9;:18;;;;;:126;11907:12;;:24;;11924:6;11907:16;:24::i;:::-;11892:12;:39;11947:37;;2053:25:1;;;11973:1:0;;-1:-1:-1;;;;;11947:37:0;;;;;2041:2:1;2026:18;11947:37:0;;;;;;;11541:451;;:::o;35543:1538::-;35781:22;;;;:45;;;;:22;;;;;:45;35777:329;;35848:187;;-1:-1:-1;;;18334:33:1;;18392:2;18383:12;35848:187:0;;;;;;;;35926:22;;;;36006:14;;35848:187;;35926:22;;;;;;;;35848:187;;;;-1:-1:-1;;;;;;;;;;;35848:187:0;;;36006:14;;;35848:187;:::i;:::-;;;;;;;;36050:22;;;:44;;-1:-1:-1;;36050:44:0;;;;;;;;;35777:329;36120:22;;;;:45;;;;:22;;;;;:45;36116:329;;36187:187;;-1:-1:-1;;;18822:33:1;;18880:2;18871:12;36187:187:0;;;;;;;;36265:22;;;;36345:14;;36187:187;;36265:22;;;;;;;;36187:187;;;;-1:-1:-1;;;;;;;;;;;36187:187:0;;;36345:14;;;36187:187;:::i;:::-;;;;;;;;36389:22;;;:44;;-1:-1:-1;;36389:44:0;;;;;;;;;36116:329;36459:17;;;;:35;;;;-1:-1:-1;;;36459:17:0;;;;:35;36455:294;;36516:172;;-1:-1:-1;;;19096:28:1;;19149:2;19140:12;36516:172:0;;;;;;;;36589:17;;;;36659:14;;36516:172;;36589:17;-1:-1:-1;;;36589:17:0;;;;;;36516:172;;;;-1:-1:-1;;;;;;;;;;;36516:172:0;;;36659:14;;;36516:172;:::i;:::-;;;;;;;;36703:17;;;:34;;-1:-1:-1;;36703:34:0;-1:-1:-1;;;36703:34:0;;;;;;;36455:294;36763:20;;;;:41;;;;-1:-1:-1;;;36763:20:0;;;;:41;36759:315;;36826:181;;-1:-1:-1;;;19365:31:1;;19421:2;19412:12;36826:181:0;;;;;;;;36902:20;;;;36978:14;;36826:181;;36902:20;-1:-1:-1;;;36902:20:0;;;;;;36826:181;;;;-1:-1:-1;;;;;;;;;;;36826:181:0;;;36978:14;;;36826:181;:::i;:::-;;;;;;;;37022:20;;;:40;;;;;-1:-1:-1;;;37022:40:0;-1:-1:-1;;37022:40:0;;;;;;35543:1538;;;;;:::o;37089:1505::-;37322:21;;;;:43;;;;:21;;:43;37318:322;;37387:184;;-1:-1:-1;;;19637:32:1;;19694:2;19685:12;37387:184:0;;;;;;;;37464:21;;;;37542:14;;37387:184;;37464:21;;;;;37387:184;;;;-1:-1:-1;;;;;;;;;;;37387:184:0;;;37542:14;;;37387:184;:::i;:::-;;;;;;;;37586:21;;;:42;;-1:-1:-1;;37586:42:0;;;;;;;37318:322;37654:21;;;;:43;;;;:21;;;;;:43;37650:322;;37719:184;;-1:-1:-1;;;19910:32:1;;19967:2;19958:12;37719:184:0;;;;;;;;37796:21;;;;37874:14;;37719:184;;37796:21;;;;;;;;37719:184;;;;-1:-1:-1;;;;;;;;;;;37719:184:0;;;37874:14;;;37719:184;:::i;:::-;;;;;;;;37918:21;;;:42;;-1:-1:-1;;37918:42:0;;;;;;;;;37650:322;37986:16;;;;:33;;;;-1:-1:-1;;;37986:16:0;;;;:33;37982:287;;38041:169;;-1:-1:-1;;;20183:27:1;;20235:2;20226:12;38041:169:0;;;;;;;;38113:16;;;;38181:14;;38041:169;;38113:16;-1:-1:-1;;;38113:16:0;;;;;;38041:169;;;;-1:-1:-1;;;;;;;;;;;38041:169:0;;;38181:14;;;38041:169;:::i;:::-;;;;;;;;38225:16;;;:32;;-1:-1:-1;;38225:32:0;-1:-1:-1;;;38225:32:0;;;;;;;37982:287;38283:19;;;;:39;;;;-1:-1:-1;;;38283:19:0;;;;:39;38279:308;;38344:178;;-1:-1:-1;;;20451:30:1;;20506:2;20497:12;38344:178:0;;;;;;;;38419:19;;;;38493:14;;38344:178;;38419:19;-1:-1:-1;;;38419:19:0;;;;;;38344:178;;;;-1:-1:-1;;;;;;;;;;;38344:178:0;;;38493:14;;;38344:178;:::i;:::-;;;;;;;;38537:19;;;:38;;;;;-1:-1:-1;;;38537:38:0;-1:-1:-1;;38537:38:0;;;;;;37089:1505;;;;;:::o;10545:606::-;-1:-1:-1;;;;;10685:20:0;;10677:70;;;;-1:-1:-1;;;10677:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10766:23:0;;10758:71;;;;-1:-1:-1;;;10758:71:0;;;;;;;:::i;:::-;10918:108;10954:6;10918:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10918:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;10898:17:0;;;;;;;:9;:17;;;;;;:128;;;;11060:20;;;;;;;:32;;11085:6;11060:24;:32::i;:::-;-1:-1:-1;;;;;11037:20:0;;;;;;;:9;:20;;;;;;;:55;;;;11108:35;;;;;;;;;;11136:6;2053:25:1;;2041:2;2026:18;;1907:177;34365:1170:0;34441:13;:17;;-1:-1:-1;;34520:15:0;;;34548:231;;;;34596:23;;34580:13;:39;;34596:23;;;;-1:-1:-1;;34634:39:0;;;;;;;34596:23;34650;;;;;;34634:39;;;;;;;;-1:-1:-1;;34732:35:0;-1:-1:-1;;;34699:18:0;;;;34688:29;;;;-1:-1:-1;;34732:35:0;;-1:-1:-1;;;34746:21:0;;;;34732:35;;;;;;;;34548:231;34793:10;34789:234;;;34836:24;;34820:13;:40;;34836:24;;;;;;;;-1:-1:-1;;34875:40:0;;;;;;;34891:24;;;;;;34875:40;;;;;-1:-1:-1;;34975:36:0;-1:-1:-1;;;34941:19:0;;;;34930:30;;-1:-1:-1;;34975:36:0;;-1:-1:-1;;;34989:22:0;;;;;;;34975:36;;;;;;;34789:234;35038:10;35037:11;:27;;;;;35053:11;35052:12;35037:27;35033:251;;;35097:24;;35081:13;:40;;35097:24;;;;;;;;-1:-1:-1;;35136:40:0;;;;;;;35152:24;;;;;;35136:40;;;;;-1:-1:-1;;35236:36:0;-1:-1:-1;;;35202:19:0;;;;35191:30;;-1:-1:-1;;35236:36:0;;-1:-1:-1;;;35250:22:0;;;;;;;35236:36;;;;;;;35033:251;35349:11;;;;;;;;;35338:8;;;;;;35306:29;;35349:11;35322:13;;;;;35306;:29;:::i;:::-;:40;;;;:::i;:::-;:54;;;;:::i;:::-;35294:9;:66;;-1:-1:-1;;35294:66:0;;-1:-1:-1;;;35294:66:0;;;;;;;;;;;;;35376:151;;;35402:13;;;;;;;;;;20759:36:1;;35294:66:0;35430:13;;;;20826:2:1;20811:18;;20804:45;35458:8:0;;;;;20865:18:1;;;20858:45;;;;35481:11:0;;;;;20934:2:1;20919:18;;20912:45;35507:9:0;;;;;;20988:3:1;20973:19;;20966:46;35376:151:0;;20746:3:1;20731:19;35376:151:0;20520:498:1;38602:1530:0;38692:4;38648:23;8682:18;;;:9;:18;;;;;;38846:9;;8682:18;;38737:21;;38871:1;;38846:9;-1:-1:-1;;;38846:9:0;;;;;38798:31;;38816:13;8682:18;38798:31;:::i;:::-;38797:58;;;;:::i;:::-;:75;;;;:::i;:::-;38944:9;;38771:101;;-1:-1:-1;38883:24:0;;38944:9;-1:-1:-1;;;38944:9:0;;;;;38911:29;;38929:11;;;;;38911:15;:29;:::i;:::-;38910:43;;;;:::i;:::-;38883:70;-1:-1:-1;38964:20:0;39019:34;38883:70;39019:15;:34;:::i;:::-;38987:67;;:15;:67;:::i;:::-;38964:90;;39067:31;39085:12;39067:17;:31::i;:::-;39111:27;39141:41;39165:17;39141:21;:41;:::i;:::-;39274:11;;39111:71;;-1:-1:-1;39193:19:0;;39274:11;;;;;;;39263:8;;;;;;39242:17;;39263:8;;39242:13;:17;:::i;:::-;39241:30;;;;:::i;:::-;:44;;;;:::i;:::-;39215:9;;:71;;;-1:-1:-1;;;39215:9:0;;;;:71;:::i;:::-;39349:13;;39193:93;;;;;-1:-1:-1;39297:26:0;;39406:1;;39193:93;;39327:35;;39349:13;39327:19;:35;:::i;:::-;39326:64;;;;:::i;:::-;:81;;;;:::i;:::-;39297:110;-1:-1:-1;39418:26:0;39447:42;39297:110;39447:19;:42;:::i;:::-;39510:15;;39502:53;;39418:71;;-1:-1:-1;;;;;;39510:15:0;;39502:53;;;;;39418:71;;39510:15;39502:53;39510:15;39502:53;39418:71;39510:15;39502:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39572:19:0;;39568:253;;39608:50;39622:15;39639:18;39608:13;:50::i;:::-;39678:131;;;21595:25:1;;;21651:2;21636:18;;21629:34;;;21679:18;;;21672:34;;;39678:131:0;;21583:2:1;21568:18;39678:131:0;;;;;;;39568:253;39901:15;;39848:111;;-1:-1:-1;;;39848:111:0;;-1:-1:-1;;;;;39901:15:0;;;39848:111;;;17625:51:1;17692:18;;;17685:34;;;39833:12:0;;39863:4;;39848:30;;17598:18:1;;39848:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39833:126;;39974:7;39970:155;;;39998:15;;:64;;-1:-1:-1;;;39998:64:0;;;;;2053:25:1;;;-1:-1:-1;;;;;39998:15:0;;;;:46;;2026:18:1;;39998:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40082:31;40096:16;40082:31;;;;2053:25:1;;2041:2;2026:18;;1907:177;40082:31:0;;;;;;;;39970:155;38637:1495;;;;;;;;;;38602:1530::o;3283:136::-;3341:7;3368:43;3372:1;3375;3368:43;;;;;;;;;;;;;;;;;:3;:43::i;40140:500::-;40231:16;;;40245:1;40231:16;;;;;;;;40207:21;;40231:16;;;;;;;;;;-1:-1:-1;40231:16:0;40207:40;;40276:4;40258;40263:1;40258:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40258:23:0;;;:7;;;;;;;;;;:23;;;;40302:15;;:22;;;-1:-1:-1;;;40302:22:0;;;;:15;;;;;:20;;:22;;;;;40258:7;;40302:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40292:4;40297:1;40292:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40292:32:0;;;:7;;;;;;;;;:32;40367:15;;40335:62;;40352:4;;40367:15;40385:11;40335:8;:62::i;:::-;40408:15;;:224;;-1:-1:-1;;;40408:224:0;;-1:-1:-1;;;;;40408:15:0;;;;:66;;:224;;40489:11;;40408:15;;40559:4;;40586;;40606:15;;40408:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40196:444;40140:500;:::o;40648:423::-;40762:15;;40730:62;;40747:4;;-1:-1:-1;;;;;40762:15:0;40780:11;40730:8;:62::i;:::-;40803:15;;41007;;40803:260;;-1:-1:-1;;;40803:260:0;;40875:4;40803:260;;;23842:34:1;23892:18;;;23885:34;;;40803:15:0;23935:18:1;;;23928:34;;;23978:18;;;23971:34;-1:-1:-1;;;;;41007:15:0;;;24021:19:1;;;24014:44;41037:15:0;24074:19:1;;;24067:35;40803:15:0;;;:31;;40842:9;;23776:19:1;;40803:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1499:180::-;1558:6;1611:2;1599:9;1590:7;1586:23;1582:32;1579:52;;;1627:1;1624;1617:12;1579:52;-1:-1:-1;1650:23:1;;1499:180;-1:-1:-1;1499:180:1:o;2089:456::-;2166:6;2174;2182;2235:2;2223:9;2214:7;2210:23;2206:32;2203:52;;;2251:1;2248;2241:12;2203:52;2290:9;2277:23;2309:31;2334:5;2309:31;:::i;:::-;2359:5;-1:-1:-1;2416:2:1;2401:18;;2388:32;2429:33;2388:32;2429:33;:::i;:::-;2089:456;;2481:7;;-1:-1:-1;;;2535:2:1;2520:18;;;;2507:32;;2089:456::o;2739:247::-;2798:6;2851:2;2839:9;2830:7;2826:23;2822:32;2819:52;;;2867:1;2864;2857:12;2819:52;2906:9;2893:23;2925:31;2950:5;2925:31;:::i;3199:156::-;3265:20;;3325:4;3314:16;;3304:27;;3294:55;;3345:1;3342;3335:12;3294:55;3199:156;;;:::o;3360:393::-;3438:6;3446;3454;3462;3515:3;3503:9;3494:7;3490:23;3486:33;3483:53;;;3532:1;3529;3522:12;3483:53;3555:27;3572:9;3555:27;:::i;:::-;3545:37;;3601:36;3633:2;3622:9;3618:18;3601:36;:::i;:::-;3591:46;;3656:36;3688:2;3677:9;3673:18;3656:36;:::i;:::-;3646:46;;3711:36;3743:2;3732:9;3728:18;3711:36;:::i;:::-;3701:46;;3360:393;;;;;;;:::o;3758:118::-;3844:5;3837:13;3830:21;3823:5;3820:32;3810:60;;3866:1;3863;3856:12;3881:382;3946:6;3954;4007:2;3995:9;3986:7;3982:23;3978:32;3975:52;;;4023:1;4020;4013:12;3975:52;4062:9;4049:23;4081:31;4106:5;4081:31;:::i;:::-;4131:5;-1:-1:-1;4188:2:1;4173:18;;4160:32;4201:30;4160:32;4201:30;:::i;:::-;4250:7;4240:17;;;3881:382;;;;;:::o;4692:388::-;4760:6;4768;4821:2;4809:9;4800:7;4796:23;4792:32;4789:52;;;4837:1;4834;4827:12;4789:52;4876:9;4863:23;4895:31;4920:5;4895:31;:::i;:::-;4945:5;-1:-1:-1;5002:2:1;4987:18;;4974:32;5015:33;4974:32;5015:33;:::i;5085:380::-;5164:1;5160:12;;;;5207;;;5228:61;;5282:4;5274:6;5270:17;5260:27;;5228:61;5335:2;5327:6;5324:14;5304:18;5301:38;5298:161;;5381:10;5376:3;5372:20;5369:1;5362:31;5416:4;5413:1;5406:15;5444:4;5441:1;5434:15;5298:161;;5085:380;;;:::o;5470:356::-;5672:2;5654:21;;;5691:18;;;5684:30;5750:34;5745:2;5730:18;;5723:62;5817:2;5802:18;;5470:356::o;7573:245::-;7640:6;7693:2;7681:9;7672:7;7668:23;7664:32;7661:52;;;7709:1;7706;7699:12;7661:52;7741:9;7735:16;7760:28;7782:5;7760:28;:::i;7823:184::-;7893:6;7946:2;7934:9;7925:7;7921:23;7917:32;7914:52;;;7962:1;7959;7952:12;7914:52;-1:-1:-1;7985:16:1;;7823:184;-1:-1:-1;7823:184:1:o;8012:127::-;8073:10;8068:3;8064:20;8061:1;8054:31;8104:4;8101:1;8094:15;8128:4;8125:1;8118:15;8144:204;8182:3;8218:4;8215:1;8211:12;8250:4;8247:1;8243:12;8285:3;8279:4;8275:14;8270:3;8267:23;8264:49;;;8293:18;;:::i;:::-;8329:13;;8144:204;-1:-1:-1;;;8144:204:1:o;8975:406::-;9177:2;9159:21;;;9216:2;9196:18;;;9189:30;9255:34;9250:2;9235:18;;9228:62;-1:-1:-1;;;9321:2:1;9306:18;;9299:40;9371:3;9356:19;;8975:406::o;12911:128::-;12951:3;12982:1;12978:6;12975:1;12972:13;12969:39;;;12988:18;;:::i;:::-;-1:-1:-1;13024:9:1;;12911:128::o;14208:401::-;14410:2;14392:21;;;14449:2;14429:18;;;14422:30;14488:34;14483:2;14468:18;;14461:62;-1:-1:-1;;;14554:2:1;14539:18;;14532:35;14599:3;14584:19;;14208:401::o;14614:399::-;14816:2;14798:21;;;14855:2;14835:18;;;14828:30;14894:34;14889:2;14874:18;;14867:62;-1:-1:-1;;;14960:2:1;14945:18;;14938:33;15003:3;14988:19;;14614:399::o;16615:168::-;16655:7;16721:1;16717;16713:6;16709:14;16706:1;16703:21;16698:1;16691:9;16684:17;16680:45;16677:71;;;16728:18;;:::i;:::-;-1:-1:-1;16768:9:1;;16615:168::o;16788:127::-;16849:10;16844:3;16840:20;16837:1;16830:31;16880:4;16877:1;16870:15;16904:4;16901:1;16894:15;16920:120;16960:1;16986;16976:35;;16991:18;;:::i;:::-;-1:-1:-1;17025:9:1;;16920:120::o;17045:125::-;17085:4;17113:1;17110;17107:8;17104:34;;;17118:18;;:::i;:::-;-1:-1:-1;17155:9:1;;17045:125::o;18406:209::-;-1:-1:-1;;18570:38:1;;;;18552:57;;18540:2;18525:18;;18406:209::o;21023:165::-;21061:1;21095:4;21092:1;21088:12;21119:3;21109:37;;21126:18;;:::i;:::-;21178:3;21171:4;21168:1;21164:12;21160:22;21155:27;;;21023:165;;;;:::o;21193:195::-;21231:4;21268;21265:1;21261:12;21300:4;21297:1;21293:12;21325:3;21320;21317:12;21314:38;;;21332:18;;:::i;:::-;21369:13;;;21193:195;-1:-1:-1;;;21193:195:1:o;22128:127::-;22189:10;22184:3;22180:20;22177:1;22170:31;22220:4;22217:1;22210:15;22244:4;22241:1;22234:15;22260:251;22330:6;22383:2;22371:9;22362:7;22358:23;22354:32;22351:52;;;22399:1;22396;22389:12;22351:52;22431:9;22425:16;22450:31;22475:5;22450:31;:::i;22516:980::-;22778:4;22826:3;22815:9;22811:19;22857:6;22846:9;22839:25;22883:2;22921:6;22916:2;22905:9;22901:18;22894:34;22964:3;22959:2;22948:9;22944:18;22937:31;22988:6;23023;23017:13;23054:6;23046;23039:22;23092:3;23081:9;23077:19;23070:26;;23131:2;23123:6;23119:15;23105:29;;23152:1;23162:195;23176:6;23173:1;23170:13;23162:195;;;23241:13;;-1:-1:-1;;;;;23237:39:1;23225:52;;23332:15;;;;23297:12;;;;23273:1;23191:9;23162:195;;;-1:-1:-1;;;;;;;23413:32:1;;;;23408:2;23393:18;;23386:60;-1:-1:-1;;;23477:3:1;23462:19;23455:35;23374:3;22516:980;-1:-1:-1;;;22516:980:1:o;24113:306::-;24201:6;24209;24217;24270:2;24258:9;24249:7;24245:23;24241:32;24238:52;;;24286:1;24283;24276:12;24238:52;24315:9;24309:16;24299:26;;24365:2;24354:9;24350:18;24344:25;24334:35;;24409:2;24398:9;24394:18;24388:25;24378:35;;24113:306;;;;;:::o

Swarm Source

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