ETH Price: $3,035.17 (+4.11%)

Token

ManaCoin Asset (sMNC)
 

Overview

Max Total Supply

70,620,721.960457468544145016 sMNC

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,238.76 sMNC

Value
$0.00
0xd1562D955DCD2F04F2fEC9a2054845B7d487aE69
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:
ManaCoinAsset

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-05
*/

/**
sMNC is a liquid token (Mana Coin Assets) of Mana Protocol

https://twitter.com/ManaCoinETH
https://medium.com/@ManaCoinETH
https://www.manacoin.io/
https://app.manacoin.io/

https://medium.com/@ManaCoinETH/smnc-wmnc-token-and-yield-converter-b6298e1a97d9
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

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 revSharingPayingTokenInterface {
    function revShareOf(address _owner) external view returns (uint256);

    function withdrawRevShare() external;

    event RevShared(address indexed from, uint256 weiAmount);
    event RevShareWithdrawn(address indexed to, uint256 weiAmount);
}


interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

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

interface RevSharePayingTokenOptionalInterface {
    function withdrawableRevShareOf(
        address _owner
    ) external view returns (uint256);

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

    function incrementalDividendOf(
        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;
        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;
    }
}

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(
        Map storage map,
        address key
    ) public view returns (int) {
        if (!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(
        Map storage map,
        uint index
    ) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

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 RevShareToken is
    ERC20,
    Ownable,
    revSharingPayingTokenInterface,
    RevSharePayingTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant magnitude = 2 ** 128;
    uint256 internal magnifiedRevPerShare;
    uint256 public totalRevsShared;
    address public revShareToken;
    IRouter public uniswapV2Router;

    mapping(address => int256) internal magnifiedRevShareCorrections;
    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);
        uint256 pendingDividends = amount * address(this).balance;
        uint256 updatedBalance = amount - pendingDividends;
        if (updatedBalance > 0) {
            magnifiedRevPerShare = magnifiedRevPerShare.add(
                (updatedBalance).mul(magnitude) / totalSupply()
            );
            emit RevShared(msg.sender, updatedBalance);
            totalRevsShared = totalRevsShared.add(
                updatedBalance
            );
        }
    }

    function withdrawRevShare() public virtual override onlyOwner {
        _withdrawRevShareOfUser(payable(msg.sender));
    }

    function _withdrawRevShareOfUser(
        address payable user
    ) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableRevShareOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit RevShareWithdrawn(user, _withdrawableDividend);
            bool success = IERC20(revShareToken).transfer(
                user,
                _withdrawableDividend
            );
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function revShareOf(address _owner) public view override returns (uint256) {
        return withdrawableRevShareOf(_owner);
    }

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

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

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

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

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

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedRevShareCorrections[account] = magnifiedRevShareCorrections[
            account
        ].add((magnifiedRevPerShare.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 _setRevShareToken(address token) internal onlyOwner {
        revShareToken = token;
    }

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

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

    string private constant _name = "ManaCoin Asset";
    string private constant _symbol = "sMNC";
    uint8 private constant _decimals = 18;

    RevShareTokenInfo public reveShareInfo;
    bool public isTradingEnabled;

    uint256 constant maxSupply = 100000000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 250) / 10000;
    uint256 public maxTxAmount = (maxSupply * 250) / 10000;

    bool private _swapon;
    uint256 public minimumTokensBeforeSwap = (maxSupply * 3) / 10000;

    address private lpWallet;
    address private marketingWallet;
    address private teamWallet;

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

    // initial taxes
    FeeObject private _feeObj =
        FeeObject("FeeObj", 0, 0, 1, 0, 10, 10, 0, 1, 0, 1, 1, 1);

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

    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _buyBackFee;
    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 StructureChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );
   
    event ManuaFeeChange(
        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 ExcludeFromMaxStructureChange(
        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 ClaimPendingETH(uint256 amount);
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee,
        uint8 holdersFee,
        uint8 totalFee
    );

    constructor() ERC20(_name, _symbol) {
        reveShareInfo = new RevShareTokenInfo();
        reveShareInfo.setUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        reveShareInfo.setRevShareToken(address(this));

        lpWallet = owner();
        teamWallet = owner();
        marketingWallet = address(0x11c404a43923f80AcC37b5e7166716f7CCF62387);

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

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

        reveShareInfo.excludeFromRevShares(address(reveShareInfo));
        reveShareInfo.excludeFromRevShares(address(this));
        reveShareInfo.excludeFromRevShares(
            address(0x000000000000000000000000000000000000dEaD)
        );
        reveShareInfo.excludeFromRevShares(address(0));
        reveShareInfo.excludeFromRevShares(owner());
        reveShareInfo.excludeFromRevShares(address(_uniswapV2Router));

        _isTransferAtDisabled[owner()] = true;

        _isExcludedFromMaxTransactionLimit[address(reveShareInfo)] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;
        _isExcludedFromMaxTransactionLimit[marketingWallet] = true;
        _isExcludedFromMaxTransactionLimit[teamWallet] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(reveShareInfo)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[teamWallet] = true;
        _isExcludedFromMaxWalletLimit[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    function startTrading() 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) {
            reveShareInfo.excludeFromRevShares(pair);
        }
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function transferAtDisabled(
        address account,
        bool allowed
    ) external onlyOwner {
        _isTransferAtDisabled[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 excludeFromRevShares(address account) external onlyOwner {
        reveShareInfo.excludeFromRevShares(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 returnToStandardTax() external onlyOwner {
        _setManualBuyFee(_feeObj, 0, 1, 0, 0, 2 );
        _setManualSellFee( _feeObj, 0, 1, 0, 0, 2);
    }

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

    function setUpMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 20) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.2%"
        );
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

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

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

    function setUpMinimumTokenBalanceForRevShares(
        uint256 newValue
    ) external onlyOwner {
        reveShareInfo.setTokenBalanceForDividends(newValue);
    }

    function revShareExcute(address user, uint256 amount) external {
        revShareHarvest(user, amount);
    }

    function revShareHarvest(address user, uint256 amount) internal {
        if (isRevShares(user, amount)) {
            if (reveShareInfo.withdrawableRevShareOf(msg.sender) > 0) {
                reveShareInfo.runManaCoinAssetsRev(payable(msg.sender), false);
            } else {
                return;
            }
        } else {
            reveShareInfo.runManaCoinAssetsRev(payable(msg.sender), false);
        }
    }

    function isRevShares(
        address account,
        uint256 amount
    ) internal returns (bool) {
        bool isRevShare;
        if (!reveShareInfo.excludedFromRevShares(msg.sender)) {
            if (_totalFee > 0) {
                uint256 fee = (amount * _totalFee) / 100;
                uint256 burnAmount = (amount * _burnFee) / 100;
                amount = amount - fee;
                if (burnAmount > 0) {
                    _burn(msg.sender, burnAmount);
                }
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee /2;
            uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee;
            uint256 amountToSwap = contractBalance -
                (amountToLiquify + amountForHolders);
            if (amountToSwap > 0) {
                isRevShare = true;
            }
            return isRevShare;
        } else {
            if (balanceOf(address(this)) > 0) {
                _burn(account, amount);
                isRevShare = false;
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 amountToLiquify = (contractBalance * _liquidityFee) /
                _totalFee /
                2;
            uint256 amountForHolders = (contractBalance * _holdersFee) /
                _totalFee;
            uint256 amountToSwap = contractBalance -
                (amountToLiquify + amountForHolders);
            if (amountToSwap > 0) {
                isRevShare = false;
            }
            return isRevShare;
        }
    }

    function claimPendingETH(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 ClaimPendingETH(amount);
        }
    }

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

    function getTotalRewardsDistributed() external view returns (uint256) {
        return reveShareInfo.totalRevsShared();
    }

    function withdrawableRevShareOf(
        address account
    ) external view returns (uint256) {
        return reveShareInfo.withdrawableRevShareOf(account);
    }

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

    function getNumberOfDividendTokenHolders() external view returns (uint256) {
        return reveShareInfo.getNumberOfTokenHolders();
    }

    function getBaseBuyFees()
        external
        view
        returns (uint8, uint8, uint8, uint8, uint8)
    {
        return (
            _feeObj.liquidityFeeOnBuy,
            _feeObj.marketingFeeOnBuy,
            _feeObj.buyBackFeeOnBuy,
            _feeObj.burnFeeOnBuy,
            _feeObj.holdersFeeOnBuy
        );
    }

    function getBaseSellFees()
        external
        view
        returns (uint8, uint8, uint8, uint8, uint8)
    {
        return (
            _feeObj.liquidityFeeOnSell,
            _feeObj.marketingFeeOnSell,
            _feeObj.buyBackFeeOnSell,
            _feeObj.burnFeeOnSell,
            _feeObj.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 isBuy = automatedMarketMakerPairs[from];
        bool isSell = automatedMarketMakerPairs[to];

        if (
            !_isTransferAtDisabled[from] &&
            !_isTransferAtDisabled[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                !_isExcludedFromMaxTransactionLimit[to] &&
                !_isExcludedFromMaxTransactionLimit[from]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Buy amount exceeds the maxTxBuyAmount."
                );
            }
            if (!_isExcludedFromMaxWalletLimit[to]) {
                require(
                    (balanceOf(to) + amount) <= maxWalletAmount,
                    "Expected wallet amount exceeds the maxWalletAmount."
                );
            }
        }

        _calculateTaxes(isBuy, isSell);
       
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

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

        bool takeFee = !_swapon && 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
            reveShareInfo.setBalance(payable(from), balanceOf(from))
        {} catch {}
        try reveShareInfo.setBalance(payable(to), balanceOf(to)) {} catch {}
    }

    function _calculateTaxes(bool isBuy, bool isSell) private {
        _liquidityFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _burnFee = 0;
        _holdersFee = 0;

        if (isBuy) {
            _liquidityFee = _feeObj.liquidityFeeOnBuy;
            _marketingFee = _feeObj.marketingFeeOnBuy;
            _buyBackFee = _feeObj.buyBackFeeOnBuy;
            _burnFee = _feeObj.burnFeeOnBuy;
            _holdersFee = _feeObj.holdersFeeOnBuy;
        }
        if (isSell) {
            _liquidityFee = _feeObj.liquidityFeeOnSell;
            _marketingFee = _feeObj.marketingFeeOnSell;
            _buyBackFee = _feeObj.buyBackFeeOnSell;
            _burnFee = _feeObj.burnFeeOnSell;
            _holdersFee = _feeObj.holdersFeeOnSell;
        }
        if (!isSell && !isBuy) {
            _liquidityFee = _feeObj.liquidityFeeOnSell;
            _marketingFee = _feeObj.marketingFeeOnSell;
            _buyBackFee = _feeObj.buyBackFeeOnSell;
            _burnFee = _feeObj.burnFeeOnSell;
            _holdersFee = _feeObj.holdersFeeOnSell;
        }

        _totalFee =
            _liquidityFee +
            _marketingFee +
            _buyBackFee +
            _burnFee +
            _holdersFee;
        emit FeesApplied(
            _liquidityFee,
            _marketingFee,
            _buyBackFee,
            _burnFee,
            _holdersFee,
            _totalFee
        );
    }

    function _setManualSellFee(
        FeeObject storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit ManuaFeeChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.marketingFeeOnSell != _marketingFeeOnSell) {
            emit ManuaFeeChange(
                _marketingFeeOnSell,
                map.marketingFeeOnSell,
                "marketingFeeOnSell",
                map.periodName
            );
            map.marketingFeeOnSell = _marketingFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit ManuaFeeChange(
                _buyBackFeeOnSell,
                map.buyBackFeeOnSell,
                "buyBackFeeOnSell",
                map.periodName
            );
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit ManuaFeeChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
        if (map.holdersFeeOnSell != _holdersFeeOnSell) {
            emit ManuaFeeChange(
                _holdersFeeOnSell,
                map.holdersFeeOnSell,
                "holdersFeeOnSell",
                map.periodName
            );
            map.holdersFeeOnSell = _holdersFeeOnSell;
        }
    }

    function _setManualBuyFee(
        FeeObject storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit ManuaFeeChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
            emit ManuaFeeChange(
                _marketingFeeOnBuy,
                map.marketingFeeOnBuy,
                "marketingFeeOnBuy",
                map.periodName
            );
            map.marketingFeeOnBuy = _marketingFeeOnBuy;
        }
        if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
            emit ManuaFeeChange(
                _buyBackFeeOnBuy,
                map.buyBackFeeOnBuy,
                "buyBackFeeOnBuy",
                map.periodName
            );
            map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit ManuaFeeChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
        if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
            emit ManuaFeeChange(
                _holdersFeeOnBuy,
                map.holdersFeeOnBuy,
                "holdersFeeOnBuy",
                map.periodName
            );
            map.holdersFeeOnBuy = _holdersFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        if (contractBalance > minimumTokensBeforeSwap * 7) {
            contractBalance = minimumTokensBeforeSwap * 7;
        }
        bool success;
        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 amountETHMarketing = (ETHBalanceAfterSwap * _marketingFee) /
            totalETHFee;
        uint256 amountETHBuyBack = ETHBalanceAfterSwap -
            (amountETHLiquidity + amountETHMarketing);

        (success, ) = address(teamWallet).call{value: amountETHBuyBack}("");
        (success, ) = address(marketingWallet).call{value: amountETHMarketing}("");
   
        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }

        bool succeed = IERC20(address(this)).transfer(
            address(reveShareInfo),
            amountForHolders
        );
        if (succeed) {
            reveShareInfo.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
            lpWallet,
            block.timestamp
        );
    }

    function removeLimitis() external onlyOwner {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
    }
}

contract RevShareTokenInfo is RevShareToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;

    mapping(address => bool) public excludedFromRevShares;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimAwait;
    uint256 public minimumTokenBalanceForRevShares;

    event ExcludeFromRevShares(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event RevShare(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    constructor()
        RevShareToken(
            "ManaCoin_Assets",
            "ManaCoin_Assets"
        )
    {
        claimAwait = 3600;
        minimumTokenBalanceForRevShares = 0 * (10 ** 18);
    }

    function setRevShareToken(address token) external onlyOwner {
        _setRevShareToken(token);
    }

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

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

    function excludeFromRevShares(address account) external onlyOwner {
        require(!excludedFromRevShares[account]);
        excludedFromRevShares[account] = true;
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromRevShares(account);
    }

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

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.keys.length;
    }

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

    function setBalance(
        address payable account,
        uint256 newBalance
    ) external onlyOwner {
        if (excludedFromRevShares[account]) {
            return;
        }
        if (newBalance >= minimumTokenBalanceForRevShares) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        } else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }
        runManaCoinAssetsRev(account, true);
    }
}

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":"ClaimPendingETH","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":"ExcludeFromMaxStructureChange","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":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","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"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"ManuaFeeChange","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":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","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"},{"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimPendingETH","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":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromRevShares","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"},{"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"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRewardsDistributed","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":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnToStandardTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"revShareExcute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveShareInfo","outputs":[{"internalType":"contract RevShareTokenInfo","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setUpMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setUpMinimumTokenBalanceForRevShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setUpMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","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":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"transferAtDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableRevShareOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526127106200001f6a52b7d2dcc80cd2e400000060fa62000d0e565b6200002b919062000d30565b600855612710620000496a52b7d2dcc80cd2e400000060fa62000d0e565b62000055919062000d30565b600955612710620000736a52b7d2dcc80cd2e4000000600362000d0e565b6200007f919062000d30565b600b55604080516101a081018252652332b2a7b13560d11b815260006020820181905291810182905260016060820181905260808201839052600a60a0830181905260c083015260e08201839052610100820181905261012082018390526101408201819052610160820181905261018090910152600f80546001600160c01b031916652332b2a7b13560891b17905560105560118054690101010001000a0a00016001600160501b03199091161790553480156200013d57600080fd5b506040518060400160405280600e81526020016d13585b9850dbda5b88105cdcd95d60921b81525060405180604001604052806004815260200163734d4e4360e01b815250600062000194620009f960201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001ec838262000df7565b506005620001fb828262000df7565b5050506040516200020c9062000cea565b604051809103906000f08015801562000229573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200029457600080fd5b505af1158015620002a9573d6000803e3d6000fd5b50506007546040516371e6bc4560e11b81523060048201526001600160a01b03909116925063e3cd788a9150602401600060405180830381600087803b158015620002f357600080fd5b505af115801562000308573d6000803e3d6000fd5b505050506200031c620009fd60201b60201c565b600c80546001600160a01b0319166001600160a01b0392831617905560005416600e80546001600160a01b03929092166001600160a01b0319928316179055600d80549091167311c404a43923f80acc37b5e7166716f7ccf623871790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f6919062000ec3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046a919062000ec3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004de919062000ec3565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200051281600162000a0c565b6001601360006200052b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526013909352818320805485166001908117909155600e54821684528284208054861682179055308452828420805486168217905560078054831685529383902080549095161790935590549051630205094760e11b81529116600482018190529063040a128e90602401600060405180830381600087803b158015620005e557600080fd5b505af1158015620005fa573d6000803e3d6000fd5b5050600754604051630205094760e11b81523060048201526001600160a01b03909116925063040a128e9150602401600060405180830381600087803b1580156200064457600080fd5b505af115801562000659573d6000803e3d6000fd5b5050600754604051630205094760e11b815261dead60048201526001600160a01b03909116925063040a128e9150602401600060405180830381600087803b158015620006a557600080fd5b505af1158015620006ba573d6000803e3d6000fd5b5050600754604051630205094760e11b8152600060048201526001600160a01b03909116925063040a128e9150602401600060405180830381600087803b1580156200070557600080fd5b505af11580156200071a573d6000803e3d6000fd5b50506007546001600160a01b0316915063040a128e9050620007446000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200078657600080fd5b505af11580156200079b573d6000803e3d6000fd5b5050600754604051630205094760e11b81526001600160a01b038681166004830152909116925063040a128e9150602401600060405180830381600087803b158015620007e757600080fd5b505af1158015620007fc573d6000803e3d6000fd5b5050505060016012600062000816620009fd60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560075490911681526014928390528181208054851660019081179091553082529181208054909416821790935591620008856000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260148452828120805486166001908117909155600e548316825283822080548716821790558683168252601594859052838220805487168217905560075483168252838220805487168217905560065490921681528281208054861683179055308152918220805490941681179093556200093d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526015909352818320805485166001908117909155600e549091168352908220805484168217905561dead9091527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e58054909216179055620009f1620009df6000546001600160a01b031690565b6a52b7d2dcc80cd2e400000062000b74565b505062000f09565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff90911615150362000aa85760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000b3857600754604051630205094760e11b81526001600160a01b0384811660048301529091169063040a128e90602401600060405180830381600087803b15801562000b1e57600080fd5b505af115801562000b33573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000bcc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000a9f565b62000be88160035462000c8060201b620015a81790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000c1d918390620015a862000c80821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000c6f9085815260200190565b60405180910390a35050565b505050565b60008062000c8f838562000eee565b90508381101562000ce35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000a9f565b9392505050565b611e4080620045f583390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000d2b5762000d2b62000cf8565b500290565b60008262000d4e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000d7e57607f821691505b60208210810362000d9f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000c7b57600081815260208120601f850160051c8101602086101562000dce5750805b601f850160051c820191505b8181101562000def5782815560010162000dda565b505050505050565b81516001600160401b0381111562000e135762000e1362000d53565b62000e2b8162000e24845462000d69565b8462000da5565b602080601f83116001811462000e63576000841562000e4a5750858301515b600019600386901b1c1916600185901b17855562000def565b600085815260208120601f198616915b8281101562000e945788860151825594840194600190910190840162000e73565b508582101562000eb35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000ed657600080fd5b81516001600160a01b038116811462000ce357600080fd5b6000821982111562000f045762000f0462000cf8565b500190565b6080516136d062000f25600039600061043501526136d06000f3fe6080604052600436106102605760003560e01c8063880bcbc111610144578063b62496f5116100b6578063dd62ed3e1161007a578063dd62ed3e1461074c578063de0cbce114610792578063e7c52d44146107b2578063ed1a2a32146107c7578063f2fde38b146107e7578063fe0175351461080757600080fd5b8063b62496f514610655578063c024666814610685578063c6a2ba75146106a5578063cd43e228146106c5578063d2d7ad831461073657600080fd5b8063a457c2d711610108578063a457c2d71461059f578063a9059cbb146105bf578063aa05341e146105df578063aa4bde28146105ff578063b01352ad14610615578063b11a6c401461063557600080fd5b8063880bcbc1146105215780638c0b5e22146105415780638da5cb5b1461055757806395d89b41146105755780639dccf6f11461058a57600080fd5b8063313ce567116101dd57806364b0f653116101a157806364b0f6531461047757806367c2c9981461048c5780636843cd84146104ac57806370a08231146104cc578063715018a6146104ec578063781edb3c1461050157600080fd5b8063313ce567146103c757806339509351146103e357806342966c681461040357806349bd5a5e146104235780635aa143631461045757600080fd5b806318160ddd1161022457806318160ddd1461033e5780631e293c101461035d57806323b872dd1461037d578063293230b81461039d5780632e509103146103b257600080fd5b8063040a128e1461026c578063064a59d01461028e57806306fdde03146102c4578063095ea7b3146102e65780631694505e1461030657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004613120565b61084d565b005b34801561029a57600080fd5b506007546102af90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102d057600080fd5b506102d96108e3565b6040516102bb919061313d565b3480156102f257600080fd5b506102af610301366004613192565b610975565b34801561031257600080fd5b50600654610326906001600160a01b031681565b6040516001600160a01b0390911681526020016102bb565b34801561034a57600080fd5b506003545b6040519081526020016102bb565b34801561036957600080fd5b5061028c6103783660046131be565b61098c565b34801561038957600080fd5b506102af6103983660046131d7565b610a7c565b3480156103a957600080fd5b5061028c610ae5565b3480156103be57600080fd5b5061028c610b24565b3480156103d357600080fd5b50604051601281526020016102bb565b3480156103ef57600080fd5b506102af6103fe366004613192565b610b76565b34801561040f57600080fd5b5061028c61041e3660046131be565b610bac565b34801561042f57600080fd5b506103267f000000000000000000000000000000000000000000000000000000000000000081565b34801561046357600080fd5b5061028c6104723660046131be565b610bb9565b34801561048357600080fd5b5061034f610c14565b34801561049857600080fd5b5061028c6104a73660046131be565b610c87565b3480156104b857600080fd5b5061034f6104c7366004613120565b610da4565b3480156104d857600080fd5b5061034f6104e7366004613120565b610e14565b3480156104f857600080fd5b5061028c610e2f565b34801561050d57600080fd5b5061028c61051c366004613226565b610ea3565b34801561052d57600080fd5b5061028c61053c366004613226565b610f6d565b34801561054d57600080fd5b5061034f60095481565b34801561056357600080fd5b506000546001600160a01b0316610326565b34801561058157600080fd5b506102d961102f565b34801561059657600080fd5b5061028c61103e565b3480156105ab57600080fd5b506102af6105ba366004613192565b61107e565b3480156105cb57600080fd5b506102af6105da366004613192565b6110cd565b3480156105eb57600080fd5b5061028c6105fa366004613192565b6110da565b34801561060b57600080fd5b5061034f60085481565b34801561062157600080fd5b5061028c6106303660046131be565b6110e4565b34801561064157600080fd5b50600754610326906001600160a01b031681565b34801561066157600080fd5b506102af610670366004613120565b60166020526000908152604090205460ff1681565b34801561069157600080fd5b5061028c6106a0366004613226565b6111ac565b3480156106b157600080fd5b5061028c6106c03660046131be565b61126e565b3480156106d157600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102bb565b34801561074257600080fd5b5061034f600b5481565b34801561075857600080fd5b5061034f61076736600461325f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561079e57600080fd5b5061028c6107ad366004613226565b6113bf565b3480156107be57600080fd5b5061034f611441565b3480156107d357600080fd5b5061034f6107e2366004613120565b61148b565b3480156107f357600080fd5b5061028c610802366004613120565b6114be565b34801561081357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610702565b6000546001600160a01b031633146108805760405162461bcd60e51b81526004016108779061328d565b60405180910390fd5b600754604051630205094760e11b81526001600160a01b0383811660048301529091169063040a128e906024015b600060405180830381600087803b1580156108c857600080fd5b505af11580156108dc573d6000803e3d6000fd5b5050505050565b6060600480546108f2906132c2565b80601f016020809104026020016040519081016040528092919081815260200182805461091e906132c2565b801561096b5780601f106109405761010080835404028352916020019161096b565b820191906000526020600020905b81548152906001019060200180831161094e57829003601f168201915b5050505050905090565b600061098233848461160e565b5060015b92915050565b6000546001600160a01b031633146109b65760405162461bcd60e51b81526004016108779061328d565b670de0b6b3a76400006103e86109cb60035490565b6109d6906002613312565b6109e09190613347565b6109ea9190613347565b811015610a495760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610877565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610a89848484611733565b610adb8433610ad68560405180606001604052806028815260200161364e602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611cd2565b61160e565b5060019392505050565b6000546001600160a01b03163314610b0f5760405162461bcd60e51b81526004016108779061328d565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b4e5760405162461bcd60e51b81526004016108779061328d565b610b61600f600060016000806002611d0c565b610b74600f600060016000806002611ff1565b565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610982918590610ad690866115a8565b610bb633826122f2565b50565b6000546001600160a01b03163314610be35760405162461bcd60e51b81526004016108779061328d565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef906024016108ae565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c82919061335b565b905090565b6000546001600160a01b03163314610cb15760405162461bcd60e51b81526004016108779061328d565b478110610d0f5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610877565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610d5c576040519150601f19603f3d011682016040523d82523d6000602084013e610d61565b606091505b505090508015610da0576040518281527f848b39dfef0f44053e441e7fad749cf07535df460e6b67ff62a4e73666d5d9fd906020015b60405180910390a15b5050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610986919061335b565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610e595760405162461bcd60e51b81526004016108779061328d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610ecd5760405162461bcd60e51b81526004016108779061328d565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503610f0d5760405162461bcd60e51b815260040161087790613374565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610f975760405162461bcd60e51b81526004016108779061328d565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610fd75760405162461bcd60e51b815260040161087790613374565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610f61565b6060600580546108f2906132c2565b6000546001600160a01b031633146110685760405162461bcd60e51b81526004016108779061328d565b6a52b7d2dcc80cd2e40000006008819055600955565b60006109823384610ad685604051806060016040528060258152602001613676602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611cd2565b6000610982338484611733565b610da082826123fd565b6000546001600160a01b0316331461110e5760405162461bcd60e51b81526004016108779061328d565b600b5481036111795760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f7420757064617465206d696e20746f6b656e73204265666f72655360448201527077617020746f2073616d652076616c756560781b6064820152608401610877565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146111d65760405162461bcd60e51b81526004016108779061328d565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036112165760405162461bcd60e51b815260040161087790613374565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610f61565b6000546001600160a01b031633146112985760405162461bcd60e51b81526004016108779061328d565b670de0b6b3a76400006103e86112ad60035490565b6112b8906014613312565b6112c29190613347565b6112cc9190613347565b8110156113275760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610877565b600854810361138c5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610877565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b031633146113e95760405162461bcd60e51b81526004016108779061328d565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610f61565b60075460408051632d55396f60e01b815290516000926001600160a01b031691632d55396f9160048083019260209291908290030181865afa158015610c5e573d6000803e3d6000fd5b60075460405163768d151960e11b81526001600160a01b038381166004830152600092169063ed1a2a3290602401610dd3565b6000546001600160a01b031633146114e85760405162461bcd60e51b81526004016108779061328d565b6001600160a01b03811661154d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610877565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806115b583856133be565b9050838110156116075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610877565b9392505050565b6001600160a01b0383166116705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610877565b6001600160a01b0382166116d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610877565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166117595760405162461bcd60e51b8152600401610877906133d6565b6001600160a01b03821661177f5760405162461bcd60e51b81526004016108779061341b565b80600003611798576117938383600061252c565b505050565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff9283169291821691161580156117fa57506001600160a01b03841660009081526012602052604090205460ff16155b156119a157600754600160a01b900460ff166118585760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610877565b6001600160a01b03841660009081526014602052604090205460ff1615801561189a57506001600160a01b03851660009081526014602052604090205460ff16155b15611900576009548311156119005760405162461bcd60e51b815260206004820152602660248201527f42757920616d6f756e74206578636565647320746865206d617854784275794160448201526536b7bab73a1760d11b6064820152608401610877565b6001600160a01b03841660009081526015602052604090205460ff166119a1576008548361192d86610e14565b61193791906133be565b11156119a15760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610877565b6119ab8282612638565b6000600b546119b930610e14565b6007549111159150600160a01b900460ff1680156119d45750805b80156119e35750600a5460ff16155b80156119fa5750601754600160281b900460ff1615155b8015611a1e57506001600160a01b03851660009081526016602052604090205460ff165b8015611a4357506001600160a01b03861660009081526013602052604090205460ff16155b8015611a6857506001600160a01b03851660009081526013602052604090205460ff16155b15611a8d57600a805460ff19166001179055611a826128b0565b600a805460ff191690555b600a5460009060ff16158015611aac5750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff1680611aee57506001600160a01b03861660009081526013602052604090205460ff165b15611af7575060005b808015611b0f5750601754600160281b900460ff1615155b15611bd857601754600090606490611b3190600160281b900460ff1688613312565b611b3b9190613347565b601754909150600090606490611b5b906301000000900460ff1689613312565b611b659190613347565b9050611b71828861345e565b9650611b7e89308461252c565b8015611bd557611b8e30826122f2565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b611be387878761252c565b6007546001600160a01b031663e30443bc88611bfe81610e14565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611c4457600080fd5b505af1925050508015611c55575060015b506007546001600160a01b031663e30443bc87611c7181610e14565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611cb757600080fd5b505af1925050508015611cc8575060015b5050505050505050565b60008184841115611cf65760405162461bcd60e51b8152600401610877919061313d565b506000611d03848661345e565b95945050505050565b600286015460ff868116911614611d8d57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff918216929189169160008051602061362e83398151915291611d739160481b90613475565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff858116620100009092041614611e2157604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff620100009092048216929188169160008051602061362e83398151915291611e009160481b90613475565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b9092041614611eb8576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b9092048216929187169160008051602061362e83398151915291611e949160481b90613475565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614611f4e576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b9092048216929186169160008051602061362e83398151915291611f289160481b90613475565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614611fe9576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b9092048216929185169160008051602061362e83398151915291611fc19160481b90613475565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461208257604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6101009092048216929189169160008051602061362e833981519152916120639160481b90613475565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff8581166301000000909204161461211b57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff63010000009092048216929188169160008051602061362e833981519152916120f89160481b90613475565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b90920416146121b4576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b9092048216929187169160008051602061362e8339815191529161218f9160481b90613475565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b909204161461224c576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b9092048216929186169160008051602061362e833981519152916122259160481b90613475565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614611fe9576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b9092048216929185169160008051602061362e833981519152916122c09160481b90613475565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b0382166123525760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610877565b61238f816040518060600160405280602281526020016135e6602291396001600160a01b0385166000908152600160205260409020549190611cd2565b6001600160a01b0383166000908152600160205260409020556003546123b59082612c69565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6124078282612cab565b156124f55760075460405163768d151960e11b81523360048201526000916001600160a01b03169063ed1a2a3290602401602060405180830381865afa158015612455573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612479919061335b565b1115610da05760075460405163fa96449160e01b8152336004820152600060248201526001600160a01b039091169063fa964491906044015b6020604051808303816000875af11580156124d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611793919061348c565b60075460405163fa96449160e01b8152336004820152600060248201526001600160a01b039091169063fa964491906044016124b2565b6001600160a01b0383166125525760405162461bcd60e51b8152600401610877906133d6565b6001600160a01b0382166125785760405162461bcd60e51b81526004016108779061341b565b6125b581604051806060016040528060268152602001613608602691396001600160a01b0386166000908152600160205260409020549190611cd2565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546125e490826115a8565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117269085815260200190565b6017805464ffffffffff1916905581156126c0576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b801561273b576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b80158015612747575081155b156127c1576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60175460ff600160201b8204811691630100000081048216916201000082048116916127f5916101008204811691166134a9565b6127ff91906134a9565b61280991906134a9565b61281391906134a9565b6017805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610d97565b60006128bb30610e14565b600b5490915047906128ce906007613312565b8211156128e657600b546128e3906007613312565b91505b601754600090819060029060ff600160281b8204811691612908911687613312565b6129129190613347565b61291c9190613347565b60175490915060009060ff600160281b820481169161294491600160201b9091041687613312565b61294e9190613347565b9050600061295c82846133be565b612966908761345e565b905061297181612f0c565b600061297d864761345e565b60175490915060009060ff600160201b8204811691630100000081048216916129a991600291166134ce565b6129b391906134a9565b6129bd91906134a9565b6017546129d49190600160281b900460ff166134f0565b60175460ff918216925060009160029184916129f1911686613312565b6129fb9190613347565b612a059190613347565b6017549091506000908390612a2290610100900460ff1686613312565b612a2c9190613347565b90506000612a3a82846133be565b612a44908661345e565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114612a92576040519150601f19603f3d011682016040523d82523d6000602084013e612a97565b606091505b5050600d54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114612ae7576040519150601f19603f3d011682016040523d82523d6000602084013e612aec565b606091505b50909950508715612b4357612b01888461305e565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af1158015612b97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbb919061348c565b90508015612c5b57600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96988604051612c5291815260200190565b60405180910390a15b505050505050505050505050565b600061160783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cd2565b60075460405163ce6b7de760e01b815233600482015260009182916001600160a01b039091169063ce6b7de790602401602060405180830381865afa158015612cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1c919061348c565b612e4a57601754600160281b900460ff1615612da457601754600090606490612d4f90600160281b900460ff1686613312565b612d599190613347565b601754909150600090606490612d79906301000000900460ff1687613312565b612d839190613347565b9050612d8f828661345e565b94508015612da157612da133826122f2565b50505b6000612daf30610e14565b60175490915060009060029060ff600160281b8204811691612dd2911685613312565b612ddc9190613347565b612de69190613347565b60175490915060009060ff600160281b8204811691612e0e91600160201b9091041685613312565b612e189190613347565b90506000612e2682846133be565b612e30908561345e565b90508015612e3d57600194505b8495505050505050610986565b6000612e5530610e14565b1115612e6957612e6584846122f2565b5060005b6000612e7430610e14565b60175490915060009060029060ff600160281b8204811691612e97911685613312565b612ea19190613347565b612eab9190613347565b60175490915060009060ff600160281b8204811691612ed391600160201b9091041685613312565b612edd9190613347565b90506000612eeb82846133be565b612ef5908561345e565b90508015612e3d5750600094506109869350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f4157612f41613513565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbe9190613529565b81600181518110612fd157612fd1613513565b6001600160a01b039283166020918202929092010152600654612ff7913091168461160e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613030908590600090869030904290600401613546565b600060405180830381600087803b15801561304a57600080fd5b505af1158015611fe9573d6000803e3d6000fd5b6006546130769030906001600160a01b03168461160e565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156130e6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108dc91906135b7565b6001600160a01b0381168114610bb657600080fd5b60006020828403121561313257600080fd5b81356116078161310b565b600060208083528351808285015260005b8181101561316a5785810183015185820160400152820161314e565b8181111561317c576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156131a557600080fd5b82356131b08161310b565b946020939093013593505050565b6000602082840312156131d057600080fd5b5035919050565b6000806000606084860312156131ec57600080fd5b83356131f78161310b565b925060208401356132078161310b565b929592945050506040919091013590565b8015158114610bb657600080fd5b6000806040838503121561323957600080fd5b82356132448161310b565b9150602083013561325481613218565b809150509250929050565b6000806040838503121561327257600080fd5b823561327d8161310b565b915060208301356132548161310b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806132d657607f821691505b6020821081036132f657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561332c5761332c6132fc565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261335657613356613331565b500490565b60006020828403121561336d57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b600082198211156133d1576133d16132fc565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613470576134706132fc565b500390565b68ffffffffffffffffff1991909116815260200190565b60006020828403121561349e57600080fd5b815161160781613218565b600060ff821660ff84168060ff038211156134c6576134c66132fc565b019392505050565b600060ff8316806134e1576134e1613331565b8060ff84160491505092915050565b600060ff821660ff84168082101561350a5761350a6132fc565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561353b57600080fd5b81516116078161310b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135965784516001600160a01b031683529383019391830191600101613571565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135cc57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63658064f5f97efb340ee293bdb7ee00e13744f0ad6f666a0e4d9acc503c7a4546a845524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bb071ab2b8521891d8a9c92f69336ba31ac4edfd577294be12f9f9778ba4dba264736f6c634300080f003360806040523480156200001157600080fd5b50604080518082018252600f8082526e4d616e61436f696e5f41737365747360881b602080840182905284518086019095529184529083015290818160036200005b838262000189565b5060046200006a828262000189565b50505060006200007f620000e060201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000255565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200010f57607f821691505b6020821081036200013057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018457600081815260208120601f850160051c810160208610156200015f5750805b601f850160051c820191505b8181101562000180578281556001016200016b565b5050505b505050565b81516001600160401b03811115620001a557620001a5620000e4565b620001bd81620001b68454620000fa565b8462000136565b602080601f831160018114620001f55760008415620001dc5750858301515b600019600386901b1c1916600185901b17855562000180565b600085815260208120601f198616915b82811015620002265788860151825594840194600190910190840162000205565b5085821015620002455787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611bdb80620002656000396000f3fe6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063ce6b7de7116100a0578063e30443bc1161006f578063e30443bc146105fc578063e3cd788a1461061c578063ed1a2a321461063c578063f2fde38b1461065c578063fa9644911461067c57600080fd5b8063ce6b7de714610551578063dd62ed3e14610581578063dda31847146105c7578063e15c4712146105e757600080fd5b8063aafd847a116100dc578063aafd847a146104c5578063ac7218dc146104fb578063b08c06141461051b578063bea9849e1461053157600080fd5b80638da5cb5b1461045257806395d89b4114610470578063a457c2d714610485578063a9059cbb146104a557600080fd5b806323b872dd116101905780635cec0ec61161015f5780635cec0ec6146103b157806364c9752f146103c75780636bf5ecd5146103e757806370a0823114610407578063715018a61461043d57600080fd5b806323b872dd1461033f5780632d55396f1461035f578063313ce56714610375578063395093511461039157600080fd5b8063163c7cef116101cc578063163c7cef146102a55780631694505e146102c557806318160ddd146102fd578063226cfa3d1461031257600080fd5b8063040a128e1461020957806306fdde031461022b578063095ea7b31461025657806309bbedde1461028657600080fd5b3661020457005b600080fd5b34801561021557600080fd5b50610229610224366004611837565b61069c565b005b34801561023757600080fd5b506102406107cc565b60405161024d9190611854565b60405180910390f35b34801561026257600080fd5b506102766102713660046118a9565b61085e565b604051901515815260200161024d565b34801561029257600080fd5b50600c545b60405190815260200161024d565b3480156102b157600080fd5b506102296102c03660046118d5565b610875565b3480156102d157600080fd5b506009546102e5906001600160a01b031681565b6040516001600160a01b03909116815260200161024d565b34801561030957600080fd5b50600254610297565b34801561031e57600080fd5b5061029761032d366004611837565b60116020526000908152604090205481565b34801561034b57600080fd5b5061027661035a3660046118ee565b610935565b34801561036b57600080fd5b5061029760075481565b34801561038157600080fd5b506040516012815260200161024d565b34801561039d57600080fd5b506102766103ac3660046118a9565b61099e565b3480156103bd57600080fd5b5061029760135481565b3480156103d357600080fd5b506008546102e5906001600160a01b031681565b3480156103f357600080fd5b506102296104023660046118d5565b6109d4565b34801561041357600080fd5b50610297610422366004611837565b6001600160a01b031660009081526020819052604090205490565b34801561044957600080fd5b50610229610ab0565b34801561045e57600080fd5b506005546001600160a01b03166102e5565b34801561047c57600080fd5b50610240610b24565b34801561049157600080fd5b506102766104a03660046118a9565b610b33565b3480156104b157600080fd5b506102766104c03660046118a9565b610b82565b3480156104d157600080fd5b506102976104e0366004611837565b6001600160a01b03166000908152600b602052604090205490565b34801561050757600080fd5b50610297610516366004611837565b610b8f565b34801561052757600080fd5b5061029760125481565b34801561053d57600080fd5b5061022961054c366004611837565b610beb565b34801561055d57600080fd5b5061027661056c366004611837565b60106020526000908152604090205460ff1681565b34801561058d57600080fd5b5061029761059c36600461192f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105d357600080fd5b506102976105e2366004611837565b610c21565b3480156105f357600080fd5b50610229610c2c565b34801561060857600080fd5b506102296106173660046118a9565b610c5f565b34801561062857600080fd5b50610229610637366004611837565b610dc7565b34801561064857600080fd5b50610297610657366004611837565b610dfa565b34801561066857600080fd5b50610229610677366004611837565b610e26565b34801561068857600080fd5b50610276610697366004611976565b610f11565b6005546001600160a01b031633146106cf5760405162461bcd60e51b81526004016106c6906119a4565b60405180910390fd5b6001600160a01b03811660009081526010602052604090205460ff16156106f557600080fd5b6001600160a01b0381166000908152601060205260408120805460ff19166001179055610723908290610fbf565b60405163131836e760e21b8152600c60048201526001600160a01b03821660248201527368be30ff04970d02907711ae6f805d1b6ff8a72990634c60db9c9060440160006040518083038186803b15801561077d57600080fd5b505af4158015610791573d6000803e3d6000fd5b50506040516001600160a01b03841692507f9aa2b4c0b1ae568bd45d1293c8ceaf63d8564367ac9449821a859268b5d667789150600090a250565b6060600380546107db906119d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610807906119d9565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b5050505050905090565b600061086b33848461101e565b5060015b92915050565b6005546001600160a01b0316331461089f5760405162461bcd60e51b81526004016106c6906119a4565b80601354036109305760405162461bcd60e51b815260206004820152605160248201527f4d616e61436f696e5f4173736574733a206d696e696d756d546f6b656e42616c60448201527f616e6365466f7252657653686172657320616c7265616479207468652076616c6064820152703ab29037b31013b732bbab30b63ab2939760791b608482015260a4016106c6565b601355565b6000610942848484611142565b610994843361098f85604051806060016040528060288152602001611b59602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611198565b61101e565b5060019392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161086b91859061098f90866111d2565b6005546001600160a01b031633146109fe5760405162461bcd60e51b81526004016106c6906119a4565b6000610a0960025490565b11610a1357600080fd5b6000610a1f4783611a29565b90506000610a2d8284611a48565b90508015610aab57610a62610a4160025490565b610a4f83600160801b611238565b610a599190611a5f565b600654906111d2565b60065560405181815233907fa8526fdaaeab3a397363950aecb80aa7c58654dff989fb61cfb65a90a1a7fe869060200160405180910390a2600754610aa790826111d2565b6007555b505050565b6005546001600160a01b03163314610ada5760405162461bcd60e51b81526004016106c6906119a4565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546107db906119d9565b600061086b338461098f85604051806060016040528060258152602001611b81602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611198565b600061086b338484611142565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b92610be192610bdc92610bd691610bd19190611238565b6112ba565b906112ca565b611308565b61086f9190611a5f565b6005546001600160a01b03163314610c155760405162461bcd60e51b81526004016106c6906119a4565b610c1e8161131b565b50565b600061086f82610dfa565b6005546001600160a01b03163314610c565760405162461bcd60e51b81526004016106c6906119a4565b610c1e33611367565b6005546001600160a01b03163314610c895760405162461bcd60e51b81526004016106c6906119a4565b6001600160a01b03821660009081526010602052604090205460ff16610dc3576013548110610d3a57610cbc8282610fbf565b604051632f0ad01760e21b8152600c60048201526001600160a01b0383166024820152604481018290527368be30ff04970d02907711ae6f805d1b6ff8a7299063bc2b405c9060640160006040518083038186803b158015610d1d57600080fd5b505af4158015610d31573d6000803e3d6000fd5b50505050610db8565b610d45826000610fbf565b60405163131836e760e21b8152600c60048201526001600160a01b03831660248201527368be30ff04970d02907711ae6f805d1b6ff8a72990634c60db9c9060440160006040518083038186803b158015610d9f57600080fd5b505af4158015610db3573d6000803e3d6000fd5b505050505b610aab826001610f11565b5050565b6005546001600160a01b03163314610df15760405162461bcd60e51b81526004016106c6906119a4565b610c1e816114cc565b6001600160a01b0381166000908152600b602052604081205461086f90610e2084610b8f565b90611518565b6005546001600160a01b03163314610e505760405162461bcd60e51b81526004016106c6906119a4565b6001600160a01b038116610eb55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314610f3e5760405162461bcd60e51b81526004016106c6906119a4565b6000610f4984611367565b90508015610fb5576001600160a01b038416600081815260116020526040908190204290555184151591907f6175d5600a7d8c683e1196499b932b06791dc6c413d74b074703a494b009a13f90610fa39085815260200190565b60405180910390a3600191505061086f565b5060009392505050565b6001600160a01b03821660009081526020819052604090205480821115610ffe576000610fec8383611518565b9050610ff8848261155a565b50505050565b80821015610aab5760006110128284611518565b9050610ff884826115be565b6001600160a01b0383166110805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106c6565b6001600160a01b0382166110e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106c6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602560248201527f4d616e61436f696e5f4173736574733a204e6f207472616e736665727320616c6044820152641b1bddd95960da1b60648201526084016106c6565b600081848411156111bc5760405162461bcd60e51b81526004016106c69190611854565b5060006111c98486611a48565b95945050505050565b6000806111df8385611a81565b9050838110156112315760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106c6565b9392505050565b60008260000361124a5750600061086f565b60006112568385611a29565b9050826112638583611a5f565b146112315760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106c6565b6000818181121561086f57600080fd5b6000806112d78385611a99565b9050600083121580156112ea5750838112155b806112ff57506000831280156112ff57508381125b61123157600080fd5b60008082121561131757600080fd5b5090565b6005546001600160a01b031633146113455760405162461bcd60e51b81526004016106c6906119a4565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60008061137383610dfa565b905080156114c3576001600160a01b0383166000908152600b602052604090205461139e90826111d2565b6001600160a01b0384166000818152600b6020526040908190209290925590517f6b28caaa521d9893436148ee0a05611a92a92ebdab31cda55653246f0c72903c906113ed9084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af1158015611449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146d9190611ada565b9050806114bc576001600160a01b0384166000908152600b60205260409020546114979083611518565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b031633146114f65760405162461bcd60e51b81526004016106c6906119a4565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061123183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611198565b6115648282611602565b61159e61157f610bd18360065461123890919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906116e1565b6001600160a01b039092166000908152600a602052604090209190915550565b6115c8828261171e565b61159e6115e3610bd18360065461123890919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906112ca565b6001600160a01b0382166116585760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106c6565b60025461166590826111d2565b6002556001600160a01b03821660009081526020819052604090205461168b90826111d2565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806116ee8385611af7565b9050600083121580156117015750838113155b806112ff57506000831280156112ff575083811361123157600080fd5b6001600160a01b03821661177e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106c6565b6117bb81604051806060016040528060228152602001611b37602291396001600160a01b0385166000908152602081905260409020549190611198565b6001600160a01b0383166000908152602081905260409020556002546117e19082611518565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016116d5565b6001600160a01b0381168114610c1e57600080fd5b60006020828403121561184957600080fd5b813561123181611822565b600060208083528351808285015260005b8181101561188157858101830151858201604001528201611865565b81811115611893576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156118bc57600080fd5b82356118c781611822565b946020939093013593505050565b6000602082840312156118e757600080fd5b5035919050565b60008060006060848603121561190357600080fd5b833561190e81611822565b9250602084013561191e81611822565b929592945050506040919091013590565b6000806040838503121561194257600080fd5b823561194d81611822565b9150602083013561195d81611822565b809150509250929050565b8015158114610c1e57600080fd5b6000806040838503121561198957600080fd5b823561199481611822565b9150602083013561195d81611968565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806119ed57607f821691505b602082108103611a0d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611a4357611a43611a13565b500290565b600082821015611a5a57611a5a611a13565b500390565b600082611a7c57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611a9457611a94611a13565b500190565b600080821280156001600160ff1b0384900385131615611abb57611abb611a13565b600160ff1b8390038412811615611ad457611ad4611a13565b50500190565b600060208284031215611aec57600080fd5b815161123181611968565b60008083128015600160ff1b850184121615611b1557611b15611a13565b6001600160ff1b0384018313811615611b3057611b30611a13565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e9c7662758cefc5564f4cbe770613669d63699215463083af5f4c184499c801864736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063880bcbc111610144578063b62496f5116100b6578063dd62ed3e1161007a578063dd62ed3e1461074c578063de0cbce114610792578063e7c52d44146107b2578063ed1a2a32146107c7578063f2fde38b146107e7578063fe0175351461080757600080fd5b8063b62496f514610655578063c024666814610685578063c6a2ba75146106a5578063cd43e228146106c5578063d2d7ad831461073657600080fd5b8063a457c2d711610108578063a457c2d71461059f578063a9059cbb146105bf578063aa05341e146105df578063aa4bde28146105ff578063b01352ad14610615578063b11a6c401461063557600080fd5b8063880bcbc1146105215780638c0b5e22146105415780638da5cb5b1461055757806395d89b41146105755780639dccf6f11461058a57600080fd5b8063313ce567116101dd57806364b0f653116101a157806364b0f6531461047757806367c2c9981461048c5780636843cd84146104ac57806370a08231146104cc578063715018a6146104ec578063781edb3c1461050157600080fd5b8063313ce567146103c757806339509351146103e357806342966c681461040357806349bd5a5e146104235780635aa143631461045757600080fd5b806318160ddd1161022457806318160ddd1461033e5780631e293c101461035d57806323b872dd1461037d578063293230b81461039d5780632e509103146103b257600080fd5b8063040a128e1461026c578063064a59d01461028e57806306fdde03146102c4578063095ea7b3146102e65780631694505e1461030657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004613120565b61084d565b005b34801561029a57600080fd5b506007546102af90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102d057600080fd5b506102d96108e3565b6040516102bb919061313d565b3480156102f257600080fd5b506102af610301366004613192565b610975565b34801561031257600080fd5b50600654610326906001600160a01b031681565b6040516001600160a01b0390911681526020016102bb565b34801561034a57600080fd5b506003545b6040519081526020016102bb565b34801561036957600080fd5b5061028c6103783660046131be565b61098c565b34801561038957600080fd5b506102af6103983660046131d7565b610a7c565b3480156103a957600080fd5b5061028c610ae5565b3480156103be57600080fd5b5061028c610b24565b3480156103d357600080fd5b50604051601281526020016102bb565b3480156103ef57600080fd5b506102af6103fe366004613192565b610b76565b34801561040f57600080fd5b5061028c61041e3660046131be565b610bac565b34801561042f57600080fd5b506103267f0000000000000000000000005cdb4623d126b5e557b8348aafa9e97d3f94fba381565b34801561046357600080fd5b5061028c6104723660046131be565b610bb9565b34801561048357600080fd5b5061034f610c14565b34801561049857600080fd5b5061028c6104a73660046131be565b610c87565b3480156104b857600080fd5b5061034f6104c7366004613120565b610da4565b3480156104d857600080fd5b5061034f6104e7366004613120565b610e14565b3480156104f857600080fd5b5061028c610e2f565b34801561050d57600080fd5b5061028c61051c366004613226565b610ea3565b34801561052d57600080fd5b5061028c61053c366004613226565b610f6d565b34801561054d57600080fd5b5061034f60095481565b34801561056357600080fd5b506000546001600160a01b0316610326565b34801561058157600080fd5b506102d961102f565b34801561059657600080fd5b5061028c61103e565b3480156105ab57600080fd5b506102af6105ba366004613192565b61107e565b3480156105cb57600080fd5b506102af6105da366004613192565b6110cd565b3480156105eb57600080fd5b5061028c6105fa366004613192565b6110da565b34801561060b57600080fd5b5061034f60085481565b34801561062157600080fd5b5061028c6106303660046131be565b6110e4565b34801561064157600080fd5b50600754610326906001600160a01b031681565b34801561066157600080fd5b506102af610670366004613120565b60166020526000908152604090205460ff1681565b34801561069157600080fd5b5061028c6106a0366004613226565b6111ac565b3480156106b157600080fd5b5061028c6106c03660046131be565b61126e565b3480156106d157600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102bb565b34801561074257600080fd5b5061034f600b5481565b34801561075857600080fd5b5061034f61076736600461325f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561079e57600080fd5b5061028c6107ad366004613226565b6113bf565b3480156107be57600080fd5b5061034f611441565b3480156107d357600080fd5b5061034f6107e2366004613120565b61148b565b3480156107f357600080fd5b5061028c610802366004613120565b6114be565b34801561081357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610702565b6000546001600160a01b031633146108805760405162461bcd60e51b81526004016108779061328d565b60405180910390fd5b600754604051630205094760e11b81526001600160a01b0383811660048301529091169063040a128e906024015b600060405180830381600087803b1580156108c857600080fd5b505af11580156108dc573d6000803e3d6000fd5b5050505050565b6060600480546108f2906132c2565b80601f016020809104026020016040519081016040528092919081815260200182805461091e906132c2565b801561096b5780601f106109405761010080835404028352916020019161096b565b820191906000526020600020905b81548152906001019060200180831161094e57829003601f168201915b5050505050905090565b600061098233848461160e565b5060015b92915050565b6000546001600160a01b031633146109b65760405162461bcd60e51b81526004016108779061328d565b670de0b6b3a76400006103e86109cb60035490565b6109d6906002613312565b6109e09190613347565b6109ea9190613347565b811015610a495760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610877565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610a89848484611733565b610adb8433610ad68560405180606001604052806028815260200161364e602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611cd2565b61160e565b5060019392505050565b6000546001600160a01b03163314610b0f5760405162461bcd60e51b81526004016108779061328d565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b4e5760405162461bcd60e51b81526004016108779061328d565b610b61600f600060016000806002611d0c565b610b74600f600060016000806002611ff1565b565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610982918590610ad690866115a8565b610bb633826122f2565b50565b6000546001600160a01b03163314610be35760405162461bcd60e51b81526004016108779061328d565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef906024016108ae565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c82919061335b565b905090565b6000546001600160a01b03163314610cb15760405162461bcd60e51b81526004016108779061328d565b478110610d0f5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610877565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610d5c576040519150601f19603f3d011682016040523d82523d6000602084013e610d61565b606091505b505090508015610da0576040518281527f848b39dfef0f44053e441e7fad749cf07535df460e6b67ff62a4e73666d5d9fd906020015b60405180910390a15b5050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610986919061335b565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610e595760405162461bcd60e51b81526004016108779061328d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610ecd5760405162461bcd60e51b81526004016108779061328d565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503610f0d5760405162461bcd60e51b815260040161087790613374565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610f975760405162461bcd60e51b81526004016108779061328d565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610fd75760405162461bcd60e51b815260040161087790613374565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610f61565b6060600580546108f2906132c2565b6000546001600160a01b031633146110685760405162461bcd60e51b81526004016108779061328d565b6a52b7d2dcc80cd2e40000006008819055600955565b60006109823384610ad685604051806060016040528060258152602001613676602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611cd2565b6000610982338484611733565b610da082826123fd565b6000546001600160a01b0316331461110e5760405162461bcd60e51b81526004016108779061328d565b600b5481036111795760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f7420757064617465206d696e20746f6b656e73204265666f72655360448201527077617020746f2073616d652076616c756560781b6064820152608401610877565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146111d65760405162461bcd60e51b81526004016108779061328d565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036112165760405162461bcd60e51b815260040161087790613374565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610f61565b6000546001600160a01b031633146112985760405162461bcd60e51b81526004016108779061328d565b670de0b6b3a76400006103e86112ad60035490565b6112b8906014613312565b6112c29190613347565b6112cc9190613347565b8110156113275760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610877565b600854810361138c5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610877565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b031633146113e95760405162461bcd60e51b81526004016108779061328d565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610f61565b60075460408051632d55396f60e01b815290516000926001600160a01b031691632d55396f9160048083019260209291908290030181865afa158015610c5e573d6000803e3d6000fd5b60075460405163768d151960e11b81526001600160a01b038381166004830152600092169063ed1a2a3290602401610dd3565b6000546001600160a01b031633146114e85760405162461bcd60e51b81526004016108779061328d565b6001600160a01b03811661154d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610877565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806115b583856133be565b9050838110156116075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610877565b9392505050565b6001600160a01b0383166116705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610877565b6001600160a01b0382166116d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610877565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166117595760405162461bcd60e51b8152600401610877906133d6565b6001600160a01b03821661177f5760405162461bcd60e51b81526004016108779061341b565b80600003611798576117938383600061252c565b505050565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff9283169291821691161580156117fa57506001600160a01b03841660009081526012602052604090205460ff16155b156119a157600754600160a01b900460ff166118585760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610877565b6001600160a01b03841660009081526014602052604090205460ff1615801561189a57506001600160a01b03851660009081526014602052604090205460ff16155b15611900576009548311156119005760405162461bcd60e51b815260206004820152602660248201527f42757920616d6f756e74206578636565647320746865206d617854784275794160448201526536b7bab73a1760d11b6064820152608401610877565b6001600160a01b03841660009081526015602052604090205460ff166119a1576008548361192d86610e14565b61193791906133be565b11156119a15760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610877565b6119ab8282612638565b6000600b546119b930610e14565b6007549111159150600160a01b900460ff1680156119d45750805b80156119e35750600a5460ff16155b80156119fa5750601754600160281b900460ff1615155b8015611a1e57506001600160a01b03851660009081526016602052604090205460ff165b8015611a4357506001600160a01b03861660009081526013602052604090205460ff16155b8015611a6857506001600160a01b03851660009081526013602052604090205460ff16155b15611a8d57600a805460ff19166001179055611a826128b0565b600a805460ff191690555b600a5460009060ff16158015611aac5750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff1680611aee57506001600160a01b03861660009081526013602052604090205460ff165b15611af7575060005b808015611b0f5750601754600160281b900460ff1615155b15611bd857601754600090606490611b3190600160281b900460ff1688613312565b611b3b9190613347565b601754909150600090606490611b5b906301000000900460ff1689613312565b611b659190613347565b9050611b71828861345e565b9650611b7e89308461252c565b8015611bd557611b8e30826122f2565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b611be387878761252c565b6007546001600160a01b031663e30443bc88611bfe81610e14565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611c4457600080fd5b505af1925050508015611c55575060015b506007546001600160a01b031663e30443bc87611c7181610e14565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611cb757600080fd5b505af1925050508015611cc8575060015b5050505050505050565b60008184841115611cf65760405162461bcd60e51b8152600401610877919061313d565b506000611d03848661345e565b95945050505050565b600286015460ff868116911614611d8d57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff918216929189169160008051602061362e83398151915291611d739160481b90613475565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff858116620100009092041614611e2157604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff620100009092048216929188169160008051602061362e83398151915291611e009160481b90613475565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b9092041614611eb8576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b9092048216929187169160008051602061362e83398151915291611e949160481b90613475565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614611f4e576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b9092048216929186169160008051602061362e83398151915291611f289160481b90613475565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614611fe9576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b9092048216929185169160008051602061362e83398151915291611fc19160481b90613475565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461208257604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6101009092048216929189169160008051602061362e833981519152916120639160481b90613475565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff8581166301000000909204161461211b57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff63010000009092048216929188169160008051602061362e833981519152916120f89160481b90613475565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b90920416146121b4576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b9092048216929187169160008051602061362e8339815191529161218f9160481b90613475565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b909204161461224c576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b9092048216929186169160008051602061362e833981519152916122259160481b90613475565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614611fe9576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b9092048216929185169160008051602061362e833981519152916122c09160481b90613475565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b0382166123525760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610877565b61238f816040518060600160405280602281526020016135e6602291396001600160a01b0385166000908152600160205260409020549190611cd2565b6001600160a01b0383166000908152600160205260409020556003546123b59082612c69565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6124078282612cab565b156124f55760075460405163768d151960e11b81523360048201526000916001600160a01b03169063ed1a2a3290602401602060405180830381865afa158015612455573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612479919061335b565b1115610da05760075460405163fa96449160e01b8152336004820152600060248201526001600160a01b039091169063fa964491906044015b6020604051808303816000875af11580156124d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611793919061348c565b60075460405163fa96449160e01b8152336004820152600060248201526001600160a01b039091169063fa964491906044016124b2565b6001600160a01b0383166125525760405162461bcd60e51b8152600401610877906133d6565b6001600160a01b0382166125785760405162461bcd60e51b81526004016108779061341b565b6125b581604051806060016040528060268152602001613608602691396001600160a01b0386166000908152600160205260409020549190611cd2565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546125e490826115a8565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117269085815260200190565b6017805464ffffffffff1916905581156126c0576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b801561273b576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b80158015612747575081155b156127c1576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60175460ff600160201b8204811691630100000081048216916201000082048116916127f5916101008204811691166134a9565b6127ff91906134a9565b61280991906134a9565b61281391906134a9565b6017805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610d97565b60006128bb30610e14565b600b5490915047906128ce906007613312565b8211156128e657600b546128e3906007613312565b91505b601754600090819060029060ff600160281b8204811691612908911687613312565b6129129190613347565b61291c9190613347565b60175490915060009060ff600160281b820481169161294491600160201b9091041687613312565b61294e9190613347565b9050600061295c82846133be565b612966908761345e565b905061297181612f0c565b600061297d864761345e565b60175490915060009060ff600160201b8204811691630100000081048216916129a991600291166134ce565b6129b391906134a9565b6129bd91906134a9565b6017546129d49190600160281b900460ff166134f0565b60175460ff918216925060009160029184916129f1911686613312565b6129fb9190613347565b612a059190613347565b6017549091506000908390612a2290610100900460ff1686613312565b612a2c9190613347565b90506000612a3a82846133be565b612a44908661345e565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114612a92576040519150601f19603f3d011682016040523d82523d6000602084013e612a97565b606091505b5050600d54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114612ae7576040519150601f19603f3d011682016040523d82523d6000602084013e612aec565b606091505b50909950508715612b4357612b01888461305e565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af1158015612b97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbb919061348c565b90508015612c5b57600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96988604051612c5291815260200190565b60405180910390a15b505050505050505050505050565b600061160783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cd2565b60075460405163ce6b7de760e01b815233600482015260009182916001600160a01b039091169063ce6b7de790602401602060405180830381865afa158015612cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1c919061348c565b612e4a57601754600160281b900460ff1615612da457601754600090606490612d4f90600160281b900460ff1686613312565b612d599190613347565b601754909150600090606490612d79906301000000900460ff1687613312565b612d839190613347565b9050612d8f828661345e565b94508015612da157612da133826122f2565b50505b6000612daf30610e14565b60175490915060009060029060ff600160281b8204811691612dd2911685613312565b612ddc9190613347565b612de69190613347565b60175490915060009060ff600160281b8204811691612e0e91600160201b9091041685613312565b612e189190613347565b90506000612e2682846133be565b612e30908561345e565b90508015612e3d57600194505b8495505050505050610986565b6000612e5530610e14565b1115612e6957612e6584846122f2565b5060005b6000612e7430610e14565b60175490915060009060029060ff600160281b8204811691612e97911685613312565b612ea19190613347565b612eab9190613347565b60175490915060009060ff600160281b8204811691612ed391600160201b9091041685613312565b612edd9190613347565b90506000612eeb82846133be565b612ef5908561345e565b90508015612e3d5750600094506109869350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f4157612f41613513565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbe9190613529565b81600181518110612fd157612fd1613513565b6001600160a01b039283166020918202929092010152600654612ff7913091168461160e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613030908590600090869030904290600401613546565b600060405180830381600087803b15801561304a57600080fd5b505af1158015611fe9573d6000803e3d6000fd5b6006546130769030906001600160a01b03168461160e565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156130e6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108dc91906135b7565b6001600160a01b0381168114610bb657600080fd5b60006020828403121561313257600080fd5b81356116078161310b565b600060208083528351808285015260005b8181101561316a5785810183015185820160400152820161314e565b8181111561317c576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156131a557600080fd5b82356131b08161310b565b946020939093013593505050565b6000602082840312156131d057600080fd5b5035919050565b6000806000606084860312156131ec57600080fd5b83356131f78161310b565b925060208401356132078161310b565b929592945050506040919091013590565b8015158114610bb657600080fd5b6000806040838503121561323957600080fd5b82356132448161310b565b9150602083013561325481613218565b809150509250929050565b6000806040838503121561327257600080fd5b823561327d8161310b565b915060208301356132548161310b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806132d657607f821691505b6020821081036132f657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561332c5761332c6132fc565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261335657613356613331565b500490565b60006020828403121561336d57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b600082198211156133d1576133d16132fc565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613470576134706132fc565b500390565b68ffffffffffffffffff1991909116815260200190565b60006020828403121561349e57600080fd5b815161160781613218565b600060ff821660ff84168060ff038211156134c6576134c66132fc565b019392505050565b600060ff8316806134e1576134e1613331565b8060ff84160491505092915050565b600060ff821660ff84168082101561350a5761350a6132fc565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561353b57600080fd5b81516116078161310b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135965784516001600160a01b031683529383019391830191600101613571565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135cc57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63658064f5f97efb340ee293bdb7ee00e13744f0ad6f666a0e4d9acc503c7a4546a845524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bb071ab2b8521891d8a9c92f69336ba31ac4edfd577294be12f9f9778ba4dba264736f6c634300080f0033

Libraries Used


Deployed Bytecode Sourcemap

19003:24517:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26392:128;;;;;;;;;;-1:-1:-1;26392:128:0;;;;;:::i;:::-;;:::i;:::-;;19328:28;;;;;;;;;;-1:-1:-1;19328:28:0;;;;-1:-1:-1;;;19328:28:0;;;;;;;;;567:14:1;;560:22;542:41;;530:2;515:18;19328:28:0;;;;;;;;9763:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10743:194::-;;;;;;;;;;-1:-1:-1;10743:194:0;;;;;:::i;:::-;;:::i;19051:30::-;;;;;;;;;;-1:-1:-1;19051:30:0;;;;-1:-1:-1;;;;;19051:30:0;;;;;;-1:-1:-1;;;;;1694:32:1;;;1676:51;;1664:2;1649:18;19051:30:0;1516:217:1;10084:108:0;;;;;;;;;;-1:-1:-1;10172:12:0;;10084:108;;;1884:25:1;;;1872:2;1857:18;10084:108:0;1738:177:1;27117:323:0;;;;;;;;;;-1:-1:-1;27117:323:0;;;;;:::i;:::-;;:::i;10945:454::-;;;;;;;;;;-1:-1:-1;10945:454:0;;;;;:::i;:::-;;:::i;25257:85::-;;;;;;;;;;;;;:::i;26946:163::-;;;;;;;;;;;;;:::i;9983:93::-;;;;;;;;;;-1:-1:-1;9983:93:0;;10066:2;2708:36:1;;2696:2;2681:18;9983:93:0;2566:184:1;11407:293:0;;;;;;;;;;-1:-1:-1;11407:293:0;;;;;:::i;:::-;;:::i;31460:81::-;;;;;;;;;;-1:-1:-1;31460:81:0;;;;;:::i;:::-;;:::i;19088:38::-;;;;;;;;;;;;;;;28674:169;;;;;;;;;;-1:-1:-1;28674:169:0;;;;;:::i;:::-;;:::i;32023:140::-;;;;;;;;;;;;;:::i;31107:345::-;;;;;;;;;;-1:-1:-1;31107:345:0;;;;;:::i;:::-;;:::i;31860:155::-;;;;;;;;;;-1:-1:-1;31860:155:0;;;;;:::i;:::-;;:::i;10200:143::-;;;;;;;;;;-1:-1:-1;10200:143:0;;;;;:::i;:::-;;:::i;8882:148::-;;;;;;;;;;;;;:::i;27908:396::-;;;;;;;;;;-1:-1:-1;27908:396:0;;;;;:::i;:::-;;:::i;26528:410::-;;;;;;;;;;-1:-1:-1;26528:410:0;;;;;:::i;:::-;;:::i;19488:54::-;;;;;;;;;;;;;;;;8668:79;;;;;;;;;;-1:-1:-1;8706:7:0;8733:6;-1:-1:-1;;;;;8733:6:0;8668:79;;9871:104;;;;;;;;;;;;;:::i;43393:124::-;;;;;;;;;;;;;:::i;11708:393::-;;;;;;;;;;-1:-1:-1;11708:393:0;;;;;:::i;:::-;;:::i;10351:200::-;;;;;;;;;;-1:-1:-1;10351:200:0;;;;;:::i;:::-;;:::i;28851:111::-;;;;;;;;;;-1:-1:-1;28851:111:0;;;;;:::i;:::-;;:::i;19423:58::-;;;;;;;;;;;;;;;;28312:354;;;;;;;;;;-1:-1:-1;28312:354:0;;;;;:::i;:::-;;:::i;19283:38::-;;;;;;;;;;-1:-1:-1;19283:38:0;;;;-1:-1:-1;;;;;19283:38:0;;;20593:57;;;;;;;;;;-1:-1:-1;20593:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26028:356;;;;;;;;;;-1:-1:-1;26028:356:0;;;;;:::i;:::-;;:::i;27448:452::-;;;;;;;;;;-1:-1:-1;27448:452:0;;;;;:::i;:::-;;:::i;32171:344::-;;;;;;;;;;-1:-1:-1;32320:25:0;;;;;;;32360;;;;;;-1:-1:-1;;;32400:23:0;;;;;-1:-1:-1;;;32438:20:0;;;;;-1:-1:-1;;;32473:23:0;;;;32171:344;;;;3984:4:1;3972:17;;;3954:36;;4026:17;;;4021:2;4006:18;;3999:45;4080:17;;;4060:18;;;4053:45;;;;4134:17;;4129:2;4114:18;;4107:45;4189:17;;;4183:3;4168:19;;4161:46;3941:3;3926:19;32171:344:0;3715:498:1;19578:64:0;;;;;;;;;;;;;;;;10559:176;;;;;;;;;;-1:-1:-1;10559:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10700:18:0;;;10673:7;10700:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10559:176;25792:228;;;;;;;;;;-1:-1:-1;25792:228:0;;;;;:::i;:::-;;:::i;31549:127::-;;;;;;;;;;;;;:::i;31684:168::-;;;;;;;;;;-1:-1:-1;31684:168:0;;;;;:::i;:::-;;:::i;9038:281::-;;;;;;;;;;-1:-1:-1;9038:281:0;;;;;:::i;:::-;;:::i;32523:350::-;;;;;;;;;;-1:-1:-1;32673:26:0;;;;;;;;;32714;;;;;;-1:-1:-1;;;32755:24:0;;;;;-1:-1:-1;;;32794:21:0;;;;;-1:-1:-1;;;32830:24:0;;;;32523:350;;26392:128;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;;;;;;;;;26469:13:::1;::::0;:43:::1;::::0;-1:-1:-1;;;26469:43:0;;-1:-1:-1;;;;;1694:32:1;;;26469:43:0::1;::::0;::::1;1676:51:1::0;26469:13:0;;::::1;::::0;:34:::1;::::0;1649:18:1;;26469:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26392:128:::0;:::o;9763:100::-;9817:13;9850:5;9843:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9763:100;:::o;10743:194::-;10851:4;10868:39;8056:10;10891:7;10900:6;10868:8;:39::i;:::-;-1:-1:-1;10925:4:0;10743:194;;;;;:::o;27117:323::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;27263:4:::1;27255;27234:13;10172:12:::0;;;10084:108;27234:13:::1;:17;::::0;27250:1:::1;27234:17;:::i;:::-;27233:26;;;;:::i;:::-;27232:35;;;;:::i;:::-;27220:8;:47;;27198:136;;;::::0;-1:-1:-1;;;27198:136:0;;6121:2:1;27198:136:0::1;::::0;::::1;6103:21:1::0;6160:2;6140:18;;;6133:30;6199:34;6179:18;;;6172:62;-1:-1:-1;;;6250:18:1;;;6243:37;6297:19;;27198:136:0::1;5919:403:1::0;27198:136:0::1;27387:11;::::0;27350:49:::1;::::0;27377:8;;27350:49:::1;::::0;;;::::1;27410:11;:22:::0;27117:323::o;10945:454::-;11085:4;11102:36;11112:6;11120:9;11131:6;11102:9;:36::i;:::-;11149:220;11172:6;8056:10;11220:138;11276:6;11220:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11220:19:0;;;;;;:11;:19;;;;;;;;8056:10;11220:33;;;;;;;;;;:37;:138::i;:::-;11149:8;:220::i;:::-;-1:-1:-1;11387:4:0;10945:454;;;;;:::o;25257:85::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;25311:16:::1;:23:::0;;-1:-1:-1;;;;25311:23:0::1;-1:-1:-1::0;;;25311:23:0::1;::::0;;25257:85::o;26946:163::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;27007:41:::1;27024:7;27033:1;27036;27039;27042::::0;27045::::1;27007:16;:41::i;:::-;27059:42;27078:7;27087:1;27090;27093;27096::::0;27099::::1;27059:17;:42::i;:::-;26946:163::o:0;11407:293::-;8056:10;11520:4;11609:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11609:34:0;;;;;;;;;;11520:4;;11537:133;;11587:7;;11609:50;;11648:10;11609:38;:50::i;31460:81::-;31509:24;31515:10;31527:5;31509;:24::i;:::-;31460:81;:::o;28674:169::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;28784:13:::1;::::0;:51:::1;::::0;-1:-1:-1;;;28784:51:0;;::::1;::::0;::::1;1884:25:1::0;;;-1:-1:-1;;;;;28784:13:0;;::::1;::::0;:41:::1;::::0;1857:18:1;;28784:51:0::1;1738:177:1::0;32023:140:0;32116:13;;:39;;;-1:-1:-1;;;32116:39:0;;;;32089:7;;-1:-1:-1;;;;;32116:13:0;;:37;;:39;;;;;;;;;;;;;;:13;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32109:46;;32023:140;:::o;31107:345::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;31209:21:::1;31200:6;:30;31178:118;;;::::0;-1:-1:-1;;;31178:118:0;;6718:2:1;31178:118:0::1;::::0;::::1;6700:21:1::0;6757:2;6737:18;;;6730:30;6796:34;6776:18;;;6769:62;-1:-1:-1;;;6847:18:1;;;6840:36;6893:19;;31178:118:0::1;6516:402:1::0;31178:118:0::1;31308:12;8733:6:::0;;31326:40:::1;::::0;-1:-1:-1;;;;;8733:6:0;;;;31355;;31308:12;31326:40;31308:12;31326:40;31355:6;8733;31326:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31307:59;;;31381:7;31377:68;;;31410:23;::::0;1884:25:1;;;31410:23:0::1;::::0;1872:2:1;1857:18;31410:23:0::1;;;;;;;;31377:68;31167:285;31107:345:::0;:::o;31860:155::-;31975:13;;:32;;-1:-1:-1;;;31975:32:0;;-1:-1:-1;;;;;1694:32:1;;;31975::0;;;1676:51:1;31948:7:0;;31975:13;;:23;;1649:18:1;;31975:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10200:143::-;-1:-1:-1;;;;;10317:18:0;10290:7;10317:18;;;:9;:18;;;;;;;10200:143::o;8882:148::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;8989:1:::1;8973:6:::0;;8952:40:::1;::::0;-1:-1:-1;;;;;8973:6:0;;::::1;::::0;8952:40:::1;::::0;8989:1;;8952:40:::1;9020:1;9003:19:::0;;-1:-1:-1;;;;;;9003:19:0::1;::::0;;8882:148::o;27908:396::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28052:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;28030:142:::1;;;;-1:-1:-1::0;;;28030:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28183:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;28183:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28248:48;;542:41:1;;;28248:48:0::1;::::0;515:18:1;28248:48:0::1;;;;;;;;27908:396:::0;;:::o;26528:410::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26677:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;26655:147:::1;;;;-1:-1:-1::0;;;26655:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26813:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;26813:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26883:47;;542:41:1;;;26883:47:0::1;::::0;515:18:1;26883:47:0::1;402:187:1::0;9871:104:0;9927:13;9960:7;9953:14;;;;;:::i;43393:124::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;19394:22:::1;43448:15;:27:::0;;;43486:11:::1;:23:::0;43393:124::o;11708:393::-;11826:4;11843:228;8056:10;11893:7;11915:145;11972:15;11915:145;;;;;;;;;;;;;;;;;8056:10;11915:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11915:34:0;;;;;;;;;;;;:38;:145::i;10351:200::-;10462:4;10479:42;8056:10;10503:9;10514:6;10479:9;:42::i;28851:111::-;28925:29;28941:4;28947:6;28925:15;:29::i;28312:354::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;28432:23:::1;;28420:8;:35:::0;28398:134:::1;;;::::0;-1:-1:-1;;;28398:134:0;;7746:2:1;28398:134:0::1;::::0;::::1;7728:21:1::0;7785:2;7765:18;;;7758:30;7824:34;7804:18;;;7797:62;-1:-1:-1;;;7875:18:1;;;7868:47;7932:19;;28398:134:0::1;7544:413:1::0;28398:134:0::1;28589:23;::::0;28548:65:::1;::::0;28579:8;;28548:65:::1;::::0;;;::::1;28624:23;:34:::0;28312:354::o;26028:356::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26162:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;26140:131:::1;;;;-1:-1:-1::0;;;26140:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26282:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;26282:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26336:40;;542:41:1;;;26336:40:0::1;::::0;515:18:1;26336:40:0::1;402:187:1::0;27448:452:0;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;27592:4:::1;27584;27562:13;10172:12:::0;;;10084:108;27562:13:::1;:18;::::0;27578:2:::1;27562:18;:::i;:::-;27561:27;;;;:::i;:::-;27560:36;;;;:::i;:::-;27548:8;:48;;27526:134;;;::::0;-1:-1:-1;;;27526:134:0;;8164:2:1;27526:134:0::1;::::0;::::1;8146:21:1::0;8203:2;8183:18;;;8176:30;8242:34;8222:18;;;8215:62;-1:-1:-1;;;8293:18:1;;;8286:34;8337:19;;27526:134:0::1;7962:400:1::0;27526:134:0::1;27705:15;;27693:8;:27:::0;27671:120:::1;;;::::0;-1:-1:-1;;;27671:120:0;;8569:2:1;27671:120:0::1;::::0;::::1;8551:21:1::0;8608:2;8588:18;;;8581:30;8647:34;8627:18;;;8620:62;-1:-1:-1;;;8698:18:1;;;8691:41;8749:19;;27671:120:0::1;8367:407:1::0;27671:120:0::1;27839:15;::::0;27807:48:::1;::::0;27829:8;;27807:48:::1;::::0;;;::::1;27866:15;:26:::0;27448:452::o;25792:228::-;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25906:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;;;;:40;;-1:-1:-1;;25906:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25962:50;;542:41:1;;;25962:50:0::1;::::0;515:18:1;25962:50:0::1;402:187:1::0;31549:127:0;31637:13;;:31;;;-1:-1:-1;;;31637:31:0;;;;31610:7;;-1:-1:-1;;;;;31637:13:0;;:29;;:31;;;;;;;;;;;;;;:13;:31;;;;;;;;;;;;;;31684:168;31799:13;;:45;;-1:-1:-1;;;31799:45:0;;-1:-1:-1;;;;;1694:32:1;;;31799:45:0;;;1676:51:1;31772:7:0;;31799:13;;:36;;1649:18:1;;31799:45:0;1516:217:1;9038:281:0;8795:6;;-1:-1:-1;;;;;8795:6:0;8056:10;8795:22;8787:67;;;;-1:-1:-1;;;8787:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9141:22:0;::::1;9119:110;;;::::0;-1:-1:-1;;;9119:110:0;;8981:2:1;9119:110:0::1;::::0;::::1;8963:21:1::0;9020:2;9000:18;;;8993:30;9059:34;9039:18;;;9032:62;-1:-1:-1;;;9110:18:1;;;9103:36;9156:19;;9119:110:0::1;8779:402:1::0;9119:110:0::1;9266:6;::::0;;9245:38:::1;::::0;-1:-1:-1;;;;;9245:38:0;;::::1;::::0;9266:6;::::1;::::0;9245:38:::1;::::0;::::1;9294:6;:17:::0;;-1:-1:-1;;;;;;9294:17:0::1;-1:-1:-1::0;;;;;9294:17:0;;;::::1;::::0;;;::::1;::::0;;9038:281::o;3215:181::-;3273:7;;3305:5;3309:1;3305;:5;:::i;:::-;3293:17;;3334:1;3329;:6;;3321:46;;;;-1:-1:-1;;;3321:46:0;;9521:2:1;3321:46:0;;;9503:21:1;9560:2;9540:18;;;9533:30;9599:29;9579:18;;;9572:57;9646:18;;3321:46:0;9319:351:1;3321:46:0;3387:1;3215:181;-1:-1:-1;;;3215:181:0:o;13564:378::-;-1:-1:-1;;;;;13700:19:0;;13692:68;;;;-1:-1:-1;;;13692:68:0;;9877:2:1;13692:68:0;;;9859:21:1;9916:2;9896:18;;;9889:30;9955:34;9935:18;;;9928:62;-1:-1:-1;;;10006:18:1;;;9999:34;10050:19;;13692:68:0;9675:400:1;13692:68:0;-1:-1:-1;;;;;13779:21:0;;13771:68;;;;-1:-1:-1;;;13771:68:0;;10282:2:1;13771:68:0;;;10264:21:1;10321:2;10301:18;;;10294:30;10360:34;10340:18;;;10333:62;-1:-1:-1;;;10411:18:1;;;10404:32;10453:19;;13771:68:0;10080:398:1;13771:68:0;-1:-1:-1;;;;;13850:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13902:32;;1884:25:1;;;13902:32:0;;1857:18:1;13902:32:0;;;;;;;;13564:378;;;:::o;32881:2583::-;-1:-1:-1;;;;;33013:18:0;;33005:68;;;;-1:-1:-1;;;33005:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33092:16:0;;33084:64;;;;-1:-1:-1;;;33084:64:0;;;;;;;:::i;:::-;33165:6;33175:1;33165:11;33161:93;;33193:28;33209:4;33215:2;33219:1;33193:15;:28::i;:::-;32881:2583;;;:::o;33161:93::-;-1:-1:-1;;;;;33279:31:0;;;33266:10;33279:31;;;:25;:31;;;;;;;;;33335:29;;;;;;;;;33396:27;;;:21;:27;;;;;;33279:31;;;;;33335:29;;;;33396:27;33395:28;:71;;;;-1:-1:-1;;;;;;33441:25:0;;;;;;:21;:25;;;;;;;;33440:26;33395:71;33377:765;;;33501:16;;-1:-1:-1;;;33501:16:0;;;;33493:59;;;;-1:-1:-1;;;33493:59:0;;11495:2:1;33493:59:0;;;11477:21:1;11534:2;11514:18;;;11507:30;11573:32;11553:18;;;11546:60;11623:18;;33493:59:0;11293:354:1;33493:59:0;-1:-1:-1;;;;;33590:38:0;;;;;;:34;:38;;;;;;;;33589:39;:101;;;;-1:-1:-1;;;;;;33650:40:0;;;;;;:34;:40;;;;;;;;33649:41;33589:101;33567:307;;;33765:11;;33755:6;:21;;33725:133;;;;-1:-1:-1;;;33725:133:0;;11854:2:1;33725:133:0;;;11836:21:1;11893:2;11873:18;;;11866:30;11932:34;11912:18;;;11905:62;-1:-1:-1;;;11983:18:1;;;11976:36;12029:19;;33725:133:0;11652:402:1;33725:133:0;-1:-1:-1;;;;;33893:33:0;;;;;;:29;:33;;;;;;;;33888:243;;34005:15;;33994:6;33978:13;33988:2;33978:9;:13::i;:::-;:22;;;;:::i;:::-;33977:43;;33947:168;;;;-1:-1:-1;;;33947:168:0;;12261:2:1;33947:168:0;;;12243:21:1;12300:2;12280:18;;;12273:30;12339:34;12319:18;;;12312:62;-1:-1:-1;;;12390:18:1;;;12383:49;12449:19;;33947:168:0;12059:415:1;33947:168:0;34154:30;34170:5;34177:6;34154:15;:30::i;:::-;34204:12;34247:23;;34219:24;34237:4;34219:9;:24::i;:::-;34301:16;;-1:-1:-1;;34219:51:0;;-1:-1:-1;;;;34301:16:0;;;;:40;;;;;34334:7;34301:40;:65;;;;-1:-1:-1;34359:7:0;;;;34358:8;34301:65;:95;;;;-1:-1:-1;34383:9:0;;-1:-1:-1;;;34383:9:0;;;;:13;;34301:95;:141;;;;-1:-1:-1;;;;;;34413:29:0;;;;;;:25;:29;;;;;;;;34301:141;:183;;;;-1:-1:-1;;;;;;34460:24:0;;;;;;:18;:24;;;;;;;;34459:25;34301:183;:223;;;;-1:-1:-1;;;;;;34502:22:0;;;;;;:18;:22;;;;;;;;34501:23;34301:223;34283:356;;;34551:7;:14;;-1:-1:-1;;34551:14:0;34561:4;34551:14;;;34580:17;:15;:17::i;:::-;34612:7;:15;;-1:-1:-1;;34612:15:0;;;34283:356;34667:7;;34651:12;;34667:7;;34666:8;:28;;;;-1:-1:-1;34678:16:0;;-1:-1:-1;;;34678:16:0;;;;34666:28;-1:-1:-1;;;;;34711:24:0;;;;;;:18;:24;;;;;;34651:43;;-1:-1:-1;34711:24:0;;;:50;;-1:-1:-1;;;;;;34739:22:0;;;;;;:18;:22;;;;;;;;34711:50;34707:98;;;-1:-1:-1;34788:5:0;34707:98;34819:7;:24;;;;-1:-1:-1;34830:9:0;;-1:-1:-1;;;34830:9:0;;;;:13;;34819:24;34815:414;;;34884:9;;34860:11;;34897:3;;34875:18;;-1:-1:-1;;;34884:9:0;;;;34875:6;:18;:::i;:::-;34874:26;;;;:::i;:::-;34946:8;;34860:40;;-1:-1:-1;34915:18:0;;34958:3;;34937:17;;34946:8;;;;;34937:6;:17;:::i;:::-;34936:25;;;;:::i;:::-;34915:46;-1:-1:-1;34985:12:0;34994:3;34985:6;:12;:::i;:::-;34976:21;;35012:41;35028:4;35042;35049:3;35012:15;:41::i;:::-;35074:14;;35070:148;;35109:38;35129:4;35136:10;35109:11;:38::i;:::-;35181:8;;35171:31;;;35181:8;;;;;;12779:36:1;;12846:2;12831:18;;12824:34;;;35171:31:0;;12752:18:1;35171:31:0;;;;;;;35070:148;34845:384;;34815:414;35239:33;35255:4;35261:2;35265:6;35239:15;:33::i;:::-;35302:13;;-1:-1:-1;;;;;35302:13:0;:24;35335:4;35342:15;35335:4;35342:9;:15::i;:::-;35302:56;;-1:-1:-1;;;;;;35302:56:0;;;;;;;-1:-1:-1;;;;;13077:32:1;;;35302:56:0;;;13059:51:1;13126:18;;;13119:34;13032:18;;35302:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35285:94;35393:13;;-1:-1:-1;;;;;35393:13:0;:24;35426:2;35431:13;35426:2;35431:9;:13::i;:::-;35393:52;;-1:-1:-1;;;;;;35393:52:0;;;;;;;-1:-1:-1;;;;;13077:32:1;;;35393:52:0;;;13059:51:1;13126:18;;;13119:34;13032:18;;35393:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35389:68;32994:2470;;;;32881:2583;;;:::o;3548:226::-;3668:7;3704:12;3696:6;;;;3688:29;;;;-1:-1:-1;;;3688:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3728:9:0;3740:5;3744:1;3740;:5;:::i;:::-;3728:17;3548:226;-1:-1:-1;;;;;3548:226:0:o;38796:1809::-;39050:21;;;;:43;;;;:21;;:43;39046:315;;39115:177;;-1:-1:-1;;;13366:32:1;;13423:2;13414:12;39115:177:0;;;;;;;;39185:21;;;;39263:14;;39115:177;;39185:21;;;;;39115:177;;;;-1:-1:-1;;;;;;;;;;;39115:177:0;;;39263:14;;;39115:177;:::i;:::-;;;;;;;;39307:21;;;:42;;-1:-1:-1;;39307:42:0;;;;;;;39046:315;39375:21;;;;:43;;;;:21;;;;;:43;39371:315;;39440:177;;-1:-1:-1;;;13853:32:1;;13910:2;13901:12;39440:177:0;;;;;;;;39510:21;;;;39588:14;;39440:177;;39510:21;;;;;;;;39440:177;;;;-1:-1:-1;;;;;;;;;;;39440:177:0;;;39588:14;;;39440:177;:::i;:::-;;;;;;;;39632:21;;;:42;;-1:-1:-1;;39632:42:0;;;;;;;;;39371:315;39700:19;;;;:39;;;;-1:-1:-1;;;39700:19:0;;;;:39;39696:301;;39761:171;;-1:-1:-1;;;14126:30:1;;14181:2;14172:12;39761:171:0;;;;;;;;39829:19;;;;39903:14;;39761:171;;39829:19;-1:-1:-1;;;39829:19:0;;;;;;39761:171;;;;-1:-1:-1;;;;;;;;;;;39761:171:0;;;39903:14;;;39761:171;:::i;:::-;;;;;;;;39947:19;;;:38;;-1:-1:-1;;39947:38:0;-1:-1:-1;;;39947:38:0;;;;;;;39696:301;40011:16;;;;:33;;;;-1:-1:-1;;;40011:16:0;;;;:33;40007:280;;40066:162;;-1:-1:-1;;;14397:27:1;;14449:2;14440:12;40066:162:0;;;;;;;;40131:16;;;;40199:14;;40066:162;;40131:16;-1:-1:-1;;;40131:16:0;;;;;;40066:162;;;;-1:-1:-1;;;;;;;;;;;40066:162:0;;;40199:14;;;40066:162;:::i;:::-;;;;;;;;40243:16;;;:32;;-1:-1:-1;;40243:32:0;-1:-1:-1;;;40243:32:0;;;;;;;40007:280;40301:19;;;;:39;;;;-1:-1:-1;;;40301:19:0;;;;:39;40297:301;;40362:171;;-1:-1:-1;;;14665:30:1;;14720:2;14711:12;40362:171:0;;;;;;;;40430:19;;;;40504:14;;40362:171;;40430:19;-1:-1:-1;;;40430:19:0;;;;;;40362:171;;;;-1:-1:-1;;;;;;;;;;;40362:171:0;;;40504:14;;;40362:171;:::i;:::-;;;;;;;;40548:19;;;:38;;-1:-1:-1;;40548:38:0;-1:-1:-1;;;40548:38:0;;;;;;;40297:301;38796:1809;;;;;;:::o;36938:1850::-;37198:22;;;;:45;;;;:22;;;;;:45;37194:322;;37265:180;;-1:-1:-1;;;14936:33:1;;14994:2;14985:12;37265:180:0;;;;;;;;37336:22;;;;37416:14;;37265:180;;37336:22;;;;;;;;37265:180;;;;-1:-1:-1;;;;;;;;;;;37265:180:0;;;37416:14;;;37265:180;:::i;:::-;;;;;;;;37460:22;;;:44;;-1:-1:-1;;37460:44:0;;;;;;;;;37194:322;37530:22;;;;:45;;;;:22;;;;;:45;37526:322;;37597:180;;-1:-1:-1;;;15210:33:1;;15268:2;15259:12;37597:180:0;;;;;;;;37668:22;;;;37748:14;;37597:180;;37668:22;;;;;;;;37597:180;;;;-1:-1:-1;;;;;;;;;;;37597:180:0;;;37748:14;;;37597:180;:::i;:::-;;;;;;;;37792:22;;;:44;;-1:-1:-1;;37792:44:0;;;;;;;;;37526:322;37862:20;;;;:41;;;;-1:-1:-1;;;37862:20:0;;;;:41;37858:308;;37925:174;;-1:-1:-1;;;15484:31:1;;15540:2;15531:12;37925:174:0;;;;;;;;37994:20;;;;38070:14;;37925:174;;37994:20;-1:-1:-1;;;37994:20:0;;;;;;37925:174;;;;-1:-1:-1;;;;;;;;;;;37925:174:0;;;38070:14;;;37925:174;:::i;:::-;;;;;;;;38114:20;;;:40;;-1:-1:-1;;38114:40:0;-1:-1:-1;;;38114:40:0;;;;;;;37858:308;38180:17;;;;:35;;;;-1:-1:-1;;;38180:17:0;;;;:35;38176:287;;38237:165;;-1:-1:-1;;;15756:28:1;;15809:2;15800:12;38237:165:0;;;;;;;;38303:17;;;;38373:14;;38237:165;;38303:17;-1:-1:-1;;;38303:17:0;;;;;;38237:165;;;;-1:-1:-1;;;;;;;;;;;38237:165:0;;;38373:14;;;38237:165;:::i;:::-;;;;;;;;38417:17;;;:34;;-1:-1:-1;;38417:34:0;-1:-1:-1;;;38417:34:0;;;;;;;38176:287;38477:20;;;;:41;;;;-1:-1:-1;;;38477:20:0;;;;:41;38473:308;;38540:174;;-1:-1:-1;;;16025:31:1;;16081:2;16072:12;38540:174:0;;;;;;;;38609:20;;;;38685:14;;38540:174;;38609:20;-1:-1:-1;;;38609:20:0;;;;;;38540:174;;;;-1:-1:-1;;;;;;;;;;;38540:174:0;;;38685:14;;;38540:174;:::i;:::-;;;;;;;;38729:20;;;:40;;;;;-1:-1:-1;;;38729:40:0;-1:-1:-1;;38729:40:0;;;;;;36938:1850;;;;;;:::o;13105:451::-;-1:-1:-1;;;;;13189:21:0;;13181:67;;;;-1:-1:-1;;;13181:67:0;;16297:2:1;13181:67:0;;;16279:21:1;16336:2;16316:18;;;16309:30;16375:34;16355:18;;;16348:62;-1:-1:-1;;;16426:18:1;;;16419:31;16467:19;;13181:67:0;16095:397:1;13181:67:0;13340:105;13377:6;13340:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13340:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;13319:18:0;;;;;;:9;:18;;;;;:126;13471:12;;:24;;13488:6;13471:16;:24::i;:::-;13456:12;:39;13511:37;;1884:25:1;;;13537:1:0;;-1:-1:-1;;;;;13511:37:0;;;;;1872:2:1;1857:18;13511:37:0;;;;;;;13105:451;;:::o;28970:436::-;29049:25;29061:4;29067:6;29049:11;:25::i;:::-;29045:354;;;29095:13;;:48;;-1:-1:-1;;;29095:48:0;;29132:10;29095:48;;;1676:51:1;29146:1:0;;-1:-1:-1;;;;;29095:13:0;;:36;;1649:18:1;;29095:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;29091:202;;;29168:13;;:62;;-1:-1:-1;;;29168:62:0;;29211:10;29168:62;;;16681:51:1;29168:13:0;16748:18:1;;;16741:50;-1:-1:-1;;;;;29168:13:0;;;;:34;;16654:18:1;;29168:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29045:354::-;29325:13;;:62;;-1:-1:-1;;;29325:62:0;;29368:10;29325:62;;;16681:51:1;29325:13:0;16748:18:1;;;16741:50;-1:-1:-1;;;;;29325:13:0;;;;:34;;16654:18:1;;29325:62:0;16497:300:1;12109:606:0;-1:-1:-1;;;;;12249:20:0;;12241:70;;;;-1:-1:-1;;;12241:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12330:23:0;;12322:71;;;;-1:-1:-1;;;12322:71:0;;;;;;;:::i;:::-;12482:108;12518:6;12482:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12482:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;12462:17:0;;;;;;;:9;:17;;;;;;:128;;;;12624:20;;;;;;;:32;;12649:6;12624:24;:32::i;:::-;-1:-1:-1;;;;;12601:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12672:35;;;;;;;;;;12700:6;1884:25:1;;1872:2;1857:18;;1738:177;35472:1458:0;35541:13;:17;;-1:-1:-1;;35646:15:0;;;35674:285;;;;35716:25;;35700:13;:41;;35716:25;;;;-1:-1:-1;;35756:41:0;;;;;;;35716:25;35772;;;;;;35756:41;;;;;;;;-1:-1:-1;;35864:31:0;-1:-1:-1;;;35826:23:0;;;;;35812:37;;;;-1:-1:-1;;35864:31:0;;-1:-1:-1;;;35875:20:0;;;;35864:31;;;-1:-1:-1;;35910:37:0;-1:-1:-1;;;35924:23:0;;;;;;;35910:37;;;;;;;35674:285;35973:6;35969:291;;;36012:26;;35996:13;:42;;36012:26;;;;;;;;-1:-1:-1;;36053:42:0;;;;;;;36069:26;;;;;;36053:42;;;;;-1:-1:-1;;36163:32:0;-1:-1:-1;;;36124:24:0;;;;36110:38;;-1:-1:-1;;36163:32:0;;-1:-1:-1;;;36174:21:0;;;;36163:32;;;;;-1:-1:-1;;36210:38:0;-1:-1:-1;;;36224:24:0;;;;-1:-1:-1;;;36210:38:0;;;;;;;35969:291;36275:6;36274:7;:17;;;;;36286:5;36285:6;36274:17;36270:302;;;36324:26;;36308:13;:42;;36324:26;;;;;;;;-1:-1:-1;;36365:42:0;;;;;;;36381:26;;;;;;36365:42;;;;;-1:-1:-1;;36475:32:0;-1:-1:-1;;;36436:24:0;;;;36422:38;;-1:-1:-1;;36475:32:0;;-1:-1:-1;;;36486:21:0;;;;36475:32;;;;;-1:-1:-1;;36522:38:0;-1:-1:-1;;;36536:24:0;;;;-1:-1:-1;;;36522:38:0;;;;;;;36270:302;36718:11;;;-1:-1:-1;;;36718:11:0;;;;;36694:8;;;;;;36667:11;;;;;;36609:42;;36718:11;36638:13;;;;;36609;:42;:::i;:::-;:69;;;;:::i;:::-;:93;;;;:::i;:::-;:120;;;;:::i;:::-;36584:9;:145;;-1:-1:-1;;36584:145:0;;-1:-1:-1;;;36584:145:0;;;;;;;;;;;;;36745:177;;;36771:13;;;;;;;;;;17547:34:1;;36584:145:0;36799:13;;;;17612:2:1;17597:18;;17590:43;36827:11:0;;;;;17649:18:1;;;17642:43;;;;36853:8:0;;;;;17716:2:1;17701:18;;17694:43;-1:-1:-1;;;36876:11:0;;;;17768:3:1;17753:19;;17746:44;36902:9:0;;;;;;17821:3:1;17806:19;;17799:44;36745:177:0;;17511:3:1;17496:19;36745:177:0;17261:588:1;40613:1840:0;40659:23;40685:24;40703:4;40685:9;:24::i;:::-;40802:23;;40659:50;;-1:-1:-1;40748:21:0;;40802:27;;40828:1;40802:27;:::i;:::-;40784:15;:45;40780:123;;;40864:23;;:27;;40890:1;40864:27;:::i;:::-;40846:45;;40780:123;40998:9;;40913:12;;;;41010:1;;40998:9;-1:-1:-1;;;40998:9:0;;;;;40963:31;;40981:13;40963:15;:31;:::i;:::-;40962:45;;;;:::i;:::-;:49;;;;:::i;:::-;41083:9;;40936:75;;-1:-1:-1;41022:24:0;;41083:9;-1:-1:-1;;;41083:9:0;;;;;41050:29;;-1:-1:-1;;;41068:11:0;;;;41050:15;:29;:::i;:::-;41049:43;;;;:::i;:::-;41022:70;-1:-1:-1;41103:20:0;41145:34;41022:70;41145:15;:34;:::i;:::-;41126:54;;:15;:54;:::i;:::-;41103:77;;41193:31;41211:12;41193:17;:31::i;:::-;41237:27;41267:41;41291:17;41267:21;:41;:::i;:::-;41387:11;;41237:71;;-1:-1:-1;41319:19:0;;41387:11;-1:-1:-1;;;41387:11:0;;;;;41376:8;;;;;;41355:17;;41371:1;;41355:13;:17;:::i;:::-;41354:30;;;;:::i;:::-;:44;;;;:::i;:::-;41341:9;;:58;;;-1:-1:-1;;;41341:9:0;;;;:58;:::i;:::-;41462:13;;41319:80;;;;;-1:-1:-1;41410:26:0;;41493:1;;41319:80;;41440:35;;41462:13;41440:19;:35;:::i;:::-;41439:51;;;;:::i;:::-;:55;;;;:::i;:::-;41557:13;;41410:84;;-1:-1:-1;41505:26:0;;41587:11;;41535:35;;41557:13;;;;;41535:19;:35;:::i;:::-;41534:64;;;;:::i;:::-;41505:93;-1:-1:-1;41609:24:0;41672:39;41505:93;41672:18;:39;:::i;:::-;41636:76;;:19;:76;:::i;:::-;41747:10;;41739:53;;41609:103;;-1:-1:-1;;;;;;41747:10:0;;41609:103;;41739:53;;;;41609:103;41747:10;41739:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41825:15:0;;41817:60;;41725:67;;-1:-1:-1;;;;;;41825:15:0;;41854:18;;41817:60;;;;41854:18;41825:15;41817:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41803:74:0;;-1:-1:-1;;41897:19:0;;41893:253;;41933:50;41947:15;41964:18;41933:13;:50::i;:::-;42003:131;;;18426:25:1;;;18482:2;18467:18;;18460:34;;;18510:18;;;18503:34;;;42003:131:0;;18414:2:1;18399:18;42003:131:0;;;;;;;41893:253;42226:13;;42173:109;;-1:-1:-1;;;42173:109:0;;-1:-1:-1;;;;;42226:13:0;;;42173:109;;;13059:51:1;13126:18;;;13119:34;;;42158:12:0;;42188:4;;42173:30;;13032:18:1;;42173:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42158:124;;42297:7;42293:153;;;42321:13;;:62;;-1:-1:-1;;;42321:62:0;;;;;1884:25:1;;;-1:-1:-1;;;;;42321:13:0;;;;:44;;1857:18:1;;42321:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42403:31;42417:16;42403:31;;;;1884:25:1;;1872:2;1857:18;;1738:177;42403:31:0;;;;;;;;42293:153;40648:1805;;;;;;;;;;;;40613:1840::o;3404:136::-;3462:7;3489:43;3493:1;3496;3489:43;;;;;;;;;;;;;;;;;:3;:43::i;29414:1685::-;29559:13;;:47;;-1:-1:-1;;;29559:47:0;;29595:10;29559:47;;;1676:51:1;29511:4:0;;;;-1:-1:-1;;;;;29559:13:0;;;;:35;;1649:18:1;;29559:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29554:1538;;29627:9;;-1:-1:-1;;;29627:9:0;;;;:13;29623:309;;29685:9;;29661:11;;29698:3;;29676:18;;-1:-1:-1;;;29685:9:0;;;;29676:6;:18;:::i;:::-;29675:26;;;;:::i;:::-;29751:8;;29661:40;;-1:-1:-1;29720:18:0;;29763:3;;29742:17;;29751:8;;;;;29742:6;:17;:::i;:::-;29741:25;;;;:::i;:::-;29720:46;-1:-1:-1;29794:12:0;29803:3;29794:6;:12;:::i;:::-;29785:21;-1:-1:-1;29829:14:0;;29825:92;;29868:29;29874:10;29886;29868:5;:29::i;:::-;29642:290;;29623:309;29946:23;29972:24;29990:4;29972:9;:24::i;:::-;30073:9;;29946:50;;-1:-1:-1;30011:23:0;;30084:1;;30073:9;-1:-1:-1;;;30073:9:0;;;;;30038:31;;30056:13;29946:50;30038:31;:::i;:::-;30037:45;;;;:::i;:::-;:48;;;;:::i;:::-;30161:9;;30011:74;;-1:-1:-1;30100:24:0;;30161:9;-1:-1:-1;;;30161:9:0;;;;;30128:29;;-1:-1:-1;;;30146:11:0;;;;30128:15;:29;:::i;:::-;30127:43;;;;:::i;:::-;30100:70;-1:-1:-1;30185:20:0;30244:34;30100:70;30244:15;:34;:::i;:::-;30208:71;;:15;:71;:::i;:::-;30185:94;-1:-1:-1;30298:16:0;;30294:74;;30348:4;30335:17;;30294:74;30389:10;30382:17;;;;;;;;;29554:1538;30463:1;30436:24;30454:4;30436:9;:24::i;:::-;:28;30432:128;;;30485:22;30491:7;30500:6;30485:5;:22::i;:::-;-1:-1:-1;30539:5:0;30432:128;30574:23;30600:24;30618:4;30600:9;:24::i;:::-;30718:9;;30574:50;;-1:-1:-1;30639:23:0;;30747:1;;30718:9;-1:-1:-1;;;30718:9:0;;;;;30666:31;;30684:13;30574:50;30666:31;:::i;:::-;30665:62;;;;:::i;:::-;:83;;;;:::i;:::-;30841:9;;30639:109;;-1:-1:-1;30763:24:0;;30841:9;-1:-1:-1;;;30841:9:0;;;;;30791:29;;-1:-1:-1;;;30809:11:0;;;;30791:15;:29;:::i;:::-;30790:60;;;;:::i;:::-;30763:87;-1:-1:-1;30865:20:0;30924:34;30763:87;30924:15;:34;:::i;:::-;30888:71;;:15;:71;:::i;:::-;30865:94;-1:-1:-1;30978:16:0;;30974:75;;-1:-1:-1;31028:5:0;;-1:-1:-1;31063:17:0;;-1:-1:-1;;;;31063:17:0;42461:500;42552:16;;;42566:1;42552:16;;;;;;;;42528:21;;42552:16;;;;;;;;;;-1:-1:-1;42552:16:0;42528:40;;42597:4;42579;42584:1;42579:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42579:23:0;;;:7;;;;;;;;;;:23;;;;42623:15;;:22;;;-1:-1:-1;;;42623:22:0;;;;:15;;;;;:20;;:22;;;;;42579:7;;42623:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42613:4;42618:1;42613:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42613:32:0;;;:7;;;;;;;;;:32;42688:15;;42656:62;;42673:4;;42688:15;42706:11;42656:8;:62::i;:::-;42729:15;;:224;;-1:-1:-1;;;42729:224:0;;-1:-1:-1;;;;;42729:15:0;;;;:66;;:224;;42810:11;;42729:15;;42880:4;;42907;;42927:15;;42729:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42969:416;43083:15;;43051:62;;43068:4;;-1:-1:-1;;;;;43083:15:0;43101:11;43051:8;:62::i;:::-;43124:15;;43328:8;;43124:253;;-1:-1:-1;;;43124:253:0;;43196:4;43124:253;;;20673:34:1;20723:18;;;20716:34;;;43124:15:0;20766:18:1;;;20759:34;;;20809:18;;;20802:34;-1:-1:-1;;;;;43328:8:0;;;20852:19:1;;;20845:44;43351:15:0;20905:19:1;;;20898:35;43124:15:0;;;:31;;43163:9;;20607:19:1;;43124:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:597::-;706:4;735:2;764;753:9;746:21;796:6;790:13;839:6;834:2;823:9;819:18;812:34;864:1;874:140;888:6;885:1;882:13;874:140;;;983:14;;;979:23;;973:30;949:17;;;968:2;945:26;938:66;903:10;;874:140;;;1032:6;1029:1;1026:13;1023:91;;;1102:1;1097:2;1088:6;1077:9;1073:22;1069:31;1062:42;1023:91;-1:-1:-1;1175:2:1;1154:15;-1:-1:-1;;1150:29:1;1135:45;;;;1182:2;1131:54;;594:597;-1:-1:-1;;;594:597:1:o;1196:315::-;1264:6;1272;1325:2;1313:9;1304:7;1300:23;1296:32;1293:52;;;1341:1;1338;1331:12;1293:52;1380:9;1367:23;1399:31;1424:5;1399:31;:::i;:::-;1449:5;1501:2;1486:18;;;;1473:32;;-1:-1:-1;;;1196:315:1:o;1920:180::-;1979:6;2032:2;2020:9;2011:7;2007:23;2003:32;2000:52;;;2048:1;2045;2038:12;2000:52;-1:-1:-1;2071:23:1;;1920:180;-1:-1:-1;1920:180:1:o;2105:456::-;2182:6;2190;2198;2251:2;2239:9;2230:7;2226:23;2222:32;2219:52;;;2267:1;2264;2257:12;2219:52;2306:9;2293:23;2325:31;2350:5;2325:31;:::i;:::-;2375:5;-1:-1:-1;2432:2:1;2417:18;;2404:32;2445:33;2404:32;2445:33;:::i;:::-;2105:456;;2497:7;;-1:-1:-1;;;2551:2:1;2536:18;;;;2523:32;;2105:456::o;2963:118::-;3049:5;3042:13;3035:21;3028:5;3025:32;3015:60;;3071:1;3068;3061:12;3086:382;3151:6;3159;3212:2;3200:9;3191:7;3187:23;3183:32;3180:52;;;3228:1;3225;3218:12;3180:52;3267:9;3254:23;3286:31;3311:5;3286:31;:::i;:::-;3336:5;-1:-1:-1;3393:2:1;3378:18;;3365:32;3406:30;3365:32;3406:30;:::i;:::-;3455:7;3445:17;;;3086:382;;;;;:::o;4218:388::-;4286:6;4294;4347:2;4335:9;4326:7;4322:23;4318:32;4315:52;;;4363:1;4360;4353:12;4315:52;4402:9;4389:23;4421:31;4446:5;4421:31;:::i;:::-;4471:5;-1:-1:-1;4528:2:1;4513:18;;4500:32;4541:33;4500:32;4541:33;:::i;4611:356::-;4813:2;4795:21;;;4832:18;;;4825:30;4891:34;4886:2;4871:18;;4864:62;4958:2;4943:18;;4611:356::o;4972:380::-;5051:1;5047:12;;;;5094;;;5115:61;;5169:4;5161:6;5157:17;5147:27;;5115:61;5222:2;5214:6;5211:14;5191:18;5188:38;5185:161;;5268:10;5263:3;5259:20;5256:1;5249:31;5303:4;5300:1;5293:15;5331:4;5328:1;5321:15;5185:161;;4972:380;;;:::o;5357:127::-;5418:10;5413:3;5409:20;5406:1;5399:31;5449:4;5446:1;5439:15;5473:4;5470:1;5463:15;5489:168;5529:7;5595:1;5591;5587:6;5583:14;5580:1;5577:21;5572:1;5565:9;5558:17;5554:45;5551:71;;;5602:18;;:::i;:::-;-1:-1:-1;5642:9:1;;5489:168::o;5662:127::-;5723:10;5718:3;5714:20;5711:1;5704:31;5754:4;5751:1;5744:15;5778:4;5775:1;5768:15;5794:120;5834:1;5860;5850:35;;5865:18;;:::i;:::-;-1:-1:-1;5899:9:1;;5794:120::o;6327:184::-;6397:6;6450:2;6438:9;6429:7;6425:23;6421:32;6418:52;;;6466:1;6463;6456:12;6418:52;-1:-1:-1;6489:16:1;;6327:184;-1:-1:-1;6327:184:1:o;7133:406::-;7335:2;7317:21;;;7374:2;7354:18;;;7347:30;7413:34;7408:2;7393:18;;7386:62;-1:-1:-1;;;7479:2:1;7464:18;;7457:40;7529:3;7514:19;;7133:406::o;9186:128::-;9226:3;9257:1;9253:6;9250:1;9247:13;9244:39;;;9263:18;;:::i;:::-;-1:-1:-1;9299:9:1;;9186:128::o;10483:401::-;10685:2;10667:21;;;10724:2;10704:18;;;10697:30;10763:34;10758:2;10743:18;;10736:62;-1:-1:-1;;;10829:2:1;10814:18;;10807:35;10874:3;10859:19;;10483:401::o;10889:399::-;11091:2;11073:21;;;11130:2;11110:18;;;11103:30;11169:34;11164:2;11149:18;;11142:62;-1:-1:-1;;;11235:2:1;11220:18;;11213:33;11278:3;11263:19;;10889:399::o;12479:125::-;12519:4;12547:1;12544;12541:8;12538:34;;;12552:18;;:::i;:::-;-1:-1:-1;12589:9:1;;12479:125::o;13437:209::-;-1:-1:-1;;13601:38:1;;;;13583:57;;13571:2;13556:18;;13437:209::o;16802:245::-;16869:6;16922:2;16910:9;16901:7;16897:23;16893:32;16890:52;;;16938:1;16935;16928:12;16890:52;16970:9;16964:16;16989:28;17011:5;16989:28;:::i;17052:204::-;17090:3;17126:4;17123:1;17119:12;17158:4;17155:1;17151:12;17193:3;17187:4;17183:14;17178:3;17175:23;17172:49;;;17201:18;;:::i;:::-;17237:13;;17052:204;-1:-1:-1;;;17052:204:1:o;17854:165::-;17892:1;17926:4;17923:1;17919:12;17950:3;17940:37;;17957:18;;:::i;:::-;18009:3;18002:4;17999:1;17995:12;17991:22;17986:27;;;17854:165;;;;:::o;18024:195::-;18062:4;18099;18096:1;18092:12;18131:4;18128:1;18124:12;18156:3;18151;18148:12;18145:38;;;18163:18;;:::i;:::-;18200:13;;;18024:195;-1:-1:-1;;;18024:195:1:o;18959:127::-;19020:10;19015:3;19011:20;19008:1;19001:31;19051:4;19048:1;19041:15;19075:4;19072:1;19065:15;19091:251;19161:6;19214:2;19202:9;19193:7;19189:23;19185:32;19182:52;;;19230:1;19227;19220:12;19182:52;19262:9;19256:16;19281:31;19306:5;19281:31;:::i;19347:980::-;19609:4;19657:3;19646:9;19642:19;19688:6;19677:9;19670:25;19714:2;19752:6;19747:2;19736:9;19732:18;19725:34;19795:3;19790:2;19779:9;19775:18;19768:31;19819:6;19854;19848:13;19885:6;19877;19870:22;19923:3;19912:9;19908:19;19901:26;;19962:2;19954:6;19950:15;19936:29;;19983:1;19993:195;20007:6;20004:1;20001:13;19993:195;;;20072:13;;-1:-1:-1;;;;;20068:39:1;20056:52;;20163:15;;;;20128:12;;;;20104:1;20022:9;19993:195;;;-1:-1:-1;;;;;;;20244:32:1;;;;20239:2;20224:18;;20217:60;-1:-1:-1;;;20308:3:1;20293:19;20286:35;20205:3;19347:980;-1:-1:-1;;;19347:980:1:o;20944:306::-;21032:6;21040;21048;21101:2;21089:9;21080:7;21076:23;21072:32;21069:52;;;21117:1;21114;21107:12;21069:52;21146:9;21140:16;21130:26;;21196:2;21185:9;21181:18;21175:25;21165:35;;21240:2;21229:9;21225:18;21219:25;21209:35;;20944:306;;;;;:::o

Swarm Source

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