ETH Price: $3,454.42 (-0.00%)
Gas: 6 Gwei

Token

Devour Token (RESTAURANTS)
 

Overview

Max Total Supply

1,000,000,000,000,000 RESTAURANTS

Holders

767 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
gmfroggy.eth
Balance
336,409,873,425.728190540948383461 RESTAURANTS

Value
$0.00
0xB4499D3f58FD2337248815C116a66FBEE26921C3
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:
DevourToken

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-22
*/

// SPDX-License-Identifier: NOLICENSE
pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

contract DevourToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromMaxWallet;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;

    address[] private _excluded;

    bool public tradingEnabled;
    bool public swapEnabled;
    bool private swapping;
    bool private isSwapNLiq = false;

    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 18;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1000000000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public maxBuyAmount = _tTotal.mul(2).div(100);
    uint256 public maxSellAmount = _tTotal.mul(1).div(100);
    uint256 public swapTokensAtAmount = 5000000000000 * 10**_decimals;
    uint256 public _maxWalletSize = _tTotal.mul(2).div(100);

    address public operationsAddress =
        0xf254Ac119AcdDE9d64afC9a622c0a86bF6473ff8;

    address public marketingAddress =
        0x2988F8A65E69Ce9203B57E4a82828560c5735c1f;

    address public foundationAddress =
        0xEb2c05E949B587D7c2918C5543F567eC302eF2e7;

    address public exchangeLiquidityReserve =
        0x5A75f7c8aE75a04380eD90bBDee2D6F686af02FE;

    address public manualBurnReserve =
        0xDd4b03a752862dBdFdD8C8663eB7dEA94BcAe97C;

    address public constant deadAddress =
        0x000000000000000000000000000000000000dEaD;

    string private constant _name = "Devour Token";
    string private constant _symbol = "RESTAURANTS";

    struct feeRatesStruct {
        uint256 rfi;
        uint256 operations;
        uint256 burn;
        uint256 liquidity;
    }

    struct valuesFromGetValues {
        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rRfi;
        uint256 rOperations;
        uint256 rBurn;
        uint256 rLiquidity;
        uint256 tTransferAmount;
        uint256 tRfi;
        uint256 tOperations;
        uint256 tBurn;
        uint256 tLiquidity;
    }

    event TradingEnabled(uint256 startDate);

    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    constructor(address routerAddress) {
        IRouter _router = IRouter(routerAddress);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );

        router = _router;
        pair = _pair;

        _rOwned[owner()] = _rTotal;

        _isExcluded[deadAddress] = true;
        _isExcluded[marketingAddress] = true;
        _isExcluded[foundationAddress] = true;
        _isExcluded[operationsAddress] = true;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[operationsAddress] = true;
        _isExcludedFromFee[deadAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[foundationAddress] = true;
        _isExcludedFromFee[manualBurnReserve] = true;
        _isExcludedFromFee[exchangeLiquidityReserve] = true;

        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[operationsAddress] = true;
        _isExcludedFromMaxWallet[deadAddress] = true;
        _isExcludedFromMaxWallet[marketingAddress] = true;
        _isExcludedFromMaxWallet[foundationAddress] = true;
        _isExcludedFromMaxWallet[manualBurnReserve] = true;
        _isExcludedFromMaxWallet[exchangeLiquidityReserve] = true;

        emit Transfer(address(0), owner(), _tTotal);
    }

    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    //override ERC20:
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public 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] + 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        valuesFromGetValues memory s = _getValues(tAmount, true);
        _rOwned[sender] = _rOwned[sender].sub(s.rAmount);
        _rTotal = _rTotal.sub(s.rAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rTransferAmount;
        }
    }

    function startTrading() external onlyOwner {
        tradingEnabled = true;
        swapEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount / currentRate;
    }

    //@dev kept original RFI naming -> "reward" as in reflection
    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner {
        _maxWalletSize = _tTotal.mul(maxWallPercent).div(10**2);
    }

    function _reflectRfi(uint256 rRfi) private {
        _rTotal -= rRfi;
    }

    function _takeOperations(uint256 rOperations, uint256 tOperations) private {
        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tOperations;
        }
        _rOwned[address(this)] += rOperations;
    }

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tLiquidity;
        }
        _rOwned[address(this)] += rLiquidity;
    }

    function _takeBurn(uint256 rBurn, uint256 tBurn) private {
        if (_isExcluded[deadAddress]) {
            _tOwned[deadAddress] += tBurn;
        }
        _rOwned[deadAddress] += rBurn;
    }

    function _getValues(uint256 tAmount, bool takeFee)
        private
        view
        returns (valuesFromGetValues memory to_return)
    {
        to_return = _getTValues(tAmount, takeFee);
        (
            to_return.rAmount,
            to_return.rTransferAmount,
            to_return.rRfi,
            to_return.rOperations,
            to_return.rBurn,
            to_return.rLiquidity
        ) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee)
        private
        pure
        returns (valuesFromGetValues memory s)
    {
        feeRatesStruct memory feeRates = feeRatesStruct({
            rfi: 30,
            operations: 40,
            burn: 20,
            liquidity: 10
        });

        if (!takeFee) {
            s.tTransferAmount = tAmount;
            return s;
        }
        s.tRfi = (tAmount * feeRates.rfi) / 1000;
        s.tOperations = (tAmount * feeRates.operations) / 1000;
        s.tBurn = (tAmount * feeRates.burn) / 1000;
        s.tLiquidity = (tAmount * feeRates.liquidity) / 1000;
        s.tTransferAmount =
            tAmount -
            s.tRfi -
            s.tOperations -
            s.tBurn -
            s.tLiquidity;

        return s;
    }

    function _getRValues(
        valuesFromGetValues memory s,
        uint256 tAmount,
        bool takeFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rRfi,
            uint256 rOperations,
            uint256 rBurn,
            uint256 rLiquidity
        )
    {
        rAmount = tAmount * currentRate;

        if (!takeFee) {
            return (rAmount, rAmount, 0, 0, 0, 0);
        }

        rRfi = s.tRfi * currentRate;
        rOperations = s.tOperations * currentRate;
        rBurn = s.tBurn * currentRate;
        rLiquidity = s.tLiquidity * currentRate;
        rTransferAmount = rAmount - rRfi - rOperations - rBurn - rLiquidity;
        return (rAmount, rTransferAmount, rRfi, rOperations, rBurn, rLiquidity);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            amount <= balanceOf(from),
            "You are trying to transfer more than your balance"
        );

        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            require(tradingEnabled, "Trading is not enabled yet");
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            from == pair
        ) {
            require(amount <= maxBuyAmount, "you are exceeding maxBuyAmount");
            uint256 walletCurrentBalance = balanceOf(to);
            require(
                walletCurrentBalance + amount <= _maxWalletSize &&
                    !_isExcludedFromMaxWallet[from],
                "Exceeds maximum wallet token amount"
            );
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            from == pair
        ) {
            require(
                amount <= maxSellAmount,
                "Amount is exceeding maxSellAmount"
            );
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (!swapping && swapEnabled && canSwap && from != pair) {
            swapAndLiquify(swapTokensAtAmount);
        }

        _tokenTransfer(
            from,
            to,
            amount,
            !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) &&
                !(to != pair && from != pair) &&
                !isSwapNLiq
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee
    ) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender]) {
            //from excluded
            _tOwned[sender] = _tOwned[sender] - tAmount;
        }
        if (_isExcluded[recipient]) {
            //to excluded
            _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender] - s.rAmount;
        _rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount;
        _reflectRfi(s.rRfi);
        _takeOperations(s.rOperations, s.tOperations);
        _takeLiquidity(s.rLiquidity, s.tLiquidity);
        _takeBurn(s.rBurn, s.tBurn);
        emit Transfer(sender, recipient, s.tTransferAmount);
        emit Transfer(sender, address(this), s.tLiquidity + s.tOperations);
        emit Transfer(sender, deadAddress, s.tBurn);
    }

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

        // make the swap
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        isSwapNLiq = true;
        feeRatesStruct memory feeRates = feeRatesStruct({
            rfi: 30,
            operations: 40,
            burn: 20,
            liquidity: 10
        });
        // Split the contract balance into halves
        uint256 denominator = (feeRates.liquidity + feeRates.operations) * 2;
        uint256 tokensToAddLiquidityWith = (tokens * feeRates.liquidity) /
            denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance = deltaBalance / (denominator - feeRates.liquidity);
        uint256 ethToAddLiquidityWith = unitBalance * feeRates.liquidity;

        if (ethToAddLiquidityWith > 0) {
            // Add liquidity to uniswap
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }

        // Send ETH to operationsWallet
        uint256 operationsAmt = unitBalance * 2 * feeRates.operations;
        if (operationsAmt > 0) {
            payable(operationsAddress).transfer(operationsAmt);
        }
        isSwapNLiq = false;
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

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

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

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

    function updateSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
    }

    //Emergency swap unlock before ownership renoucement
    function rescueLock() external onlyOwner {
        swapping = !swapping;
    }

    //Use this in case ETH are sent to the contract by mistake
    function rescueETH(uint256 weiAmount) external onlyOwner {
        require(address(this).balance >= weiAmount, "insufficient ETH balance");
        payable(msg.sender).transfer(weiAmount);
    }

    function rescueERC20Tokens(address tokenAddress) external onlyOwner {
        IERC20(tokenAddress).transfer(
            msg.sender,
            IERC20(tokenAddress).balanceOf(address(this))
        );
    }

    /// @dev Update router address in case of uniswap migration
    function setRouterAddress(address newRouter) external onlyOwner {
        require(newRouter != address(router));
        IRouter _newRouter = IRouter(newRouter);
        address get_pair = IFactory(_newRouter.factory()).getPair(
            address(this),
            _newRouter.WETH()
        );
        if (get_pair == address(0)) {
            pair = IFactory(_newRouter.factory()).createPair(
                address(this),
                _newRouter.WETH()
            );
        } else {
            pair = get_pair;
        }
        router = _newRouter;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startDate","type":"uint256"}],"name":"TradingEnabled","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"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeLiquidityReserve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"foundationAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnReserve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526008805463ff000000191690556200001f6012600a6200076e565b620000329066038d7ea4c6800062000859565b600a819055620000459060001962000895565b62000053906000196200087b565b600b556200008d6064620000796002600a546200063860201b620017831790919060201c565b6200064d60201b620017961790919060201c565b600c55620000b36064620000796001600a546200063860201b620017831790919060201c565b600d55620000c46012600a6200076e565b620000d69065048c2739500062000859565b600e55620000fc6064620000796002600a546200063860201b620017831790919060201c565b600f55601080546001600160a01b031990811673f254ac119acdde9d64afc9a622c0a86bf6473ff817909155601180548216732988f8a65e69ce9203b57e4a82828560c5735c1f17905560128054821673eb2c05e949b587d7c2918c5543f567ec302ef2e7179055601380548216735a75f7c8ae75a04380ed90bbdee2d6f686af02fe1790556014805490911673dd4b03a752862dbdfdd8c8663eb7dea94bcae97c179055348015620001ae57600080fd5b5060405162003a2d38038062003a2d833981016040819052620001d191620006be565b620001e5620001df6200065b565b6200065f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022657600080fd5b505afa1580156200023b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002619190620006be565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002aa57600080fd5b505afa158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e59190620006be565b6040518363ffffffff1660e01b815260040162000304929190620006e7565b602060405180830381600087803b1580156200031f57600080fd5b505af115801562000334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035a9190620006be565b60088054600160201b600160c01b0319166401000000006001600160a01b038681169190910291909117909155600980546001600160a01b031916918316919091179055600b5490915060016000620003b2620006af565b6001600160a01b039081168252602080830193909352604091820160009081209490945560069092527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e228054600160ff1991821681179092556011548416855282852080548216831790556012548416855282852080548216831790556010549093168452908320805490921681179091559060059062000452620006af565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260059093528183208054851660019081179091557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80548616821790556011548216845282842080548616821790556012548216845282842080548616821790556014548216845282842080548616821790556013549091168352908220805490931681179092556004906200051c620006af565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260049093528183208054851660019081179091557f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054861682179055601154821684528284208054861682179055601254821684528284208054861682179055601454821684528284208054861682179055601354909116835291208054909216179055620005e0620006af565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405162000627919062000701565b60405180910390a3505050620008d8565b600062000646828462000859565b9392505050565b60006200064682846200070a565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b600060208284031215620006d0578081fd5b81516001600160a01b038116811462000646578182fd5b6001600160a01b0392831681529116602082015260400190565b90815260200190565b6000826200071c576200071c620008c2565b500490565b80825b600180861162000735575062000765565b8187048211156200074a576200074a620008ac565b808616156200075857918102915b9490941c93800262000724565b94509492505050565b60006200064660001960ff8516846000826200078d5750600162000646565b816200079c5750600062000646565b8160018114620007b55760028114620007c057620007f4565b600191505062000646565b60ff841115620007d457620007d4620008ac565b6001841b915084821115620007ed57620007ed620008ac565b5062000646565b5060208310610133831016604e8410600b84101617156200082c575081810a83811115620008265762000826620008ac565b62000646565b6200083b848484600162000721565b808604821115620008505762000850620008ac565b02949350505050565b6000816000190483118215151615620008765762000876620008ac565b500290565b600082821015620008905762000890620008ac565b500390565b600082620008a757620008a7620008c2565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61314580620008e86000396000f3fe60806040526004361061026b5760003560e01c8063715018a611610144578063a8aa1b31116100b6578063e2f456051161007a578063e2f45605146106bd578063ea2f0b37146106d2578063ea4cfe12146106f2578063f2fde38b14610707578063f887ea4014610727578063fcf07c6b1461073c57610272565b8063a8aa1b3114610633578063a9059cbb14610648578063b4f5f09e14610668578063c3e0f5cf1461067d578063dd62ed3e1461069d57610272565b80638f9a55c0116101085780638f9a55c014610594578063924de9b7146105a957806395d89b41146105c95780639e252f00146105de578063a457c2d7146105fe578063a5ece9411461061e57610272565b8063715018a61461051557806382bf293c1461052a57806388e765ff1461054a57806388f820201461055f5780638da5cb5b1461057f57610272565b80633bd5d173116101dd57806352390c02116101a157806352390c02146104765780635342acb414610496578063550e8867146104b657806366d602ae146104cb5780636ddd1713146104e057806370a08231146104f557610272565b80633bd5d173146103e157806341cb87fc14610401578063437823ec146104215780634549b039146104415780634ada218b1461046157610272565b806327c8f8351161022f57806327c8f83514610333578063293230b8146103485780632d8381191461035f578063313ce5671461037f5780633685d419146103a157806339509351146103c157610272565b806306fdde0314610277578063095ea7b3146102a257806315abe50f146102cf57806318160ddd146102f157806323b872dd1461031357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610751565b6040516102999190612a9f565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd36600461292e565b610777565b6040516102999190612a94565b3480156102db57600080fd5b506102e4610795565b6040516102999190612a12565b3480156102fd57600080fd5b506103066107a4565b6040516102999190612f79565b34801561031f57600080fd5b506102c261032e3660046128ee565b6107aa565b34801561033f57600080fd5b506102e4610831565b34801561035457600080fd5b5061035d610837565b005b34801561036b57600080fd5b5061030661037a366004612991565b6108d1565b34801561038b57600080fd5b50610394610914565b6040516102999190612ff2565b3480156103ad57600080fd5b5061035d6103bc36600461287e565b610919565b3480156103cd57600080fd5b506102c26103dc36600461292e565b610aee565b3480156103ed57600080fd5b5061035d6103fc366004612991565b610b3d565b34801561040d57600080fd5b5061035d61041c36600461287e565b610be7565b34801561042d57600080fd5b5061035d61043c36600461287e565b610f8d565b34801561044d57600080fd5b5061030661045c3660046129c1565b610ff0565b34801561046d57600080fd5b506102c261104a565b34801561048257600080fd5b5061035d61049136600461287e565b611053565b3480156104a257600080fd5b506102c26104b136600461287e565b61118b565b3480156104c257600080fd5b506102e46111a9565b3480156104d757600080fd5b506103066111b8565b3480156104ec57600080fd5b506102c26111be565b34801561050157600080fd5b5061030661051036600461287e565b6111cc565b34801561052157600080fd5b5061035d61122e565b34801561053657600080fd5b5061035d610545366004612991565b611279565b34801561055657600080fd5b506103066112de565b34801561056b57600080fd5b506102c261057a36600461287e565b6112e4565b34801561058b57600080fd5b506102e4611302565b3480156105a057600080fd5b50610306611311565b3480156105b557600080fd5b5061035d6105c4366004612959565b611317565b3480156105d557600080fd5b5061028c611370565b3480156105ea57600080fd5b5061035d6105f9366004612991565b611395565b34801561060a57600080fd5b506102c261061936600461292e565b611421565b34801561062a57600080fd5b506102e4611489565b34801561063f57600080fd5b506102e4611498565b34801561065457600080fd5b506102c261066336600461292e565b6114a7565b34801561067457600080fd5b5061035d6114bb565b34801561068957600080fd5b5061035d61069836600461287e565b611519565b3480156106a957600080fd5b506103066106b83660046128b6565b61164d565b3480156106c957600080fd5b50610306611678565b3480156106de57600080fd5b5061035d6106ed36600461287e565b61167e565b3480156106fe57600080fd5b506102e46116de565b34801561071357600080fd5b5061035d61072236600461287e565b6116ed565b34801561073357600080fd5b506102e461175e565b34801561074857600080fd5b506102e4611774565b60408051808201909152600c81526b2232bb37bab9102a37b5b2b760a11b602082015290565b600061078b6107846117a2565b84846117a6565b5060015b92915050565b6014546001600160a01b031681565b600a5490565b60006107b784848461185a565b610827846107c36117a2565b610822856040518060600160405280602881526020016130c3602891396001600160a01b038a166000908152600360205260408120906108016117a2565b6001600160a01b031681526020810191909152604001600020549190611c1a565b6117a6565b5060019392505050565b61dead81565b61083f6117a2565b6001600160a01b0316610850611302565b6001600160a01b03161461087f5760405162461bcd60e51b815260040161087690612d77565b60405180910390fd5b6008805461ff001960ff19909116600117166101001790556040517fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e923906108c7904290612f79565b60405180910390a1565b6000600b548211156108f55760405162461bcd60e51b815260040161087690612bbd565b60006108ff611c46565b905061090b8184613018565b9150505b919050565b601290565b6109216117a2565b6001600160a01b0316610932611302565b6001600160a01b0316146109585760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03811660009081526006602052604090205460ff166109905760405162461bcd60e51b815260040161087690612d09565b60005b600754811015610aea57816001600160a01b0316600782815481106109c857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610ad857600780546109f390600190613057565b81548110610a1157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600780546001600160a01b039092169183908110610a4b57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610ab157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610aea565b80610ae28161306e565b915050610993565b5050565b600061078b610afb6117a2565b848460036000610b096117a2565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546108229190613000565b6000610b476117a2565b6001600160a01b03811660009081526006602052604090205490915060ff1615610b835760405162461bcd60e51b815260040161087690612eec565b6000610b90836001611c69565b80516001600160a01b038416600090815260016020526040902054919250610bb89190611cb1565b6001600160a01b0383166000908152600160205260409020558051600b54610bdf91611cb1565b600b55505050565b610bef6117a2565b6001600160a01b0316610c00611302565b6001600160a01b031614610c265760405162461bcd60e51b815260040161087690612d77565b6008546001600160a01b03828116600160201b909204161415610c4857600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8857600080fd5b505afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc0919061289a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0857600080fd5b505afa158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d40919061289a565b6040518363ffffffff1660e01b8152600401610d5d929190612a26565b60206040518083038186803b158015610d7557600080fd5b505afa158015610d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dad919061289a565b90506001600160a01b038116610f4257816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610df657600080fd5b505afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061289a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7657600080fd5b505afa158015610e8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eae919061289a565b6040518363ffffffff1660e01b8152600401610ecb929190612a26565b602060405180830381600087803b158015610ee557600080fd5b505af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061289a565b600980546001600160a01b0319166001600160a01b0392909216919091179055610f5e565b600980546001600160a01b0319166001600160a01b0383161790555b50600880546001600160a01b03909216600160201b02640100000000600160c01b031990921691909117905550565b610f956117a2565b6001600160a01b0316610fa6611302565b6001600160a01b031614610fcc5760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000600a548311156110145760405162461bcd60e51b815260040161087690612d40565b81611030576000611026846001611c69565b51915061078f9050565b600061103d846001611c69565b60200151915061078f9050565b60085460ff1681565b61105b6117a2565b6001600160a01b031661106c611302565b6001600160a01b0316146110925760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03811660009081526006602052604090205460ff16156110cb5760405162461bcd60e51b815260040161087690612c8f565b6001600160a01b03811660009081526001602052604090205415611125576001600160a01b03811660009081526001602052604090205461110b906108d1565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b031660009081526005602052604090205460ff1690565b6013546001600160a01b031681565b600d5481565b600854610100900460ff1681565b6001600160a01b03811660009081526006602052604081205460ff161561120c57506001600160a01b03811660009081526002602052604090205461090f565b6001600160a01b03821660009081526001602052604090205461078f906108d1565b6112366117a2565b6001600160a01b0316611247611302565b6001600160a01b03161461126d5760405162461bcd60e51b815260040161087690612d77565b6112776000611cbd565b565b6112816117a2565b6001600160a01b0316611292611302565b6001600160a01b0316146112b85760405162461bcd60e51b815260040161087690612d77565b6112d860646112d283600a5461178390919063ffffffff16565b90611796565b600f5550565b600c5481565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b600f5481565b61131f6117a2565b6001600160a01b0316611330611302565b6001600160a01b0316146113565760405162461bcd60e51b815260040161087690612d77565b600880549115156101000261ff0019909216919091179055565b60408051808201909152600b81526a52455354415552414e545360a81b602082015290565b61139d6117a2565b6001600160a01b03166113ae611302565b6001600160a01b0316146113d45760405162461bcd60e51b815260040161087690612d77565b804710156113f45760405162461bcd60e51b815260040161087690612dac565b604051339082156108fc029083906000818181858888f19350505050158015610aea573d6000803e3d6000fd5b600061078b61142e6117a2565b84610822856040518060600160405280602581526020016130eb60259139600360006114586117a2565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611c1a565b6011546001600160a01b031681565b6009546001600160a01b031681565b600061078b6114b46117a2565b848461185a565b6114c36117a2565b6001600160a01b03166114d4611302565b6001600160a01b0316146114fa5760405162461bcd60e51b815260040161087690612d77565b6008805462ff0000198116620100009182900460ff1615909102179055565b6115216117a2565b6001600160a01b0316611532611302565b6001600160a01b0316146115585760405162461bcd60e51b815260040161087690612d77565b6040516370a0823160e01b81526001600160a01b0382169063a9059cbb90339083906370a082319061158e903090600401612a12565b60206040518083038186803b1580156115a657600080fd5b505afa1580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115de91906129a9565b6040518363ffffffff1660e01b81526004016115fb929190612a40565b602060405180830381600087803b15801561161557600080fd5b505af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aea9190612975565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b600e5481565b6116866117a2565b6001600160a01b0316611697611302565b6001600160a01b0316146116bd5760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6010546001600160a01b031681565b6116f56117a2565b6001600160a01b0316611706611302565b6001600160a01b03161461172c5760405162461bcd60e51b815260040161087690612d77565b6001600160a01b0381166117525760405162461bcd60e51b815260040161087690612c07565b61175b81611cbd565b50565b600854600160201b90046001600160a01b031681565b6012546001600160a01b031681565b600061178f8284613038565b9392505050565b600061178f8284613018565b3390565b6001600160a01b0383166117cc5760405162461bcd60e51b815260040161087690612e71565b6001600160a01b0382166117f25760405162461bcd60e51b815260040161087690612c4d565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061184d908590612f79565b60405180910390a3505050565b6001600160a01b0383166118805760405162461bcd60e51b815260040161087690612e2c565b6001600160a01b0382166118a65760405162461bcd60e51b815260040161087690612af2565b600081116118c65760405162461bcd60e51b815260040161087690612de3565b6118cf836111cc565b8111156118ee5760405162461bcd60e51b815260040161087690612b6c565b6001600160a01b03831660009081526005602052604090205460ff1615801561193057506001600160a01b03821660009081526005602052604090205460ff16155b156119575760085460ff166119575760405162461bcd60e51b815260040161087690612b35565b61195f611302565b6001600160a01b0316836001600160a01b0316141580156119995750611983611302565b6001600160a01b0316826001600160a01b031614155b80156119ad57506001600160a01b03821615155b80156119c457506001600160a01b03821661dead14155b80156119dd57506009546001600160a01b038481169116145b15611a6457600c54811115611a045760405162461bcd60e51b815260040161087690612eb5565b6000611a0f836111cc565b600f54909150611a1f8383613000565b11158015611a4657506001600160a01b03841660009081526004602052604090205460ff16155b611a625760405162461bcd60e51b815260040161087690612cc6565b505b611a6c611302565b6001600160a01b0316836001600160a01b031614158015611aa65750611a90611302565b6001600160a01b0316826001600160a01b031614155b8015611aba57506001600160a01b03821615155b8015611ad157506001600160a01b03821661dead14155b8015611aea57506009546001600160a01b038481169116145b15611b1157600d54811115611b115760405162461bcd60e51b815260040161087690612f38565b6000611b1c306111cc565b600e546008549192508210159062010000900460ff16158015611b465750600854610100900460ff165b8015611b4f5750805b8015611b6957506009546001600160a01b03868116911614155b15611b7957611b79600e54611d0d565b6001600160a01b038516600090815260056020526040902054611c139086908690869060ff1680611bc257506001600160a01b03881660009081526005602052604090205460ff165b158015611bf857506009546001600160a01b03898116911614801590611bf657506009546001600160a01b038a8116911614155b155b8015611c0e57506008546301000000900460ff16155b611e73565b5050505050565b60008184841115611c3e5760405162461bcd60e51b81526004016108769190612a9f565b505050900390565b6000806000611c5361210b565b9092509050611c628183613018565b9250505090565b611c71612824565b611c7b83836122c9565b9050611c90818484611c8b611c46565b6123d7565b60a08701526080860152606085015260408401526020830152815292915050565b600061178f8284613057565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805463ff0000001962ff000019909116620100001716630100000017905560408051608081018252601e8152602860208201819052601492820192909252600a606082018190529091600091611d659190613000565b611d70906002613038565b9050600081836060015185611d859190613038565b611d8f9190613018565b90506000611d9d8286613057565b905047611da982612489565b6000611db58247613057565b90506000866060015186611dc99190613057565b611dd39083613018565b90506000876060015182611de79190613038565b90508015611df957611df98682612635565b6020880151600090611e0c846002613038565b611e169190613038565b90508015611e5a576010546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611e58573d6000803e3d6000fd5b505b50506008805463ffff0000191690555050505050505050565b6000611e7f8383611c69565b6001600160a01b03861660009081526006602052604090205490915060ff1615611ee1576001600160a01b038516600090815260026020526040902054611ec7908490613057565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526006602052604090205460ff1615611f445760c08101516001600160a01b038516600090815260026020526040902054611f2a9190613000565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b038616600090815260016020526040902054611f699190613057565b6001600160a01b0380871660009081526001602090815260408083209490945584015191871681529190912054611fa09190613000565b6001600160a01b0385166000908152600160205260409081902091909155810151611fca906126ee565b611fdd8160600151826101000151612708565b611ff08160a00151826101400151612708565b612003816080015182610120015161276d565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161204a9190612f79565b60405180910390a3306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610100015184610140015161209d9190613000565b6040516120aa9190612f79565b60405180910390a361dead6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361012001516040516120fc9190612f79565b60405180910390a35050505050565b600b54600a546000918291825b6007548110156122965782600160006007848154811061214857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806121c1575081600260006007848154811061219a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121d857600b54600a54945094505050506122c5565b60016000600783815481106121fd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461222c9084613057565b9250600260006007838154811061225357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546122829083613057565b91508061228e8161306e565b915050612118565b50600a54600b546122a79190613018565b8210156122bf57600b54600a549350935050506122c5565b90925090505b9091565b6122d1612824565b60408051608081018252601e815260286020820152601491810191909152600a606082015282612308575060c0810183905261078f565b80516103e8906123189086613038565b6123229190613018565b60e083015260208101516103e89061233a9086613038565b6123449190613018565b61010083015260408101516103e89061235d9086613038565b6123679190613018565b61012083015260608101516103e8906123809086613038565b61238a9190613018565b610140830181905261012083015161010084015160e08501516123ad9088613057565b6123b79190613057565b6123c19190613057565b6123cb9190613057565b60c08301525092915050565b600080808080806123e8878a613038565b9550876124035750849350600092508291508190508061247c565b868a60e001516124139190613038565b9350868a61010001516124269190613038565b9250868a61012001516124399190613038565b9150868a610140015161244c9190613038565b905080828461245b878a613057565b6124659190613057565b61246f9190613057565b6124799190613057565b94505b9499939850945094509450565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124cc57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050600860049054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561253a57600080fd5b505afa15801561254e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612572919061289a565b8160018151811061259357634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526008546125c0913091600160201b900416846117a6565b60085460405163791ac94760e01b8152600160201b9091046001600160a01b03169063791ac947906125ff908590600090869030904290600401612f82565b600060405180830381600087803b15801561261957600080fd5b505af115801561262d573d6000803e3d6000fd5b505050505050565b600854612654903090600160201b90046001600160a01b0316846117a6565b600854600160201b90046001600160a01b031663f305d71982308560008061267a611302565b426040518863ffffffff1660e01b815260040161269c96959493929190612a59565b6060604051808303818588803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c1391906129e5565b80600b60008282546127009190613057565b909155505050565b3060009081526006602052604090205460ff161561274557306000908152600260205260408120805483929061273f908490613000565b90915550505b3060009081526001602052604081208054849290612764908490613000565b90915550505050565b61dead60005260066020527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460ff16156127e65761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc80548392906127e0908490613000565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290612764908490613000565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020828403121561288f578081fd5b813561178f8161309f565b6000602082840312156128ab578081fd5b815161178f8161309f565b600080604083850312156128c8578081fd5b82356128d38161309f565b915060208301356128e38161309f565b809150509250929050565b600080600060608486031215612902578081fd5b833561290d8161309f565b9250602084013561291d8161309f565b929592945050506040919091013590565b60008060408385031215612940578182fd5b823561294b8161309f565b946020939093013593505050565b60006020828403121561296a578081fd5b813561178f816130b4565b600060208284031215612986578081fd5b815161178f816130b4565b6000602082840312156129a2578081fd5b5035919050565b6000602082840312156129ba578081fd5b5051919050565b600080604083850312156129d3578182fd5b8235915060208301356128e3816130b4565b6000806000606084860312156129f9578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612acb57858101830151858201604001528201612aaf565b81811115612adc5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601a908201527f54726164696e67206973206e6f7420656e61626c656420796574000000000000604082015260600190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526023908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152621d5b9d60ea1b606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526018908201527f696e73756666696369656e74204554482062616c616e63650000000000000000604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f796f752061726520657863656564696e67206d6178427579416d6f756e740000604082015260600190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b60208082526021908201527f416d6f756e7420697320657863656564696e67206d617853656c6c416d6f756e6040820152601d60fa1b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612fd15784516001600160a01b031683529383019391830191600101612fac565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b6000821982111561301357613013613089565b500190565b60008261303357634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561305257613052613089565b500290565b60008282101561306957613069613089565b500390565b600060001982141561308257613082613089565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461175b57600080fd5b801515811461175b57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207252393e54ce98f39e19bd29026a08e8c0ce002b11817c482b273e056ee66b6664736f6c634300080000330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x60806040526004361061026b5760003560e01c8063715018a611610144578063a8aa1b31116100b6578063e2f456051161007a578063e2f45605146106bd578063ea2f0b37146106d2578063ea4cfe12146106f2578063f2fde38b14610707578063f887ea4014610727578063fcf07c6b1461073c57610272565b8063a8aa1b3114610633578063a9059cbb14610648578063b4f5f09e14610668578063c3e0f5cf1461067d578063dd62ed3e1461069d57610272565b80638f9a55c0116101085780638f9a55c014610594578063924de9b7146105a957806395d89b41146105c95780639e252f00146105de578063a457c2d7146105fe578063a5ece9411461061e57610272565b8063715018a61461051557806382bf293c1461052a57806388e765ff1461054a57806388f820201461055f5780638da5cb5b1461057f57610272565b80633bd5d173116101dd57806352390c02116101a157806352390c02146104765780635342acb414610496578063550e8867146104b657806366d602ae146104cb5780636ddd1713146104e057806370a08231146104f557610272565b80633bd5d173146103e157806341cb87fc14610401578063437823ec146104215780634549b039146104415780634ada218b1461046157610272565b806327c8f8351161022f57806327c8f83514610333578063293230b8146103485780632d8381191461035f578063313ce5671461037f5780633685d419146103a157806339509351146103c157610272565b806306fdde0314610277578063095ea7b3146102a257806315abe50f146102cf57806318160ddd146102f157806323b872dd1461031357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610751565b6040516102999190612a9f565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd36600461292e565b610777565b6040516102999190612a94565b3480156102db57600080fd5b506102e4610795565b6040516102999190612a12565b3480156102fd57600080fd5b506103066107a4565b6040516102999190612f79565b34801561031f57600080fd5b506102c261032e3660046128ee565b6107aa565b34801561033f57600080fd5b506102e4610831565b34801561035457600080fd5b5061035d610837565b005b34801561036b57600080fd5b5061030661037a366004612991565b6108d1565b34801561038b57600080fd5b50610394610914565b6040516102999190612ff2565b3480156103ad57600080fd5b5061035d6103bc36600461287e565b610919565b3480156103cd57600080fd5b506102c26103dc36600461292e565b610aee565b3480156103ed57600080fd5b5061035d6103fc366004612991565b610b3d565b34801561040d57600080fd5b5061035d61041c36600461287e565b610be7565b34801561042d57600080fd5b5061035d61043c36600461287e565b610f8d565b34801561044d57600080fd5b5061030661045c3660046129c1565b610ff0565b34801561046d57600080fd5b506102c261104a565b34801561048257600080fd5b5061035d61049136600461287e565b611053565b3480156104a257600080fd5b506102c26104b136600461287e565b61118b565b3480156104c257600080fd5b506102e46111a9565b3480156104d757600080fd5b506103066111b8565b3480156104ec57600080fd5b506102c26111be565b34801561050157600080fd5b5061030661051036600461287e565b6111cc565b34801561052157600080fd5b5061035d61122e565b34801561053657600080fd5b5061035d610545366004612991565b611279565b34801561055657600080fd5b506103066112de565b34801561056b57600080fd5b506102c261057a36600461287e565b6112e4565b34801561058b57600080fd5b506102e4611302565b3480156105a057600080fd5b50610306611311565b3480156105b557600080fd5b5061035d6105c4366004612959565b611317565b3480156105d557600080fd5b5061028c611370565b3480156105ea57600080fd5b5061035d6105f9366004612991565b611395565b34801561060a57600080fd5b506102c261061936600461292e565b611421565b34801561062a57600080fd5b506102e4611489565b34801561063f57600080fd5b506102e4611498565b34801561065457600080fd5b506102c261066336600461292e565b6114a7565b34801561067457600080fd5b5061035d6114bb565b34801561068957600080fd5b5061035d61069836600461287e565b611519565b3480156106a957600080fd5b506103066106b83660046128b6565b61164d565b3480156106c957600080fd5b50610306611678565b3480156106de57600080fd5b5061035d6106ed36600461287e565b61167e565b3480156106fe57600080fd5b506102e46116de565b34801561071357600080fd5b5061035d61072236600461287e565b6116ed565b34801561073357600080fd5b506102e461175e565b34801561074857600080fd5b506102e4611774565b60408051808201909152600c81526b2232bb37bab9102a37b5b2b760a11b602082015290565b600061078b6107846117a2565b84846117a6565b5060015b92915050565b6014546001600160a01b031681565b600a5490565b60006107b784848461185a565b610827846107c36117a2565b610822856040518060600160405280602881526020016130c3602891396001600160a01b038a166000908152600360205260408120906108016117a2565b6001600160a01b031681526020810191909152604001600020549190611c1a565b6117a6565b5060019392505050565b61dead81565b61083f6117a2565b6001600160a01b0316610850611302565b6001600160a01b03161461087f5760405162461bcd60e51b815260040161087690612d77565b60405180910390fd5b6008805461ff001960ff19909116600117166101001790556040517fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e923906108c7904290612f79565b60405180910390a1565b6000600b548211156108f55760405162461bcd60e51b815260040161087690612bbd565b60006108ff611c46565b905061090b8184613018565b9150505b919050565b601290565b6109216117a2565b6001600160a01b0316610932611302565b6001600160a01b0316146109585760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03811660009081526006602052604090205460ff166109905760405162461bcd60e51b815260040161087690612d09565b60005b600754811015610aea57816001600160a01b0316600782815481106109c857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610ad857600780546109f390600190613057565b81548110610a1157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600780546001600160a01b039092169183908110610a4b57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610ab157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610aea565b80610ae28161306e565b915050610993565b5050565b600061078b610afb6117a2565b848460036000610b096117a2565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546108229190613000565b6000610b476117a2565b6001600160a01b03811660009081526006602052604090205490915060ff1615610b835760405162461bcd60e51b815260040161087690612eec565b6000610b90836001611c69565b80516001600160a01b038416600090815260016020526040902054919250610bb89190611cb1565b6001600160a01b0383166000908152600160205260409020558051600b54610bdf91611cb1565b600b55505050565b610bef6117a2565b6001600160a01b0316610c00611302565b6001600160a01b031614610c265760405162461bcd60e51b815260040161087690612d77565b6008546001600160a01b03828116600160201b909204161415610c4857600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8857600080fd5b505afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc0919061289a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0857600080fd5b505afa158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d40919061289a565b6040518363ffffffff1660e01b8152600401610d5d929190612a26565b60206040518083038186803b158015610d7557600080fd5b505afa158015610d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dad919061289a565b90506001600160a01b038116610f4257816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610df657600080fd5b505afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061289a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7657600080fd5b505afa158015610e8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eae919061289a565b6040518363ffffffff1660e01b8152600401610ecb929190612a26565b602060405180830381600087803b158015610ee557600080fd5b505af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061289a565b600980546001600160a01b0319166001600160a01b0392909216919091179055610f5e565b600980546001600160a01b0319166001600160a01b0383161790555b50600880546001600160a01b03909216600160201b02640100000000600160c01b031990921691909117905550565b610f956117a2565b6001600160a01b0316610fa6611302565b6001600160a01b031614610fcc5760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000600a548311156110145760405162461bcd60e51b815260040161087690612d40565b81611030576000611026846001611c69565b51915061078f9050565b600061103d846001611c69565b60200151915061078f9050565b60085460ff1681565b61105b6117a2565b6001600160a01b031661106c611302565b6001600160a01b0316146110925760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03811660009081526006602052604090205460ff16156110cb5760405162461bcd60e51b815260040161087690612c8f565b6001600160a01b03811660009081526001602052604090205415611125576001600160a01b03811660009081526001602052604090205461110b906108d1565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b031660009081526005602052604090205460ff1690565b6013546001600160a01b031681565b600d5481565b600854610100900460ff1681565b6001600160a01b03811660009081526006602052604081205460ff161561120c57506001600160a01b03811660009081526002602052604090205461090f565b6001600160a01b03821660009081526001602052604090205461078f906108d1565b6112366117a2565b6001600160a01b0316611247611302565b6001600160a01b03161461126d5760405162461bcd60e51b815260040161087690612d77565b6112776000611cbd565b565b6112816117a2565b6001600160a01b0316611292611302565b6001600160a01b0316146112b85760405162461bcd60e51b815260040161087690612d77565b6112d860646112d283600a5461178390919063ffffffff16565b90611796565b600f5550565b600c5481565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b600f5481565b61131f6117a2565b6001600160a01b0316611330611302565b6001600160a01b0316146113565760405162461bcd60e51b815260040161087690612d77565b600880549115156101000261ff0019909216919091179055565b60408051808201909152600b81526a52455354415552414e545360a81b602082015290565b61139d6117a2565b6001600160a01b03166113ae611302565b6001600160a01b0316146113d45760405162461bcd60e51b815260040161087690612d77565b804710156113f45760405162461bcd60e51b815260040161087690612dac565b604051339082156108fc029083906000818181858888f19350505050158015610aea573d6000803e3d6000fd5b600061078b61142e6117a2565b84610822856040518060600160405280602581526020016130eb60259139600360006114586117a2565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611c1a565b6011546001600160a01b031681565b6009546001600160a01b031681565b600061078b6114b46117a2565b848461185a565b6114c36117a2565b6001600160a01b03166114d4611302565b6001600160a01b0316146114fa5760405162461bcd60e51b815260040161087690612d77565b6008805462ff0000198116620100009182900460ff1615909102179055565b6115216117a2565b6001600160a01b0316611532611302565b6001600160a01b0316146115585760405162461bcd60e51b815260040161087690612d77565b6040516370a0823160e01b81526001600160a01b0382169063a9059cbb90339083906370a082319061158e903090600401612a12565b60206040518083038186803b1580156115a657600080fd5b505afa1580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115de91906129a9565b6040518363ffffffff1660e01b81526004016115fb929190612a40565b602060405180830381600087803b15801561161557600080fd5b505af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aea9190612975565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b600e5481565b6116866117a2565b6001600160a01b0316611697611302565b6001600160a01b0316146116bd5760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6010546001600160a01b031681565b6116f56117a2565b6001600160a01b0316611706611302565b6001600160a01b03161461172c5760405162461bcd60e51b815260040161087690612d77565b6001600160a01b0381166117525760405162461bcd60e51b815260040161087690612c07565b61175b81611cbd565b50565b600854600160201b90046001600160a01b031681565b6012546001600160a01b031681565b600061178f8284613038565b9392505050565b600061178f8284613018565b3390565b6001600160a01b0383166117cc5760405162461bcd60e51b815260040161087690612e71565b6001600160a01b0382166117f25760405162461bcd60e51b815260040161087690612c4d565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061184d908590612f79565b60405180910390a3505050565b6001600160a01b0383166118805760405162461bcd60e51b815260040161087690612e2c565b6001600160a01b0382166118a65760405162461bcd60e51b815260040161087690612af2565b600081116118c65760405162461bcd60e51b815260040161087690612de3565b6118cf836111cc565b8111156118ee5760405162461bcd60e51b815260040161087690612b6c565b6001600160a01b03831660009081526005602052604090205460ff1615801561193057506001600160a01b03821660009081526005602052604090205460ff16155b156119575760085460ff166119575760405162461bcd60e51b815260040161087690612b35565b61195f611302565b6001600160a01b0316836001600160a01b0316141580156119995750611983611302565b6001600160a01b0316826001600160a01b031614155b80156119ad57506001600160a01b03821615155b80156119c457506001600160a01b03821661dead14155b80156119dd57506009546001600160a01b038481169116145b15611a6457600c54811115611a045760405162461bcd60e51b815260040161087690612eb5565b6000611a0f836111cc565b600f54909150611a1f8383613000565b11158015611a4657506001600160a01b03841660009081526004602052604090205460ff16155b611a625760405162461bcd60e51b815260040161087690612cc6565b505b611a6c611302565b6001600160a01b0316836001600160a01b031614158015611aa65750611a90611302565b6001600160a01b0316826001600160a01b031614155b8015611aba57506001600160a01b03821615155b8015611ad157506001600160a01b03821661dead14155b8015611aea57506009546001600160a01b038481169116145b15611b1157600d54811115611b115760405162461bcd60e51b815260040161087690612f38565b6000611b1c306111cc565b600e546008549192508210159062010000900460ff16158015611b465750600854610100900460ff165b8015611b4f5750805b8015611b6957506009546001600160a01b03868116911614155b15611b7957611b79600e54611d0d565b6001600160a01b038516600090815260056020526040902054611c139086908690869060ff1680611bc257506001600160a01b03881660009081526005602052604090205460ff165b158015611bf857506009546001600160a01b03898116911614801590611bf657506009546001600160a01b038a8116911614155b155b8015611c0e57506008546301000000900460ff16155b611e73565b5050505050565b60008184841115611c3e5760405162461bcd60e51b81526004016108769190612a9f565b505050900390565b6000806000611c5361210b565b9092509050611c628183613018565b9250505090565b611c71612824565b611c7b83836122c9565b9050611c90818484611c8b611c46565b6123d7565b60a08701526080860152606085015260408401526020830152815292915050565b600061178f8284613057565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805463ff0000001962ff000019909116620100001716630100000017905560408051608081018252601e8152602860208201819052601492820192909252600a606082018190529091600091611d659190613000565b611d70906002613038565b9050600081836060015185611d859190613038565b611d8f9190613018565b90506000611d9d8286613057565b905047611da982612489565b6000611db58247613057565b90506000866060015186611dc99190613057565b611dd39083613018565b90506000876060015182611de79190613038565b90508015611df957611df98682612635565b6020880151600090611e0c846002613038565b611e169190613038565b90508015611e5a576010546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611e58573d6000803e3d6000fd5b505b50506008805463ffff0000191690555050505050505050565b6000611e7f8383611c69565b6001600160a01b03861660009081526006602052604090205490915060ff1615611ee1576001600160a01b038516600090815260026020526040902054611ec7908490613057565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526006602052604090205460ff1615611f445760c08101516001600160a01b038516600090815260026020526040902054611f2a9190613000565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b038616600090815260016020526040902054611f699190613057565b6001600160a01b0380871660009081526001602090815260408083209490945584015191871681529190912054611fa09190613000565b6001600160a01b0385166000908152600160205260409081902091909155810151611fca906126ee565b611fdd8160600151826101000151612708565b611ff08160a00151826101400151612708565b612003816080015182610120015161276d565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161204a9190612f79565b60405180910390a3306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610100015184610140015161209d9190613000565b6040516120aa9190612f79565b60405180910390a361dead6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361012001516040516120fc9190612f79565b60405180910390a35050505050565b600b54600a546000918291825b6007548110156122965782600160006007848154811061214857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806121c1575081600260006007848154811061219a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121d857600b54600a54945094505050506122c5565b60016000600783815481106121fd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461222c9084613057565b9250600260006007838154811061225357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546122829083613057565b91508061228e8161306e565b915050612118565b50600a54600b546122a79190613018565b8210156122bf57600b54600a549350935050506122c5565b90925090505b9091565b6122d1612824565b60408051608081018252601e815260286020820152601491810191909152600a606082015282612308575060c0810183905261078f565b80516103e8906123189086613038565b6123229190613018565b60e083015260208101516103e89061233a9086613038565b6123449190613018565b61010083015260408101516103e89061235d9086613038565b6123679190613018565b61012083015260608101516103e8906123809086613038565b61238a9190613018565b610140830181905261012083015161010084015160e08501516123ad9088613057565b6123b79190613057565b6123c19190613057565b6123cb9190613057565b60c08301525092915050565b600080808080806123e8878a613038565b9550876124035750849350600092508291508190508061247c565b868a60e001516124139190613038565b9350868a61010001516124269190613038565b9250868a61012001516124399190613038565b9150868a610140015161244c9190613038565b905080828461245b878a613057565b6124659190613057565b61246f9190613057565b6124799190613057565b94505b9499939850945094509450565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124cc57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050600860049054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561253a57600080fd5b505afa15801561254e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612572919061289a565b8160018151811061259357634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526008546125c0913091600160201b900416846117a6565b60085460405163791ac94760e01b8152600160201b9091046001600160a01b03169063791ac947906125ff908590600090869030904290600401612f82565b600060405180830381600087803b15801561261957600080fd5b505af115801561262d573d6000803e3d6000fd5b505050505050565b600854612654903090600160201b90046001600160a01b0316846117a6565b600854600160201b90046001600160a01b031663f305d71982308560008061267a611302565b426040518863ffffffff1660e01b815260040161269c96959493929190612a59565b6060604051808303818588803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c1391906129e5565b80600b60008282546127009190613057565b909155505050565b3060009081526006602052604090205460ff161561274557306000908152600260205260408120805483929061273f908490613000565b90915550505b3060009081526001602052604081208054849290612764908490613000565b90915550505050565b61dead60005260066020527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460ff16156127e65761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc80548392906127e0908490613000565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290612764908490613000565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020828403121561288f578081fd5b813561178f8161309f565b6000602082840312156128ab578081fd5b815161178f8161309f565b600080604083850312156128c8578081fd5b82356128d38161309f565b915060208301356128e38161309f565b809150509250929050565b600080600060608486031215612902578081fd5b833561290d8161309f565b9250602084013561291d8161309f565b929592945050506040919091013590565b60008060408385031215612940578182fd5b823561294b8161309f565b946020939093013593505050565b60006020828403121561296a578081fd5b813561178f816130b4565b600060208284031215612986578081fd5b815161178f816130b4565b6000602082840312156129a2578081fd5b5035919050565b6000602082840312156129ba578081fd5b5051919050565b600080604083850312156129d3578182fd5b8235915060208301356128e3816130b4565b6000806000606084860312156129f9578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612acb57858101830151858201604001528201612aaf565b81811115612adc5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601a908201527f54726164696e67206973206e6f7420656e61626c656420796574000000000000604082015260600190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526023908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152621d5b9d60ea1b606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526018908201527f696e73756666696369656e74204554482062616c616e63650000000000000000604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f796f752061726520657863656564696e67206d6178427579416d6f756e740000604082015260600190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b60208082526021908201527f416d6f756e7420697320657863656564696e67206d617853656c6c416d6f756e6040820152601d60fa1b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612fd15784516001600160a01b031683529383019391830191600101612fac565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b6000821982111561301357613013613089565b500190565b60008261303357634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561305257613052613089565b500290565b60008282101561306957613069613089565b500390565b600060001982141561308257613082613089565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461175b57600080fd5b801515811461175b57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207252393e54ce98f39e19bd29026a08e8c0ce002b11817c482b273e056ee66b6664736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

10026:20828:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13908:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14916:193;;;;;;;;;;-1:-1:-1;14916:193:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11582:86::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14208:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15117:446::-;;;;;;;;;;-1:-1:-1;15117:446:0;;;;;:::i;:::-;;:::i;11677:89::-;;;;;;;;;;;;;:::i;17300:159::-;;;;;;;;;;;;;:::i;:::-;;17467:319;;;;;;;;;;-1:-1:-1;17467:319:0;;;;;:::i;:::-;;:::i;14094:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18200:473::-;;;;;;;;;;-1:-1:-1;18200:473:0;;;;;:::i;:::-;;:::i;15571:297::-;;;;;;;;;;-1:-1:-1;15571:297:0;;;;;:::i;:::-;;:::i;16412:383::-;;;;;;;;;;-1:-1:-1;16412:383:0;;;;;:::i;:::-;;:::i;30231:583::-;;;;;;;;;;-1:-1:-1;30231:583:0;;;;;:::i;:::-;;:::i;18681:111::-;;;;;;;;;;-1:-1:-1;18681:111:0;;;;;:::i;:::-;;:::i;16803:489::-;;;;;;;;;;-1:-1:-1;16803:489:0;;;;;:::i;:::-;;:::i;10534:26::-;;;;;;;;;;;;;:::i;17860:332::-;;;;;;;;;;-1:-1:-1;17860:332:0;;;;;:::i;:::-;;:::i;18918:124::-;;;;;;;;;;-1:-1:-1;18918:124:0;;;;;:::i;:::-;;:::i;11480:93::-;;;;;;;;;;;;;:::i;10999:54::-;;;;;;;;;;;;;:::i;10567:23::-;;;;;;;;;;;;;:::i;14311:198::-;;;;;;;;;;-1:-1:-1;14311:198:0;;;;;:::i;:::-;;:::i;8308:94::-;;;;;;;;;;;;;:::i;19050:146::-;;;;;;;;;;-1:-1:-1;19050:146:0;;;;;:::i;:::-;;:::i;10939:53::-;;;;;;;;;;;;;:::i;16284:120::-;;;;;;;;;;-1:-1:-1;16284:120:0;;;;;:::i;:::-;;:::i;8085:87::-;;;;;;;;;;;;;:::i;11132:55::-;;;;;;;;;;;;;:::i;29421:102::-;;;;;;;;;;-1:-1:-1;29421:102:0;;;;;:::i;:::-;;:::i;13999:87::-;;;;;;;;;;;;;:::i;29741:197::-;;;;;;;;;;-1:-1:-1;29741:197:0;;;;;:::i;:::-;;:::i;15876:400::-;;;;;;;;;;-1:-1:-1;15876:400:0;;;;;:::i;:::-;;:::i;11291:85::-;;;;;;;;;;;;;:::i;10693:19::-;;;;;;;;;;;;;:::i;14517:199::-;;;;;;;;;;-1:-1:-1;14517:199:0;;;;;:::i;:::-;;:::i;29589:80::-;;;;;;;;;;;;;:::i;29946:212::-;;;;;;;;;;-1:-1:-1;29946:212:0;;;;;:::i;:::-;;:::i;14724:184::-;;;;;;;;;;-1:-1:-1;14724:184:0;;;;;:::i;:::-;;:::i;11060:65::-;;;;;;;;;;;;;:::i;18800:110::-;;;;;;;;;;-1:-1:-1;18800:110:0;;;;;:::i;:::-;;:::i;11196:86::-;;;;;;;;;;;;;:::i;8410:229::-;;;;;;;;;;-1:-1:-1;8410:229:0;;;;;:::i;:::-;;:::i;10665:21::-;;;;;;;;;;;;;:::i;11385:86::-;;;;;;;;;;;;;:::i;13908:83::-;13978:5;;;;;;;;;;;;-1:-1:-1;;;13978:5:0;;;;13908:83;:::o;14916:193::-;15018:4;15040:39;15049:12;:10;:12::i;:::-;15063:7;15072:6;15040:8;:39::i;:::-;-1:-1:-1;15097:4:0;14916:193;;;;;:::o;11582:86::-;;;-1:-1:-1;;;;;11582:86:0;;:::o;14208:95::-;14288:7;;14208:95;:::o;15117:446::-;15249:4;15266:36;15276:6;15284:9;15295:6;15266:9;:36::i;:::-;15313:220;15336:6;15357:12;:10;:12::i;:::-;15384:138;15440:6;15384:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15384:19:0;;;;;;:11;:19;;;;;;15404:12;:10;:12::i;:::-;-1:-1:-1;;;;;15384:33:0;;;;;;;;;;;;-1:-1:-1;15384:33:0;;;:138;:37;:138::i;:::-;15313:8;:220::i;:::-;-1:-1:-1;15551:4:0;15117:446;;;;;:::o;11677:89::-;11724:42;11677:89;:::o;17300:159::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;;;;;;;;;17354:14:::1;:21:::0;;-1:-1:-1;;;;17354:21:0;;::::1;17371:4;17354:21;17386:18;17354:21;17386:18;::::0;;17420:31:::1;::::0;::::1;::::0;::::1;::::0;17435:15:::1;::::0;17420:31:::1;:::i;:::-;;;;;;;;17300:159::o:0;17467:319::-;17561:7;17619;;17608;:18;;17586:110;;;;-1:-1:-1;;;17586:110:0;;;;;;;:::i;:::-;17707:19;17729:10;:8;:10::i;:::-;17707:32;-1:-1:-1;17757:21:0;17707:32;17757:7;:21;:::i;:::-;17750:28;;;17467:319;;;;:::o;14094:83::-;10756:2;14094:83;:::o;18200:473::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18280:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18272:56;;;;-1:-1:-1::0;;;18272:56:0::1;;;;;;;:::i;:::-;18344:9;18339:327;18363:9;:16:::0;18359:20;::::1;18339:327;;;18421:7;-1:-1:-1::0;;;;;18405:23:0::1;:9;18415:1;18405:12;;;;;;-1:-1:-1::0;;;18405:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18405:12:0::1;:23;18401:254;;;18464:9;18474:16:::0;;:20:::1;::::0;18493:1:::1;::::0;18474:20:::1;:::i;:::-;18464:31;;;;;;-1:-1:-1::0;;;18464:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;18449:9:::1;:12:::0;;-1:-1:-1;;;;;18464:31:0;;::::1;::::0;18459:1;;18449:12;::::1;;;-1:-1:-1::0;;;18449:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;18449:46:0::1;-1:-1:-1::0;;;;;18449:46:0;;::::1;;::::0;;18514:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;18553:11:::1;:20:::0;;;;:28;;-1:-1:-1;;18553:28:0::1;::::0;;18600:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;18600:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18600:15:0;;;;;-1:-1:-1;;;;;;18600:15:0::1;::::0;;;;;18634:5:::1;;18401:254;18381:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18339:327;;;;18200:473:::0;:::o;15571:297::-;15686:4;15708:130;15731:12;:10;:12::i;:::-;15758:7;15817:10;15780:11;:25;15792:12;:10;:12::i;:::-;-1:-1:-1;;;;;15780:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;15780:25:0;;;:34;;;;;;;;;;:47;;;;:::i;16412:383::-;16464:14;16481:12;:10;:12::i;:::-;-1:-1:-1;;;;;16527:19:0;;;;;;:11;:19;;;;;;16464:29;;-1:-1:-1;16527:19:0;;16526:20;16504:114;;;;-1:-1:-1;;;16504:114:0;;;;;;;:::i;:::-;16629:28;16660:25;16671:7;16680:4;16660:10;:25::i;:::-;16734:9;;-1:-1:-1;;;;;16714:15:0;;16734:9;16714:15;;;:7;:15;;;;;;16629:56;;-1:-1:-1;16714:30:0;;:15;:19;:30::i;:::-;-1:-1:-1;;;;;16696:15:0;;;;;;:7;:15;;;;;:48;16777:9;;16765:7;;:22;;:11;:22::i;:::-;16755:7;:32;-1:-1:-1;;;16412:383:0:o;30231:583::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;30335:6:::1;::::0;-1:-1:-1;;;;;30314:28:0;;::::1;-1:-1:-1::0;;;30335:6:0;;::::1;;30314:28;;30306:37;;;::::0;::::1;;30354:18;30383:9;30354:39;;30404:16;30432:10;-1:-1:-1::0;;;;;30432:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30423:38:0::1;;30484:4;30504:10;-1:-1:-1::0;;;;;30504:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30423:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30404:128:::0;-1:-1:-1;;;;;;30547:22:0;::::1;30543:234;;30602:10;-1:-1:-1::0;;;;;30602:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30593:41:0::1;;30661:4;30685:10;-1:-1:-1::0;;;;;30685:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30593:124;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30586:4;:131:::0;;-1:-1:-1;;;;;;30586:131:0::1;-1:-1:-1::0;;;;;30586:131:0;;;::::1;::::0;;;::::1;::::0;;30543:234:::1;;;30750:4;:15:::0;;-1:-1:-1;;;;;;30750:15:0::1;-1:-1:-1::0;;;;;30750:15:0;::::1;;::::0;;30543:234:::1;-1:-1:-1::0;30787:6:0::1;:19:::0;;-1:-1:-1;;;;;30787:19:0;;::::1;-1:-1:-1::0;;;30787:19:0::1;-1:-1:-1::0;;;;;;30787:19:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;30231:583:0:o;18681:111::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18750:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;18750:34:0::1;18780:4;18750:34;::::0;;18681:111::o;16803:489::-;16921:7;16965;;16954;:18;;16946:62;;;;-1:-1:-1;;;16946:62:0;;;;;;;:::i;:::-;17024:17;17019:266;;17058:28;17089:25;17100:7;17109:4;17089:10;:25::i;:::-;17136:9;;-1:-1:-1;17129:16:0;;-1:-1:-1;17129:16:0;17019:266;17178:28;17209:25;17220:7;17229:4;17209:10;:25::i;:::-;17256:17;;;;-1:-1:-1;17249:24:0;;-1:-1:-1;17249:24:0;10534:26;;;;;;:::o;17860:332::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17941:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17940:21;17932:61;;;;-1:-1:-1::0;;;17932:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18008:16:0;::::1;18027:1;18008:16:::0;;;:7:::1;:16;::::0;;;;;:20;18004:109:::1;;-1:-1:-1::0;;;;;18084:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18064:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18045:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18004:109:::1;-1:-1:-1::0;;;;;18123:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18123:27:0::1;18146:4;18123:27:::0;;::::1;::::0;;;18161:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;18161:23:0::1;::::0;;::::1;::::0;;17860:332::o;18918:124::-;-1:-1:-1;;;;;19007:27:0;18983:4;19007:27;;;:18;:27;;;;;;;;;18918:124::o;11480:93::-;;;-1:-1:-1;;;;;11480:93:0;;:::o;10999:54::-;;;;:::o;10567:23::-;;;;;;;;;:::o;14311:198::-;-1:-1:-1;;;;;14401:20:0;;14377:7;14401:20;;;:11;:20;;;;;;;;14397:49;;;-1:-1:-1;;;;;;14430:16:0;;;;;;:7;:16;;;;;;14423:23;;14397:49;-1:-1:-1;;;;;14484:16:0;;;;;;:7;:16;;;;;;14464:37;;:19;:37::i;8308:94::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;8373:21:::1;8391:1;8373:9;:21::i;:::-;8308:94::o:0;19050:146::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;19150:38:::1;19182:5;19150:27;19162:14;19150:7;;:11;;:27;;;;:::i;:::-;:31:::0;::::1;:38::i;:::-;19133:14;:55:::0;-1:-1:-1;19050:146:0:o;10939:53::-;;;;:::o;16284:120::-;-1:-1:-1;;;;;16376:20:0;16352:4;16376:20;;;:11;:20;;;;;;;;;16284:120::o;8085:87::-;8131:7;8158:6;-1:-1:-1;;;;;8158:6:0;8085:87;:::o;11132:55::-;;;;:::o;29421:102::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;29493:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;29493:22:0;;::::1;::::0;;;::::1;::::0;;29421:102::o;13999:87::-;14071:7;;;;;;;;;;;;-1:-1:-1;;;14071:7:0;;;;13999:87;:::o;29741:197::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;29842:9:::1;29817:21;:34;;29809:71;;;;-1:-1:-1::0;;;29809:71:0::1;;;;;;;:::i;:::-;29891:39;::::0;29899:10:::1;::::0;29891:39;::::1;;;::::0;29920:9;;29891:39:::1;::::0;;;29920:9;29899:10;29891:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;15876:400:::0;15996:4;16018:228;16041:12;:10;:12::i;:::-;16068:7;16090:145;16147:15;16090:145;;;;;;;;;;;;;;;;;:11;:25;16102:12;:10;:12::i;:::-;-1:-1:-1;;;;;16090:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;16090:25:0;;;:34;;;;;;;;;;;:145;:38;:145::i;11291:85::-;;;-1:-1:-1;;;;;11291:85:0;;:::o;10693:19::-;;;-1:-1:-1;;;;;10693:19:0;;:::o;14517:199::-;14622:4;14644:42;14654:12;:10;:12::i;:::-;14668:9;14679:6;14644:9;:42::i;29589:80::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;29653:8:::1;::::0;;-1:-1:-1;;29641:20:0;::::1;29653:8:::0;;;;::::1;;;29652:9;29641:20:::0;;::::1;;::::0;;29589:80::o;29946:212::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;30094:45:::1;::::0;-1:-1:-1;;;30094:45:0;;-1:-1:-1;;;;;30025:29:0;::::1;::::0;::::1;::::0;30069:10:::1;::::0;30025:29;;30094:30:::1;::::0;:45:::1;::::0;30133:4:::1;::::0;30094:45:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30025:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14724:184::-:0;-1:-1:-1;;;;;14873:18:0;;;14841:7;14873:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14724:184::o;11060:65::-;;;;:::o;18800:110::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18867:27:0::1;18897:5;18867:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;18867:35:0::1;::::0;;18800:110::o;11196:86::-;;;-1:-1:-1;;;;;11196:86:0;;:::o;8410:229::-;8231:12;:10;:12::i;:::-;-1:-1:-1;;;;;8220:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8220:23:0;;8212:68;;;;-1:-1:-1;;;8212:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8513:22:0;::::1;8491:110;;;;-1:-1:-1::0;;;8491:110:0::1;;;;;;;:::i;:::-;8612:19;8622:8;8612:9;:19::i;:::-;8410:229:::0;:::o;10665:21::-;;;-1:-1:-1;;;10665:21:0;;-1:-1:-1;;;;;10665:21:0;;:::o;11385:86::-;;;-1:-1:-1;;;;;11385:86:0;;:::o;2382:98::-;2440:7;2467:5;2471:1;2467;:5;:::i;:::-;2460:12;2382:98;-1:-1:-1;;;2382:98:0:o;2488:::-;2546:7;2573:5;2577:1;2573;:5;:::i;3474:98::-;3554:10;3474:98;:::o;22998:369::-;-1:-1:-1;;;;;23125:19:0;;23117:68;;;;-1:-1:-1;;;23117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23204:21:0;;23196:68;;;;-1:-1:-1;;;23196:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23275:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;23327:32;;;;;23305:6;;23327:32;:::i;:::-;;;;;;;;22998:369;;;:::o;23375:2019::-;-1:-1:-1;;;;;23497:18:0;;23489:68;;;;-1:-1:-1;;;23489:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23576:16:0;;23568:64;;;;-1:-1:-1;;;23568:64:0;;;;;;;:::i;:::-;23660:1;23651:6;:10;23643:64;;;;-1:-1:-1;;;23643:64:0;;;;;;;:::i;:::-;23750:15;23760:4;23750:9;:15::i;:::-;23740:6;:25;;23718:124;;;;-1:-1:-1;;;23718:124:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23860:24:0;;;;;;:18;:24;;;;;;;;23859:25;:52;;;;-1:-1:-1;;;;;;23889:22:0;;;;;;:18;:22;;;;;;;;23888:23;23859:52;23855:138;;;23936:14;;;;23928:53;;;;-1:-1:-1;;;23928:53:0;;;;;;;:::i;:::-;24031:7;:5;:7::i;:::-;-1:-1:-1;;;;;24023:15:0;:4;-1:-1:-1;;;;;24023:15:0;;;:45;;;;;24061:7;:5;:7::i;:::-;-1:-1:-1;;;;;24055:13:0;:2;-1:-1:-1;;;;;24055:13:0;;;24023:45;:78;;;;-1:-1:-1;;;;;;24085:16:0;;;;24023:78;:116;;;;-1:-1:-1;;;;;;24118:21:0;;24132:6;24118:21;;24023:116;:145;;;;-1:-1:-1;24164:4:0;;-1:-1:-1;;;;;24156:12:0;;;24164:4;;24156:12;24023:145;24005:541;;;24213:12;;24203:6;:22;;24195:65;;;;-1:-1:-1;;;24195:65:0;;;;;;;:::i;:::-;24275:28;24306:13;24316:2;24306:9;:13::i;:::-;24393:14;;24275:44;;-1:-1:-1;24360:29:0;24383:6;24275:44;24360:29;:::i;:::-;:47;;:103;;;;-1:-1:-1;;;;;;24433:30:0;;;;;;:24;:30;;;;;;;;24432:31;24360:103;24334:200;;;;-1:-1:-1;;;24334:200:0;;;;;;;:::i;:::-;24005:541;;24584:7;:5;:7::i;:::-;-1:-1:-1;;;;;24576:15:0;:4;-1:-1:-1;;;;;24576:15:0;;;:45;;;;;24614:7;:5;:7::i;:::-;-1:-1:-1;;;;;24608:13:0;:2;-1:-1:-1;;;;;24608:13:0;;;24576:45;:78;;;;-1:-1:-1;;;;;;24638:16:0;;;;24576:78;:116;;;;-1:-1:-1;;;;;;24671:21:0;;24685:6;24671:21;;24576:116;:145;;;;-1:-1:-1;24717:4:0;;-1:-1:-1;;;;;24709:12:0;;;24717:4;;24709:12;24576:145;24558:320;;;24784:13;;24774:6;:23;;24748:118;;;;-1:-1:-1;;;24748:118:0;;;;;;;:::i;:::-;24890:28;24921:24;24939:4;24921:9;:24::i;:::-;24995:18;;25029:8;;24890:55;;-1:-1:-1;24971:42:0;;;;25029:8;;;;;25028:9;:24;;;;-1:-1:-1;25041:11:0;;;;;;;25028:24;:35;;;;;25056:7;25028:35;:51;;;;-1:-1:-1;25075:4:0;;-1:-1:-1;;;;;25067:12:0;;;25075:4;;25067:12;;25028:51;25024:118;;;25096:34;25111:18;;25096:14;:34::i;:::-;-1:-1:-1;;;;;25242:24:0;;;;;;:18;:24;;;;;;25154:232;;25183:4;;25202:2;;25219:6;;25242:24;;;:50;;-1:-1:-1;;;;;;25270:22:0;;;;;;:18;:22;;;;;;;;25242:50;25240:53;:103;;;;-1:-1:-1;25322:4:0;;-1:-1:-1;;;;;25316:10:0;;;25322:4;;25316:10;;;;:26;;-1:-1:-1;25338:4:0;;-1:-1:-1;;;;;25330:12:0;;;25338:4;;25330:12;;25316:26;25314:29;25240:103;:135;;;;-1:-1:-1;25365:10:0;;;;;;;25364:11;25240:135;25154:14;:232::i;:::-;23375:2019;;;;;:::o;2700:240::-;2820:7;2881:12;2873:6;;;;2865:29;;;;-1:-1:-1;;;2865:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2916:5:0;;;2700:240::o;22225:161::-;22267:7;22288:15;22305;22324:19;:17;:19::i;:::-;22287:56;;-1:-1:-1;22287:56:0;-1:-1:-1;22361:17:0;22287:56;;22361:17;:::i;:::-;22354:24;;;;22225:161;:::o;19983:509::-;20083:36;;:::i;:::-;20149:29;20161:7;20170;20149:11;:29::i;:::-;20137:41;;20405:52;20417:9;20428:7;20437;20446:10;:8;:10::i;:::-;20405:11;:52::i;:::-;20371:20;;;20189:268;20341:15;;;20189:268;20305:21;;;20189:268;20276:14;;;20189:268;20236:25;;;20189:268;;;19983:509;;;;:::o;2276:98::-;2334:7;2361:5;2365:1;2361;:5;:::i;8647:173::-;8703:16;8722:6;;-1:-1:-1;;;;;8739:17:0;;;-1:-1:-1;;;;;;8739:17:0;;;;;;8772:40;;8722:6;;;;;;;8772:40;;8703:16;8772:40;8647:173;;:::o;27025:1315::-;12455:8;:15;;-1:-1:-1;;;;12455:15:0;;;;;27096:17:::1;::::0;::::1;::::0;;27157:129:::1;::::0;;::::1;::::0;::::1;::::0;;27192:2:::1;27157:129:::0;;27221:2:::1;27157:129;::::0;::::1;::::0;;;27244:2:::1;27157:129:::0;;;;;;;27272:2:::1;27157:129:::0;;;;;;;;12455:15;;27371:40:::1;::::0;27221:2;27371:40:::1;:::i;:::-;27370:46;::::0;27415:1:::1;27370:46;:::i;:::-;27348:68;;27427:32;27507:11;27472:8;:18;;;27463:6;:27;;;;:::i;:::-;27462:56;;;;:::i;:::-;27427:91:::0;-1:-1:-1;27529:14:0::1;27546:33;27427:91:::0;27546:6;:33:::1;:::i;:::-;27529:50:::0;-1:-1:-1;27617:21:0::1;27651:24;27529:50:::0;27651:16:::1;:24::i;:::-;27688:20;27711:38;27735:14:::0;27711:21:::1;:38;:::i;:::-;27688:61;;27760:19;27812:8;:18;;;27798:11;:32;;;;:::i;:::-;27782:49;::::0;:12;:49:::1;:::i;:::-;27760:71;;27842:29;27888:8;:18;;;27874:11;:32;;;;:::i;:::-;27842:64:::0;-1:-1:-1;27923:25:0;;27919:160:::1;;28006:61;28019:24;28045:21;28006:12;:61::i;:::-;28174:19;::::0;::::1;::::0;28132:21:::1;::::0;28156:15:::1;:11:::0;28170:1:::1;28156:15;:::i;:::-;:37;;;;:::i;:::-;28132:61:::0;-1:-1:-1;28208:17:0;;28204:100:::1;;28250:17;::::0;28242:50:::1;::::0;-1:-1:-1;;;;;28250:17:0;;::::1;::::0;28242:50;::::1;;;::::0;28278:13;;28250:17:::1;28242:50:::0;28250:17;28242:50;28278:13;28250:17;28242:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28204:100;-1:-1:-1::0;;28314:10:0::1;:18:::0;;-1:-1:-1;;12493:16:0;;;-1:-1:-1;;;;;;;;27025:1315:0:o;25475:1004::-;25627:28;25658;25669:7;25678;25658:10;:28::i;:::-;-1:-1:-1;;;;;25703:19:0;;;;;;:11;:19;;;;;;25627:59;;-1:-1:-1;25703:19:0;;25699:124;;;-1:-1:-1;;;;;25786:15:0;;;;;;:7;:15;;;;;;:25;;25804:7;;25786:25;:::i;:::-;-1:-1:-1;;;;;25768:15:0;;;;;;:7;:15;;;;;:43;25699:124;-1:-1:-1;;;;;25837:22:0;;;;;;:11;:22;;;;;;;;25833:141;;;25945:17;;;;-1:-1:-1;;;;;25924:18:0;;;;;;:7;:18;;;;;;:38;;25945:17;25924:38;:::i;:::-;-1:-1:-1;;;;;25903:18:0;;;;;;:7;:18;;;;;:59;25833:141;26022:9;;-1:-1:-1;;;;;26004:15:0;;26022:9;26004:15;;;:7;:15;;;;;;:27;;26022:9;26004:27;:::i;:::-;-1:-1:-1;;;;;25986:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;26084:17;;;26063:18;;;;;;;;;;:38;;26084:17;26063:38;:::i;:::-;-1:-1:-1;;;;;26042:18:0;;;;;;:7;:18;;;;;;;:59;;;;26124:6;;;26112:19;;:11;:19::i;:::-;26142:45;26158:1;:13;;;26173:1;:13;;;26142:15;:45::i;:::-;26198:42;26213:1;:12;;;26227:1;:12;;;26198:14;:42::i;:::-;26251:27;26261:1;:7;;;26270:1;:7;;;26251:9;:27::i;:::-;26311:9;-1:-1:-1;;;;;26294:46:0;26303:6;-1:-1:-1;;;;;26294:46:0;;26322:1;:17;;;26294:46;;;;;;:::i;:::-;;;;;;;;26381:4;-1:-1:-1;;;;;26356:61:0;26365:6;-1:-1:-1;;;;;26356:61:0;;26403:1;:13;;;26388:1;:12;;;:28;;;;:::i;:::-;26356:61;;;;;;:::i;:::-;;;;;;;;11724:42;-1:-1:-1;;;;;26433:38:0;26442:6;-1:-1:-1;;;;;26433:38:0;;26463:1;:7;;;26433:38;;;;;;:::i;:::-;;;;;;;;25475:1004;;;;;:::o;22394:596::-;22492:7;;22528;;22445;;;;;22546:332;22570:9;:16;22566:20;;22546:332;;;22654:7;22630;:21;22638:9;22648:1;22638:12;;;;;;-1:-1:-1;;;22638:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22638:12:0;22630:21;;;;;;;;;;;;;:31;;:83;;;22706:7;22682;:21;22690:9;22700:1;22690:12;;;;;;-1:-1:-1;;;22690:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22690:12:0;22682:21;;;;;;;;;;;;;:31;22630:83;22608:146;;;22737:7;;22746;;22729:25;;;;;;;;;22608:146;22789:7;:21;22797:9;22807:1;22797:12;;;;;;-1:-1:-1;;;22797:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22797:12:0;22789:21;;;;;;;;;;;;;22779:31;;:7;:31;:::i;:::-;22769:41;;22845:7;:21;22853:9;22863:1;22853:12;;;;;;-1:-1:-1;;;22853:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22853:12:0;22845:21;;;;;;;;;;;;;22835:31;;:7;:31;:::i;:::-;22825:41;-1:-1:-1;22588:3:0;;;;:::i;:::-;;;;22546:332;;;;22912:7;;22902;;:17;;;;:::i;:::-;22892:7;:27;22888:58;;;22929:7;;22938;;22921:25;;;;;;;;22888:58;22965:7;;-1:-1:-1;22974:7:0;-1:-1:-1;22394:596:0;;;:::o;20500:826::-;20601:28;;:::i;:::-;20680:129;;;;;;;;20715:2;20680:129;;20744:2;20680:129;;;;20767:2;20680:129;;;;;;;20795:2;20680:129;;;;20827:7;20822:91;;-1:-1:-1;20851:17:0;;;:27;;;20893:8;;20822:91;20943:12;;20959:4;;20933:22;;:7;:22;:::i;:::-;20932:31;;;;:::i;:::-;20923:6;;;:40;21001:19;;;;21024:4;;20991:29;;:7;:29;:::i;:::-;20990:38;;;;:::i;:::-;20974:13;;;:54;21060:13;;;;21077:4;;21050:23;;:7;:23;:::i;:::-;21049:32;;;;:::i;:::-;21039:7;;;:42;21118:18;;;;21140:4;;21108:28;;:7;:28;:::i;:::-;21107:37;;;;:::i;:::-;21092:12;;;:52;;;21262:7;;;;21233:13;;;;21211:6;;;;21188:29;;:7;:29;:::i;:::-;:58;;;;:::i;:::-;:81;;;;:::i;:::-;:109;;;;:::i;:::-;21155:17;;;:142;-1:-1:-1;20500:826:0;;;;:::o;21334:883::-;21543:15;;;;;;21756:21;21766:11;21756:7;:21;:::i;:::-;21746:31;;21795:7;21790:78;;-1:-1:-1;21827:7:0;;-1:-1:-1;21845:1:0;;-1:-1:-1;21845:1:0;;-1:-1:-1;21845:1:0;;-1:-1:-1;21845:1:0;21819:37;;21790:78;21896:11;21887:1;:6;;;:20;;;;:::i;:::-;21880:27;;21948:11;21932:1;:13;;;:27;;;;:::i;:::-;21918:41;;21988:11;21978:1;:7;;;:21;;;;:::i;:::-;21970:29;;22038:11;22023:1;:12;;;:26;;;;:::i;:::-;22010:39;-1:-1:-1;22010:39:0;22109:5;22095:11;22078:14;22088:4;22078:7;:14;:::i;:::-;:28;;;;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;22060:67;;21334:883;;;;;;;;;;;;:::o;28851:562::-;29001:16;;;29015:1;29001:16;;;;;;;;28977:21;;29001:16;;;;;;;;;;-1:-1:-1;29001:16:0;28977:40;;29046:4;29028;29033:1;29028:7;;;;;;-1:-1:-1;;;29028:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;29028:23:0;;;-1:-1:-1;;;;;29028:23:0;;;;;29072:6;;;;;;;;;-1:-1:-1;;;;;29072:6:0;-1:-1:-1;;;;;29072:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29062:4;29067:1;29062:7;;;;;;-1:-1:-1;;;29062:7:0;;;;;;;;;-1:-1:-1;;;;;29062:23:0;;;:7;;;;;;;;;:23;29130:6;;29098:53;;29115:4;;-1:-1:-1;;;29130:6:0;;;29139:11;29098:8;:53::i;:::-;29190:6;;:215;;-1:-1:-1;;;29190:215:0;;-1:-1:-1;;;29190:6:0;;;-1:-1:-1;;;;;29190:6:0;;:57;;:215;;29262:11;;29288:1;;29332:4;;29359;;29379:15;;29190:6;:215;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28851:562;;:::o;28348:495::-;28528:6;;28496:53;;28513:4;;-1:-1:-1;;;28528:6:0;;-1:-1:-1;;;;;28528:6:0;28537:11;28496:8;:53::i;:::-;28592:6;;-1:-1:-1;;;28592:6:0;;-1:-1:-1;;;;;28592:6:0;:22;28622:9;28655:4;28675:11;28701:1;;28787:7;:5;:7::i;:::-;28809:15;28592:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19204:77::-;19269:4;19258:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;19204:77:0:o;19289:237::-;19399:4;19379:26;;;;:11;:26;;;;;;;;19375:96;;;19438:4;19422:22;;;;:7;:22;;;;;:37;;19448:11;;19422:22;:37;;19448:11;;19422:37;:::i;:::-;;;;-1:-1:-1;;19375:96:0;19497:4;19481:22;;;;:7;:22;;;;;:37;;19507:11;;19481:22;:37;;19507:11;;19481:37;:::i;:::-;;;;-1:-1:-1;;;;19289:237:0:o;19774:201::-;11724:42;19846:24;;:11;:24;;;;;;19842:86;;;11724:42;19887:20;;;;:7;:20;;;:29;;19911:5;;19887:20;:29;;19911:5;;19887:29;:::i;:::-;;;;-1:-1:-1;;19842:86:0;11724:42;19938:20;;;;:7;:20;;;:29;;19962:5;;19938:20;:29;;19962:5;;19938:29;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:327::-;;;1557:2;1545:9;1536:7;1532:23;1528:32;1525:2;;;1578:6;1570;1563:22;1525:2;1622:9;1609:23;1641:33;1668:5;1641:33;:::i;:::-;1693:5;1745:2;1730:18;;;;1717:32;;-1:-1:-1;;;1515:240:1:o;1760:253::-;;1869:2;1857:9;1848:7;1844:23;1840:32;1837:2;;;1890:6;1882;1875:22;1837:2;1934:9;1921:23;1953:30;1977:5;1953:30;:::i;2018:257::-;;2138:2;2126:9;2117:7;2113:23;2109:32;2106:2;;;2159:6;2151;2144:22;2106:2;2196:9;2190:16;2215:30;2239:5;2215:30;:::i;2280:190::-;;2392:2;2380:9;2371:7;2367:23;2363:32;2360:2;;;2413:6;2405;2398:22;2360:2;-1:-1:-1;2441:23:1;;2350:120;-1:-1:-1;2350:120:1:o;2475:194::-;;2598:2;2586:9;2577:7;2573:23;2569:32;2566:2;;;2619:6;2611;2604:22;2566:2;-1:-1:-1;2647:16:1;;2556:113;-1:-1:-1;2556:113:1:o;2674:321::-;;;2800:2;2788:9;2779:7;2775:23;2771:32;2768:2;;;2821:6;2813;2806:22;2768:2;2862:9;2849:23;2839:33;;2922:2;2911:9;2907:18;2894:32;2935:30;2959:5;2935:30;:::i;3000:316::-;;;;3157:2;3145:9;3136:7;3132:23;3128:32;3125:2;;;3178:6;3170;3163:22;3125:2;3212:9;3206:16;3196:26;;3262:2;3251:9;3247:18;3241:25;3231:35;;3306:2;3295:9;3291:18;3285:25;3275:35;;3115:201;;;;;:::o;3321:203::-;-1:-1:-1;;;;;3485:32:1;;;;3467:51;;3455:2;3440:18;;3422:102::o;3529:304::-;-1:-1:-1;;;;;3759:15:1;;;3741:34;;3811:15;;3806:2;3791:18;;3784:43;3691:2;3676:18;;3658:175::o;3838:274::-;-1:-1:-1;;;;;4030:32:1;;;;4012:51;;4094:2;4079:18;;4072:34;4000:2;3985:18;;3967:145::o;4117:607::-;-1:-1:-1;;;;;4476:15:1;;;4458:34;;4523:2;4508:18;;4501:34;;;;4566:2;4551:18;;4544:34;;;;4609:2;4594:18;;4587:34;;;;4658:15;;;4652:3;4637:19;;4630:44;4438:3;4690:19;;4683:35;;;;4407:3;4392:19;;4374:350::o;4729:187::-;4894:14;;4887:22;4869:41;;4857:2;4842:18;;4824:92::o;5144:603::-;;5285:2;5314;5303:9;5296:21;5346:6;5340:13;5389:6;5384:2;5373:9;5369:18;5362:34;5414:4;5427:140;5441:6;5438:1;5435:13;5427:140;;;5536:14;;;5532:23;;5526:30;5502:17;;;5521:2;5498:26;5491:66;5456:10;;5427:140;;;5585:6;5582:1;5579:13;5576:2;;;5655:4;5650:2;5641:6;5630:9;5626:22;5622:31;5615:45;5576:2;-1:-1:-1;5731:2:1;5710:15;-1:-1:-1;;5706:29:1;5691:45;;;;5738:2;5687:54;;5265:482;-1:-1:-1;;;5265:482:1:o;5752:399::-;5954:2;5936:21;;;5993:2;5973:18;;;5966:30;6032:34;6027:2;6012:18;;6005:62;-1:-1:-1;;;6098:2:1;6083:18;;6076:33;6141:3;6126:19;;5926:225::o;6156:350::-;6358:2;6340:21;;;6397:2;6377:18;;;6370:30;6436:28;6431:2;6416:18;;6409:56;6497:2;6482:18;;6330:176::o;6511:413::-;6713:2;6695:21;;;6752:2;6732:18;;;6725:30;6791:34;6786:2;6771:18;;6764:62;-1:-1:-1;;;6857:2:1;6842:18;;6835:47;6914:3;6899:19;;6685:239::o;6929:406::-;7131:2;7113:21;;;7170:2;7150:18;;;7143:30;7209:34;7204:2;7189:18;;7182:62;-1:-1:-1;;;7275:2:1;7260:18;;7253:40;7325:3;7310:19;;7103:232::o;7340:402::-;7542:2;7524:21;;;7581:2;7561:18;;;7554:30;7620:34;7615:2;7600:18;;7593:62;-1:-1:-1;;;7686:2:1;7671:18;;7664:36;7732:3;7717:19;;7514:228::o;7747:398::-;7949:2;7931:21;;;7988:2;7968:18;;;7961:30;8027:34;8022:2;8007:18;;8000:62;-1:-1:-1;;;8093:2:1;8078:18;;8071:32;8135:3;8120:19;;7921:224::o;8150:351::-;8352:2;8334:21;;;8391:2;8371:18;;;8364:30;8430:29;8425:2;8410:18;;8403:57;8492:2;8477:18;;8324:177::o;8506:399::-;8708:2;8690:21;;;8747:2;8727:18;;;8720:30;8786:34;8781:2;8766:18;;8759:62;-1:-1:-1;;;8852:2:1;8837:18;;8830:33;8895:3;8880:19;;8680:225::o;8910:347::-;9112:2;9094:21;;;9151:2;9131:18;;;9124:30;9190:25;9185:2;9170:18;;9163:53;9248:2;9233:18;;9084:173::o;9262:355::-;9464:2;9446:21;;;9503:2;9483:18;;;9476:30;9542:33;9537:2;9522:18;;9515:61;9608:2;9593:18;;9436:181::o;9622:356::-;9824:2;9806:21;;;9843:18;;;9836:30;9902:34;9897:2;9882:18;;9875:62;9969:2;9954:18;;9796:182::o;9983:348::-;10185:2;10167:21;;;10224:2;10204:18;;;10197:30;10263:26;10258:2;10243:18;;10236:54;10322:2;10307:18;;10157:174::o;10336:405::-;10538:2;10520:21;;;10577:2;10557:18;;;10550:30;10616:34;10611:2;10596:18;;10589:62;-1:-1:-1;;;10682:2:1;10667:18;;10660:39;10731:3;10716:19;;10510:231::o;10746:401::-;10948:2;10930:21;;;10987:2;10967:18;;;10960:30;11026:34;11021:2;11006:18;;10999:62;-1:-1:-1;;;11092:2:1;11077:18;;11070:35;11137:3;11122:19;;10920:227::o;11152:400::-;11354:2;11336:21;;;11393:2;11373:18;;;11366:30;11432:34;11427:2;11412:18;;11405:62;-1:-1:-1;;;11498:2:1;11483:18;;11476:34;11542:3;11527:19;;11326:226::o;11557:354::-;11759:2;11741:21;;;11798:2;11778:18;;;11771:30;11837:32;11832:2;11817:18;;11810:60;11902:2;11887:18;;11731:180::o;11916:408::-;12118:2;12100:21;;;12157:2;12137:18;;;12130:30;12196:34;12191:2;12176:18;;12169:62;-1:-1:-1;;;12262:2:1;12247:18;;12240:42;12314:3;12299:19;;12090:234::o;12329:397::-;12531:2;12513:21;;;12570:2;12550:18;;;12543:30;12609:34;12604:2;12589:18;;12582:62;-1:-1:-1;;;12675:2:1;12660:18;;12653:31;12716:3;12701:19;;12503:223::o;12731:177::-;12877:25;;;12865:2;12850:18;;12832:76::o;12913:983::-;;13223:3;13212:9;13208:19;13254:6;13243:9;13236:25;13280:2;13318:6;13313:2;13302:9;13298:18;13291:34;13361:3;13356:2;13345:9;13341:18;13334:31;13385:6;13420;13414:13;13451:6;13443;13436:22;13489:3;13478:9;13474:19;13467:26;;13528:2;13520:6;13516:15;13502:29;;13549:4;13562:195;13576:6;13573:1;13570:13;13562:195;;;13641:13;;-1:-1:-1;;;;;13637:39:1;13625:52;;13732:15;;;;13697:12;;;;13673:1;13591:9;13562:195;;;-1:-1:-1;;;;;;;13813:32:1;;;;13808:2;13793:18;;13786:60;-1:-1:-1;;;13877:3:1;13862:19;13855:35;13774:3;13184:712;-1:-1:-1;;;13184:712:1:o;13901:184::-;14073:4;14061:17;;;;14043:36;;14031:2;14016:18;;13998:87::o;14090:128::-;;14161:1;14157:6;14154:1;14151:13;14148:2;;;14167:18;;:::i;:::-;-1:-1:-1;14203:9:1;;14138:80::o;14223:217::-;;14289:1;14279:2;;-1:-1:-1;;;14314:31:1;;14368:4;14365:1;14358:15;14396:4;14321:1;14386:15;14279:2;-1:-1:-1;14425:9:1;;14269:171::o;14445:168::-;;14551:1;14547;14543:6;14539:14;14536:1;14533:21;14528:1;14521:9;14514:17;14510:45;14507:2;;;14558:18;;:::i;:::-;-1:-1:-1;14598:9:1;;14497:116::o;14618:125::-;;14686:1;14683;14680:8;14677:2;;;14691:18;;:::i;:::-;-1:-1:-1;14728:9:1;;14667:76::o;14748:135::-;;-1:-1:-1;;14808:17:1;;14805:2;;;14828:18;;:::i;:::-;-1:-1:-1;14875:1:1;14864:13;;14795:88::o;14888:127::-;14949:10;14944:3;14940:20;14937:1;14930:31;14980:4;14977:1;14970:15;15004:4;15001:1;14994:15;15020:133;-1:-1:-1;;;;;15097:31:1;;15087:42;;15077:2;;15143:1;15140;15133:12;15158:120;15246:5;15239:13;15232:21;15225:5;15222:32;15212:2;;15268:1;15265;15258:12

Swarm Source

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